私は現在、CPUコードよりも約3〜4倍遅いパフォーマンスのCUDAコードを持っています。
ほとんどの計算がGPUで実行され、最終結果のみがCPUメモリに転送されるように、無関係なCPU/GPU転送をすべて削除しました。
これをさらに高速化するために、少し読んでみたところ、GPUメモリバスがはるかに遅いため、GPUデバイスメモリへのアクセスも遅いことがわかりました。そして、私の計算では大きな配列を使用しているため、つまり多くのメモリアクセスを使用しているthreadsPerBlock
ため、最大1024に設定した場合でも処理速度が低下します。
私が今持っている唯一のオプションは、データのブロックを個々のブロックによって操作されるMP共有メモリにコピーし、そのメモリで計算を行うことだと思います。
バーストモードのメモリのチャンクを共有メモリに最も効率的にコピーする方法を知りたいです。各ワープの開始スレッドインデックスをコピーして実行する必要がありますか?
これを達成するための関連するコードまたは関数を備えたソリューションは大歓迎です!