【发布时间】:2020-10-02 05:56:05
【问题描述】:
我正在尝试并行化一个使用 OpenACC 构建 Voronoi 图的程序。我目前正在努力使嵌套的 for 循环并行化,该循环调用在不同文件中定义的函数。我知道你应该在函数上使用#pragma acc 例程装饰器,但我无法让它在我的程序中工作。
我正在使用 PGI 编译器,我得到以下输出
69, Loop is parallelizable
Generating Multicore code
69, #pragma acc loop gang
72, Loop is parallelizable
Loop not vectorized/parallelized: contains call
产生此输出的主文件中的相关代码如下
main.c
#pragma acc routine seq
extern int determineColor(int, int, int*, int);
int main(int argc, char** argv){
....
unsigned int(*imageBuffer)[yDim] = malloc(sizeof(int[xDim][yDim]));
#pragma acc kernels loop
for (int y = 0; y < yDim; y++)
{
for (int x = 0; x < xDim; x++)
{
imageBuffer[x][y] = determineColor(x, y, points, numPoints);
}
}
}
Voronoi.c
#pragma acc routine seq
int determineColor(int x, int y, int* points, int numPoints)
{
...
}
【问题讨论】: