私はCUDAを使用して小さなアプリケーションを開発しています。
私は巨大な2d配列(共有メモリには収まらない)を持っています。すべてのブロックのスレッドは常にランダムな場所から読み込みます。
この2d配列は読み取り専用配列です。
この2d配列はどこに割り当てられますか?グローバルメモリ?定数memroy?テクスチャメモリ?Cuda異なるメモリ割り当て
答えて
デバイスのテクスチャメモリのサイズに応じて、この領域に実装する必要があります。確かに、テクスチャメモリは、順次ローカリティキャッシュ機構に基づいている。これは、連続した識別子のスレッドが比較的近い記憶場所内のデータ要素に到達しようとすると、メモリアクセスが最適化されることを意味します。
さらに、この地域は2Dアクセスのために実装されています。したがって、各スレッドがテクスチャメモリに格納された配列のデータ要素に到達すると、連続した2Dアクセスの場合になります。その結果、メモリアーキテクチャを最大限に活用できます。
このメモリはそれほど大きくはありません。巨大な配列を使用すると、データをその中に収めることができます。この場合、グローバルメモリの使用を避けることはできません。
質問は具体的に...「ランダムな場所」です。これはキャッシュのための良いニュースではありません! – jmilloy
もちろん、キャッシュミス時にのみデバイスメモリからの読み込みに相当するコストがかかるため、データをテクスチャメモリに入れる価値があると簡単に考えることができます!したがって、ランダムアクセスでも、キャッシュされた要素に確実にアクセスし、テクスチャキャッシュの恩恵を受けるでしょう。 – jopasserat
それが一定またはテクスチャに収まるのに十分小さい場合は、私は3つ全てを試みます。
ここに記載されていない興味深いオプションは、ホスト上のマップされたメモリです。デバイスメモリに明示的に転送することなく、デバイスからアクセス可能なホスト上のメモリを割り当てることができます。アクセスする必要のある配列の量に応じて、グローバルメモリにコピーしそこから読み取るよりも高速である可能性があります。
私はjHackTheRipperに同意します。単純な解決策は、テクスチャメモリを使用し、Compute Visual Profilerを使用してプロファイルすることです。画像畳み込みのために異なるメモリタイプについてのgood set of slides from NVIDIAがあります。それは良い共有メモリ使用量とグローバル読み取りがテクスチャメモリを使用するよりもあまり速くないことを示しています。あなたの場合は、グローバルメモリのランダムな値にアクセスすることで通常得られないテクスチャメモリからいくつかの合体した読み込みを得るべきです。
いいね!再び、使用されるアーキテクチャに応じて:非融合アクセスは、コンピューティング機能2.0(Fermi)のデバイスでメモリ性能に及ぼす影響は小さくなります。 – jopasserat
しかし、Compute 1.0用に最適化されたコードを書くと、スピードが2.0倍に向上します – Ljdawson
- 1. CUDAメモリ割り当てのパフォーマンス
- 2. CUDAカーネル内のメモリ割り当て
- 3. __device/global__内のメモリを動的に割り当てるCUDAカーネル
- 4. CUDAのメモリ割り当てとアクセスに関する問題
- 5. CUDAスレッド割り当て
- 6. CUDA割り当てのSIGSEGV
- 7. CUDAは__device__関数でメモリを割り当てます
- 8. CUDA 8とPascalアーキテクチャでのGPUメモリ割り当て
- 9. 静的対動的CUDA共有メモリ割り当てのパフォーマンス
- 10. メモリ割り当て
- 11. 割り当てメモリ
- 12. 割り当てメモリ
- 13. メモリ割り当て
- 14. メモリ割り当て
- 15. 割り当てメモリ**
- 16. メモリ割り当てプロファイリング中にメモリ割り当てが増加し続ける
- 17. 異なる機能でのcudaデバイス変数の割り当てと使用
- 18. Dalvikのメモリ割り当て
- 19. Magentoのメモリ割り当て
- 20. プロセスのメモリ割り当て
- 21. メモリ割り当てとループ
- 22. GtkTreeView treestoreメモリ割り当て
- 23. メモリの割り当て(C)
- 24. メモリ割り当て構造
- 25. iphoneのメモリ割り当て
- 26. MySqlメモリ割り当て
- 27. テーブルビューHeaderSectionメモリ割り当て
- 28. nodejsメモリ割り当てエラー
- 29. `getaddrinfo()`のメモリ割り当て
- 30. メモリ割り当てエラー。
私は確信していますが、ランダムな読み込みはCUDAを適用するのに最適な場所ではありません。テクスチャは空間の局所性に最適化されていますが、読み込みがランダムであれば空間的な局所性はありません。これに基づいて、私はグローバルに行くだろう...しかし、あなたは、アクセスパターンに基づいてCPUの実装よりもスピードアップを見ないかもしれません。 – Marm0t