Вы можете сделать что-то подобное, но прочитайте предупреждение ниже.
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
}
И вдруг все становится довольно неуклюжим.