私はcudaで流体力学の問題に取り組んでおり、このような問題を発見しました
長さ600のdebug_arrayと長さ100の配列value_arrayなどの配列があり、次のようにしたい場合
for(int i=0;i<6;i++)
{
debug_array[6*(bx*block_size+tx)+i] = value_array[bx*block_size+tx];
}
この例では、block_size は 100 要素の配列に基づいています。たとえば、4 ブロック block_size 25 です。
value_array にたとえば 10;20;30;..... が含まれている場合、debug_array には 10;10;10;10;10;10;20;20;20;20;20;20 のような 6 つの同様の値のグループがあると予想されます。 ;30......
問題は、values 配列からすべての値を取得していないことです。なぜこれが機能しないのか、または適切な回避策があります。
float val = value_array[bx*block_size+tx]; を定義するとうまくいきます。for ループの外側に置き、これをループ内に保持します debug_array[bx*block_size+tx+i] = val;
しかし、カーネルにはループ内に 5 ~ 10 個のデバイス関数があり、読みにくくなるため、これは避けたいと思います。
アドバイスをいただければ幸いです。
マーカス