C OpenMP - 强制执行默认块大小

时间:2011-04-25 18:45:31

标签: c scheduling openmp

在C中使用schedule(static)并行化循环意味着块大小可以快速计算为 ceil (loops/threads)

对于我的项目,我必须通过9种不同的块大小来实现,其中一种是“默认”。我就这样做了:

我编写了一个perl循环,用-DCHUNKSIZE=$c编译我的程序,并在omp代码中指定schedule(static, CHUNKSIZE)

问题:默认情况下我该怎么办?块大小为0不起作用:(

谢谢!

P.S。 我希望避免使用#ifdef ... #else ... #endif,因为我有很多并行化的循环

3 个答案:

答案 0 :(得分:2)

我同意ejd。至于如何处理它,为什么不:

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

然后不会传递-DCHUNKSIZE作为默认值。

答案 1 :(得分:1)

你必须完全关闭chunksize并指定“schedule(kind)”。

答案 2 :(得分:1)

#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 ( ; ; ) { /* */ }

基本上,Æsahættr的解决方案是额外使用_Pragma()运算符(我相信在C99中)。