わかりましたので、この巨大な配列をJと呼びましょう
J の各要素には、関連付けられた配列 TJ がありますが、TJ の長さは J に関して可変です。
たとえば、シーケンシャル手順は次のようになります
for(J=0;J<length(ARRAY_J))
do
for(T=0;T<length(ARRAY_TJ))
do
ARRAY_RESULT[J]+=ARRAY_J[J]+ARRAY_TJ[T]
end
end
そこで、スレッドを 2D ブロックに配置すると、スレッドの x インデックスを J に、スレッドの y インデックスを T に使用できると考えました。
Jの長さはわかりましたが、Tの長さはさまざまであるため、Cudaでこれを定義する方法がわかりません。
例えば
ARRAY_RESULT[blockidx.y*blockDim.y+threadidx.y]+=ARRAY_J[blockidx.y*blockDim.y+threadidx.y]+ARRAY_TJ[blockidx.x*blockDim.x+threadidx.x]
では、ARRAY_TJ の長さが可変であることを考慮して、ここでブロックの寸法を定義するにはどうすればよいでしょうか? 最大長の ARRAY_TJ を使用する必要がありますか? しかし、上記のようなコードは機能しますか? ARRAY_J の各値について、長さ (ARRAY_TJ) の値を合計しますか?