在我的程序中,我需要按以下方式划分n个线程:
1)线程1正在做他的特定工作
2)n-1个其他线程都在做自己的工作
如果_threads == 1,则仅执行操作1)。
动作1)和2)是并行计算的
ScrollView
我想出以下解决方案
1)硬编码,以使id == 1的线程不会计算第二个块
2)就主线程的id = 0而言,我可以在第二个块中以i = 1开头使用void main(){
int number_of_threads;
std::cin>>number_of_threads;
omp_set_num_threads(number_of_threads);
#pragma omp parallel if (number_of_threads>1)
{
#pragma omp master // no barrier at the end of master block
single_calc();
#pragma omp ??(number_of_threads-1) //second block
// this section of code is computed by n-1 processes
}
}
3)在#pragma omp for
之外调用single_calc()(但我想控制计算此块的线程数量)
对此有任何优雅的解决方案吗?