1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
|
//------------------------------------------------------------------------------
// GB_nthreads.h: determine # of threads to use for parallel region
//------------------------------------------------------------------------------
// SuiteSparse:GraphBLAS, Timothy A. Davis, (c) 2017-2025, All Rights Reserved.
// SPDX-License-Identifier: Apache-2.0
//------------------------------------------------------------------------------
#ifndef GB_NTHREADS_H
#define GB_NTHREADS_H
//------------------------------------------------------------------------------
// GB_nthreads: determine # of threads to use for a parallel loop or region
//------------------------------------------------------------------------------
// If work < 2*chunk, then only one thread is used.
// else if work < 3*chunk, then two threads are used, and so on.
static inline int GB_nthreads // return # of threads to use
(
double work, // total work to do
double chunk, // give each thread at least this much work
int nthreads_max // max # of threads to use
)
{
work = GB_IMAX (work, 1) ;
chunk = GB_IMAX (chunk, 1) ;
int64_t nthreads = (int64_t) floor (work / chunk) ;
nthreads = GB_IMIN (nthreads, nthreads_max) ;
nthreads = GB_IMAX (nthreads, 1) ;
return ((int) nthreads) ;
}
#endif
|