私はしばらくの間苦労してきた次の問題があります。 CUDA多くの小規模のアレーを集約
I持って16素子、たとえば、で構成され、多数の小さなアレイから組み立て実際には、以下の配列:
[1,1,1,1 | 2,2,2,2 、2,2,3,3,3,3,3,3,4,4,4]
実際には、配列はかなり長く、約512または1024であり、配列の総長は最大ブロック・サイズよりも小さいため、1024より小さい。配列は、前の計算の結果であるため、共用メモリーに存在する。最初と最後を除くすべての部分配列は同じサイズであり、すべての部分配列は偶数の要素を持ちます。 12、... | | 18、... |結果は
[4、...となるように、
1つのCUDAブロックでは、私は、この配列を合計したい、16 ...サブアレイは、2のべき乗の長さのものであった場合]
ので、一つの選択肢は、このように0を持つ配列を充填することで、そこに問題はないが、それはほとんど事実でないことをサブアレイ2のべき乗の長さを有するであろう:
[ 1,1,1,2,2,2,2,2,2,0,0,3,3,3,3,3,0,0 | 4,4,4,4]
しかし、これは、私は長さ34のサブアレイを持っていたし、私は誰でもへの効率的なソリューションを参照してくださいん64.
を埋めるために各30個の0値要素に追加する場合は、処理能力の膨大な量の廃棄物と共有MEMでありますそのような配列を合計しますか? 助けていただければ幸いです。
サブアレイの値は、値が列挙によって記述できるように、以前に分かっていた値の集合から来ますか?その場合、アトミック操作が役立つ可能性があります。 – nglee
いいえ、それらはあらかじめ計算されていますが、ここでは明瞭にするために値を繰り返します。とにかく、ついに合理的に速いsulutionを見つけることができました。誰かが同じ問題を抱えた場合に備えてすぐに投稿します – quirell