問題タブ [bank-conflict]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
cuda - 合体とバンクの競合 (Cuda)
cudaでプログラミングするときの合体とバンク競合の違いは何ですか?
共有メモリでバンク競合が発生している間に、グローバルメモリで合体が発生するだけですか?
>1.2 をサポートする GPU を使用している場合、合体について心配する必要がありますか? それ自体で合体を処理しますか?
cuda - バンクコンフリクトとは?(Cuda/OpenCL プログラミングを行っています)
CUDA と OpenCL のプログラミング ガイドを読んでいますが、バンク コンフリクトとは何かがわかりません。彼らは、主題自体について詳しく説明することなく、問題を解決する方法に飛び込むだけです. 誰でもそれを理解するのを手伝ってもらえますか? ヘルプが CUDA/OpenCL のコンテキストにあるのか、それともコンピュータ サイエンス全般のバンク コンフリクトに関連するものなのか、好みはありません。
cuda - Cuda/OpenCL のグローバル メモリにバンク コンフリクトがないのはなぜですか?
私が理解していないことの1つは、Googleが私を助けていないことです.共有メモリでは銀行の競合が発生する可能性があるのに、グローバルメモリでは発生しないのはなぜですか? レジスタとのバンクの競合はありますか?
更新 うわー、ティビットとグリズリーからの2つの回答に本当に感謝しています。緑のチェック マークを 1 つの回答にしか付けることができないようです。私はスタックオーバーフローに慣れていません。1つの答えを最良のものとして選択する必要があると思います。緑のチェックを付けていない回答に対して、何かお礼をすることはできますか?
c++ - GPU 共有メモリ バンクの競合
銀行の競合がどのように発生するかを理解しようとしています。
グローバル メモリにサイズ 256 の配列があり、1 つのブロックに 256 のスレッドがあり、配列を共有メモリにコピーしたい場合。したがって、すべてのスレッドが 1 つの要素をコピーします。
この単純なアクションで銀行の競合が発生しますか?
配列のサイズがスレッドの数よりも大きいと仮定して、これを使用してグローバル メモリを共有メモリにコピーします。
上記のコードは銀行の競合を引き起こしますか?
opencl - OpenCL バンクの競合 - メモリの削除 / データの破損?
この質問のあいまいさを前もってお詫び申し上げます。
バックグラウンド:
OpenCL で形態学的画像処理関数を作成しようとしています。すべてのピクセルのデータを格納するために使用する __local バッファーがあります (各ピクセルはワークアイテムで表され、まだループ展開はありません)。また、私はテストの初期段階であるため、単一のワークグループ (8x8 ピクセルの画像であるため、手動で結果を検証できます) のみを使用しています。
問題:
場合によっては、1 つ、2 つ、3 つ、さらには 4 つのピクセルからのデータを別のピクセル バッファーに追加する必要があります。これらは同じワークグループ内の隣接するピクセルであるため、ローカル メモリ バンクの競合が発生していると確信しています。大丈夫です。速度は私の最優先事項ではありません (まだ!)。ただし、これらのバンクの競合により、データが失われたり、データが破損したりするようです。バッファーがオーバーフローしたりオーバーランしたりしないように細心の注意を払っています。
ですから、私の最初の質問は、銀行の競合がデータの破損や損失を引き起こしている可能性はありますか? Opencl 仕様は、操作をシリアル化して帯域幅を遅くする必要があることを示しているようですが、データ損失については言及されていません。
私の 2 番目の質問は: 助けて! - これについて何ができますか?
どんなガイダンスも大歓迎です-ありがとう!
cuda - CUDAにおけるバンクコンフリクトと合体アクセスの関係
一部のデータを共有メモリからグローバル メモリに転送しようとしています。一部の連続するスレッドは、1 つのバンクにアクセスします (ただし、同じ 32 ビットにはアクセスしません)。そのため、いくつかの銀行の競合があります。(Visual Profiler を使用して確認しています) ただし、これらのデータも結合されてグローバル メモリに転送されます。(私は Visual Profiler を使用してこれを確認しています) データが合体してグローバル メモリに書き込まれるのはなぜですか? 私の意見では、ストリーミング マルチプロセッサは (銀行の帯域幅に基づいて) 32 ビット ワードを 1 つずつポップします。そのため、メモリ トランザクションをグローバル メモリに結合することはできません。ここでいくつかの間違いを犯す可能性があります。間違いを見つけるのを手伝うか、合理的な説明をしてください。ありがとうございました。
cuda - 共有メモリから int 配列を読み取ると、バンクの競合が防止されますか?
スレッド ブロックあたり 16 スレッドで起動される CUDA カーネルを設計しています。処理したい共有メモリ (つまり、スレッド ブロックごと) に N 個の int の配列があります。
スレッドのアクセス パターンが配列内で連続している場合、バンクの競合が発生しないということですか? 配列がchar配列の場合、バンクの競合が発生することは理解していますが、int配列の場合はどうなるか完全にはわかりません。4 つの連続する int の各セットが同じメモリ バンクを共有するため、バンクの競合が発生すると思いますか?
これが正しい場合、銀行の競合を防ぐための正しい解決策は何ですか? ヒストグラム サンプルのようなスクランブリングに対処しますか?
cuda - 2.x デバイスでのバンクの競合
2.x デバイスとのデバイスでのバンク競合とは何ですか? CUDA C プログラミング ガイドを理解しているように、2.x デバイスでは、2 つのスレッドが同じ共有メモリ バンク内の同じ 32 ビット ワードにアクセスしても、バンクの競合は発生しません。代わりに、単語がブロードキャストされます。2 つのスレッドが同じ 32 ビット ワードを同じ共有メモリ バンクに書き込む場合、1 つのスレッドだけが成功します。
オンチップ メモリは 64 KB (共有メモリは 48 KB、L1 は 16 KB、またはその逆) であり、32 バンクで構成されているため、各バンクは 2 KB で構成されていると想定しています。したがって、2 つのスレッドが同じ共有メモリ バンク内の 2 つの異なる 32 ビット ワードにアクセスすると、バンクの競合が発生すると思います。これは正しいです?
cuda - カーネルパラメータを使用すると、バンクの競合が発生する可能性がありますか?
カーネルパラメータは、オンチップ共有メモリに保存されます。スレッドが同じバンクにアクセスしようとすると、共有メモリでバンクの競合が発生する可能性があります。 だから私の質問は:それはカーネルパラメータスレッドを使用するとバンクの競合が発生することを意味しますか?
cuda - このコードで銀行の競合を減らすにはどうすればよいですか?
このCUDAコードは、Nsightで分析すると、多くの銀行の競合を報告します。最初のスニペットには、定数の定義とカーネル呼び出しが含まれています。
2番目のスニペットにはカーネルコードが含まれています。
なぜ銀行の対立が起こっているのか知りたい。競合が発生する可能性があると思う唯一の方法は、同じバンクにマップする異なるアレイのアクセスがシリアル化された場合です。