7 ポイントの計算ステンシルを含む問題に取り組みたいと考えています。知らない人のために説明すると、これは 3D グリッドであり、7 つのポイントは n 番目のポイントであり、隣接するポイントは x、y、z 方向に正と負の両方で 1 つ離れたポイントです (または東に隣接するポイント)。 /west/north/south および up/down)。
したがって、これらの 6 つのポイントに加えて、私が取り組んでいる 1 つの追加ポイントが計算に使用され、すべて 1 次元配列に格納されます。
nx を立方体の幅、ny を高さとします。メモリ内では、All_points[n] などの配列 All_Points 内のポイントにアクセスしているときに、各方向の隣接ポイントを取得するために、All_points[n-1]、All_points[n+1] にもアクセスしたいと考えています。 、All_points[n-nx]、All_points[n+nx]、All_points[n-nx ny]、および All_points[n+nx ny]。
したがって、これに関する私の問題は、大量のキャッシュミスが発生していることです。この問題を回避する方法を示すコード例が見つからないようです。理想的には、この配列を All_x_points[] などの x、y、z 座標に分割して戻したいのですが、All_points[n] が変更されるため、それを更新し続けようとすると問題が発生します。つまり、他の All_points[n'] の場合、x、y、または z の値を更新する必要があります。
この種のことが以前に行われたのを見た人はいますか?