Я хочу запустить два отдельных цикла параллельно, используя OpenMP - PullRequest
0 голосов
/ 07 октября 2019

Два разных цикла должны выполняться параллельно в C с использованием openmp. Я новичок в openmp и нашел решения, где шаги одного цикла выполняются параллельно, а не несколько циклов. пожалуйста, кто-нибудь может подсказать, как это сделать.

#include<stdio.h>

int main() 
{
      // this loop must run on processor 1
      for(int i=0;i<k;i++)
      {   // work to be done in loop1
      }

      //this loop must run on processor 2
      for(int i=0;i<k;i++)
      {   //work to be done in loop2
      }
}

1 Ответ

1 голос
/ 07 октября 2019

Вы можете сделать что-то подобное, но прочитайте предупреждение ниже.

int id;

#pragma omp parallel private(id) num_threads(2)
{
    id = omp_get_thread_num();
    if(id == 0) {
        // Loop1
    }

    else if(id == 1) {
        // Loop2
    }
}

Довольно понятно. Создайте два потока, получите идентификатор потока, который выполняется, и выберите, что делать, в зависимости от идентификатора.

Однако это довольно неловкий способ сделать это. Это не то, как вы обычно распараллеливаете вещи с OpenMP. Это больше или стиль Pthreads.

Предупреждение

Помните, что num_threads(2) не гарантирует вам две темы. Поэтому, если вы хотите использовать этот метод, вам нужен какой-то охранник.

if(omp_get_num_threads() < 2) {
    // Serial code
} else {
    // Parallel code
}

И вдруг все становится довольно неуклюжим.

...