私のコードには、二重ループがあり、構造体内の値を更新する必要がある部分がたくさんあります。問題は、構造体の配列であるため、多くの参照解除が行われることです。以下に例を示します。
for(i=0;i<y;i++) {
for(j=0;j<x;j++) {
index = i*x+j;
y1 = (i + 1) % y;
x1 = (j + 1) % x;
y2 = (i == 0) ? (i + y - 1) : (i - 1);
x2 = (j == 0) ? (j + x - 1) : (j - 1);
str[i *x + j].arr[0] = c[index].arr[0];
str[i *x + x1].arr[1] = c[index].arr[1];
str[y1*x + j].arr[2] = c[index].arr[2];
str[i *x + x2].arr[3] = c[index].arr[3];
str[y2*x + j].arr[4] = c[index].arr[4];
str[y1*x + x1].arr[5] = c[index].arr[5];
str[y1*x + x2].arr[6] = c[index].arr[6];
}
}
おそらくOpenMPを使用して、これを可能な限り高速化したいと思います。偽の共有がたくさんあり、ポインターも使用できないと思います。これを高速化する効率的な方法(および同様のコード)を知っていますか