开发者

C OpenMP - Enforce default chunk size

开发者 https://www.devze.com 2023-02-28 20:04 出处:网络
In C to parallelize a loop with schedule(static) would mean that the chunk size is quickly computed as ceil(loops/threads).

In C to parallelize a loop with schedule(static) would mean that the chunk size is quickly computed as ceil(loops/threads).

For my project I have to iterrate through 9 different chunk sizes, one of which is "default". This is how I did it:

I wrote a perl loop that compiles my program with -DCHUNKSIZE=$c and in the omp code I specify schedule(static, CHUNKSIZE).

Question: what can I do for default? Chunk size of 0 doesn't work :(

Thanks!

P.S. I was hoping to avoid having #ifdef ..开发者_运维技巧. #else ... #endif since I have very many loops that are parallelized


I agree with ejd. As to how to handle it, why not:

#ifdef CHUNKSIZE
#pragma omp parallel for schedule(mode, CHUNKSIZE)
#else
#pragma omp parallel for schedule(mode)
#endif
for ( ; ; ) /* ... */

and then not pass -DCHUNKSIZE for the default.


You have to leave the chunksize off completely and just specify "schedule(kind)".


#ifdef CHUNKSIZE
#define OPM_FOR(mode) _Pragma("omp parallel for schedule(" #mode ", "CHUNKSIZE")")
#else
#define OMP_FOR(mode) _Pragma("omp parallel for schedule(" #mode ")")
#endif

OMP_FOR(static)
for ( ; ; ) { /* */ }

Basically, Æsahættr's solution with the additional use of the _Pragma() operator (which is in C99, I believe).

0

精彩评论

暂无评论...
验证码 换一张
取 消