0

我有以下代码:

#pragma acc data present(listOfPolygons1, listOfPolygons2, polygon1, polygon2) copy(listOfBoolean[0:numOfPolygonsPair])
#pragma acc parallel loop
    // do point-in-polygon in this nested loop
    for (i=0; i<polygonCount1; i++){

        polygon1 = listOfPolygons1[i];

        for (j=0; j<polygonCount2; j++){

            polygon2 = listOfPolygons2[j];

            idx = polygonCount2 * i + j;

            if (listOfBoolean[idx]==0){
                // don't even have an intersection
                continue;
            } else {
                // do point-in-polygon test

                for (k=0; k<polygon2.num_vertices; k++){  // line 139

                }

            }
        }
    }

“polygon1”和“polygon2”是结构。
“listOfPolygons1”和“listOfPolygons2”是结构体数组,对应着“polygon1”和“polygon2”的列表。
"listOfBoolean" 是一个 int 数组,
"listOfPolygons1" 和 "listOfPolygon2" 都被深度复制到加速器并在之前的循环中成功使用(此处未显示代码)

该代码可以编译,但运行时会产生以下错误消息:

call to cuEventSynchronize returned error 716: Misaligned address

我的观察
问题似乎在第 139 行。当我使用“k<polygon2.num_vertices”时,它产生了我提到的错误。
但是,如果我将这一行改为:

 for (k=0; k<listOfPolygons2[j].num_vertices; k++) // not using struct "polygon2"

(更新 1)或者这个:

for (k=0; k<polygon1.num_vertices; k++) // use polygon1.num_vertices instead

程序可以编译运行成功

为什么会这样,我如何在这里使用 struct "polygon2"?

4

0 回答 0