che*_*ang 3 parallel-processing multithreading for-loop openmp sections
我有两个函数,第二个函数中有一个 for 循环。
fun1() {
...
}
fun2() {
for(...) {
}
}
Run Code Online (Sandbox Code Playgroud)
现在我想并行运行fun1(fun2即每个函数使用单个线程)。在里面fun2我希望我可以用来omp parallel for执行 for 循环。
我尝试像这样实现它。
fun1() {
}
fun2() {
#pragma omp for
for() {
}
}
int main() {
#pragma omp parallel
{
#pragma omp single
{
fun1();
}
fun2();
{
}
Run Code Online (Sandbox Code Playgroud)
但它会调用fun2多次。
那么有办法做到这一点吗?
您应该结合使用 OpenMP 部分和嵌套并行性:
在main:
omp_set_nested(1);
#pragma omp parallel sections num_threads(2)
{
#pragma omp section
fun1();
#pragma omp section
fun2();
}
Run Code Online (Sandbox Code Playgroud)
在fun2:
#pragma omp parallel for
for (...)
{
}
Run Code Online (Sandbox Code Playgroud)
要使用例如 8 个线程运行程序,请执行以下操作:
OMP_NUM_THREADS=8 OMP_THREAD_LIMIT=8 ./program
Run Code Online (Sandbox Code Playgroud)
这样,外部并行区域将使用两个线程执行,而嵌套并行区域fun2将使用七个线程执行。如果OMP_THREAD_LIMIT未设置为 8(或未设置),OpenMP 将为嵌套区域启动 8 个线程,总共 9 个线程,这可能是理想的,也可能不是。
| 归档时间: |
|
| 查看次数: |
887 次 |
| 最近记录: |