私は疎なジオメトリの非立方体のバウンディングボックスを含む3次元配列を持っています。3d疎なジオメトリのヒルベルト曲線
アレイジオメトリ[X] [Y](x、y、z)が計算領域の部分とそうでない場合は1
私はだろう演算の順序を変更しようとする試みである場合、[z]は値0を含んでいヒルベルト曲線を使ってこの空間を横断するのが好きです。
コンテキストは、メモリにバインドされたGPUプログラムでのグローバルメモリアクセスを最適化しています。
どうすれば実装できますか?
更新: 私は私は一緒に要素の19個の隣接ノードを追跡する隣接リストと(配列で)それらを保存するように、非空のセルを通過します。
計算は、単に二つの配列の間にコピーされる:
dst[i] = src[adjacency_map[i]]
これは、物理的解釈は隣接サイトから「流体粒子」をストリーミングしている疎格子ボルツマン法の伝搬位相です。
adjacency_mapの値がより連続的になると、次のようになります。より合体したメモリアクセスが可能になります。
のOpenCLカーネル:
__kernel void propagation(__global double *dst, __global double *source,
__global const int *adjacency_map, const uint max_size)
{
size_t l = get_global_id(0);
if(l > max_size)
return;
dst[l] = src[adjacency_map[l]];
}
**すべての**ボリュームのセル、または空でないセルだけをトラバースしますか?どの計算を細胞に適用したいですか? –
空でないセルだけが後で配列に格納されるので、それをトラバースしたいと思う。私はいくつかのより多くの情報で元の質問を更新しました。 – kyrre