0

我有如下交流程序:

int a[10];
int b;

for(int i = 0; i < 10; i++)

     function1(a[i]);
function1(b);

现在我想并行化所有这 11 个函数 function1() 的调用。我怎样才能使用openmp做到这一点?

我试过了

#pragma omp parallel sections
{
#pragma omp section
#pragmal omp parallel for
for(int i = 0; i < 10; i++)
     function1(a[i]);
#pragma omp section
function1(b);
}

但是上面的代码似乎不起作用。编辑:请将函数 1(b) 读作一些不同的函数,即函数 2(b)。

4

2 回答 2

1

最简单的方法是使用parallel for编译指示:

#pragma omp parallel for
for(int i = 0; i < 10; i++)
    function1(a[i]);

请记住,您必须为编译器打开适当的开关以启用 OMP 支持。例如,在 GCC 中,该开关是-fopenmp

于 2012-05-13T14:14:42.383 回答
1

一种不依赖于 OpemMP 的简单方法是添加ba数组中。
这样,您就可以并行化一个循环。
只需a长 11 个整数,然后将 的值b放在最后一个整数中。

在更一般的情况下(假设 的成员a不是整数,而是更大的东西),您可能需要更改function1以获取指针。然后构建另一个包含 11 个指针的数组。设置 10 指向 的单元格a,最后一个指向b

在更一般的情况下,调用的函数b是不同的(可能具有完全不同的参数)。在这种情况下,您仍然可以使用一个循环:

for (i=0; i<11; i++) {
    if (i<10) {
        function1(a[i]);
    } else {
        function2(b);
    }
}
于 2012-05-13T14:16:37.650 回答