C OpenMP - принудительно использовать размер чанка по умолчанию - PullRequest
1 голос
/ 25 апреля 2011

В C для распараллеливания цикла с schedule(static) будет означать, что размер куска быстро вычисляется как ceil(loops/threads).

Для моего проекта я должен пройти через9 различных размеров чанка, один из которых «по умолчанию».Вот как я это сделал:

Я написал цикл Perl, который компилирует мою программу с -DCHUNKSIZE=$c, а в коде omp я указываю schedule(static, CHUNKSIZE).

Вопрос : что я могу сделать по умолчанию?Размер куска 0 не работает: (

Спасибо!

PS Я надеялся избежать использования #ifdef ... #else ... #endif, так как у меня очень много параллельных циклов

Ответы [ 3 ]

2 голосов
/ 25 апреля 2011

Я согласен с EJD. Что касается того, как справиться с этим, почему бы и нет:

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

и затем не передать -DCHUNKSIZE по умолчанию.

1 голос
/ 03 декабря 2012
#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).

1 голос
/ 25 апреля 2011

Вы должны полностью отключить размер фрагмента и просто указать «расписание (вид)».

...