AMD GPU を使用しており、'Matrix Transpose' の例を実装したいと考えています。実装の 2 つのシナリオを想像してください。
1)
グローバル メモリからの読み取り (現在の場所)
グローバル メモリへの書き込み (ターゲットの場所)
2)
グローバルメモリから読み込み(現在位置)
ローカルメモリへの書き込み
ローカル メモリから読み取る
グローバルメモリへの書き込み(目標位置)
両方のソリューションに最適なワーク グループ サイズを選択したとします。ちなみに、2 番目のアルゴリズムは、ローカル メモリへの共同書き込みを利用しています。
最後に、驚くべきことに、2 番目のシナリオは 1 番目のシナリオの 2 倍の速さであることが判明しました。なぜなのか理解できませんか?
1 つ目では、グローバル メモリとの間で 1 回の読み取りと 1 回の書き込みが行われ、2 つ目では、グローバル メモリ操作に加えて、ローカル メモリとの間で 1 回の読み取りと 1 回の書き込みが行われていることがわかります。それは速くなりますか?
この場合、誰かが私を助けてくれれば幸いです。
前もって感謝します :-)