私の質問は、CUDA の配列の動的に変化する要素のセットへの結合されたグローバル書き込みに関するものです。次のカーネルを検討してください。
__global__ void
kernel (int n, int *odata, int *idata, int *hash)
{
int i = blockIdx.x * blockDim.x + threadIdx.x;
if (i < n)
odata[hash[i]] = idata[i];
}
ここn
で、配列の最初の要素には、 の最初の要素から更新されるhash
のインデックスが含まれます。明らかに、これはひどい合体の欠如につながります。私のコードの場合、あるカーネル呼び出しでのハッシュは、別のカーネル呼び出しでのハッシュとはまったく無関係です (そして、他のカーネルは別の方法でデータを更新します)。そのため、この特定のケンレルを最適化するためにデータを単純に並べ替えるという選択肢はありません。odata
n
idata
この状況のパフォーマンスを改善できる CUDA の機能はありますか? テクスチャ メモリについてはよく耳にしますが、読んだ内容をこの問題の解決策に変換することはできませんでした。