Уступать другим потокам / задачам в OpenMP - PullRequest
1 голос
/ 03 октября 2011

Я хочу использовать OpenMP с CUDA для достижения перекрывающегося выполнения ядра. Все вызовы ядра являются асинхронными, но у меня очень мало кода между запусками, поэтому отдельные потоки OpenMP, как правило, блокируются при попытке запустить другое ядро ​​или делать копию mem (у меня не всегда есть копии mem сразу после вызова Копии async mem не обязательно являются решением). Я хотел бы, чтобы был способ подать сигнал на график OpenMP для переключения на другой поток OpenMP. Возможно ли это в OpenMP?

Пример:

int main() {
   #pragma omp parallel for
   for(int i=0;i<10;i++) {
       for(int j=0;j<10;j++) {
           //call kernel here

           // ---->   Would like to signal to continue with other  
           //           threads as next call will block

           //copy data from kernel
       }
   }
}

1 Ответ

0 голосов
/ 03 октября 2011

Если поток блокируется, планировщик операционной системы должен автоматически переключиться на другой выполняемый поток (если он доступен), поэтому вам не нужно ничего делать.

Однако, если вся ваша программа OpenMP работаетВ этом случае вызывается ядро ​​CUDA. Вероятно, что узким местом является графический процессор, так что вы все равно не получите большой пользы от использования потоков на процессоре.Возможно, не стоит использовать OpenMP вообще.

Если вы продолжаете использовать OpenMP, вам, вероятно, следует добавить collapse(2) к этому omp parallel for.

...