問題タブ [coalescing]
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.
memory - CUDA-メモリアクセスとバス幅の合体
したがって、CUDAでのメモリアクセスの合体について私が持っている考えは、ワープ内のスレッドは連続したメモリアドレスにアクセスする必要があるということです。これは、複数ではなく単一のメモリトランザクション(各アドレスの値がスレッドにブロードキャストされる)のみを引き起こすためです。シリアル方式で実行されるもの。
今、私のバス幅は48バイトです。これは、各メモリトランザクションで48バイトを転送できることを意味しますよね?したがって、バスを最大限に活用するには、一度に48バイトを読み取ることができる必要があります(スレッドごとに複数のバイトを読み取ることにより、メモリトランザクションはワープによって実行されます)。ただし、仮に、一度に48バイトを読み取る単一のスレッドが同じ利点を提供するのではないでしょうか(サイズが48バイトの構造を読み取ることで一度に48バイトを読み取ることができると想定しています)。
合体に関する私の問題は、データに対して行わなければならない転置です。私はたくさんのデータを持っているので、転置には時間がかかり、できれば他の何かに使用したいと思います。
ComputeCapability2.0を使用しています。
cuda - 非合体float2CUDAカーネル
以下の例のグリッドとブロックのサイズを最適化するのに問題があります。プロファイリングを行うと、カーネルコードのメモリ書き込み操作が合体していないようです。
インターネットでいくつかの解決策を見つけましたが、c_imageの構造を次のように変更するように提案されました。[x1, x2, x3...] [y1, y2, y3...]
ただし、[x1, y1] [x2, y2]...
この正確な形式を必要とする別の場所のコードでCUFFTライブラリを使用しているため、構造が必要です。
c_image構造体で操作を実行するための合体した方法はありますか?
私のコード:
どうもありがとう!
PS:私はこれを試しましたが、運がありません!CUDAfloat2合体
memory-management - cuda メモリ合体
最初に次のことを確認したいと思います。共有メモリへの基本的なグローバル メモリ トランザクションは、32 バイト、64 バイト、または 128 バイトのいずれかですが、メモリ アクセスを結合できる場合に限ります。前のトランザクションのレイテンシはすべて同じです。そうですか?
2 番目の質問: メモリ読み取りを結合できない場合、各スレッドは 4 バイトしか読み取りません (そうですか?) すべてのスレッドのメモリ アクセスはシーケンシャルになりますか?
css - CSS パフォーマンス: Web ブラウザーは CSS ルールの実行を結合しますか?
Web ブラウザーは CSS ルールの実行を合体させて効率的に実行しますか?
複数の CSS ルールがカスケードされていることはわかっています。
カスケードされたルールのパフォーマンスへの影響のみに興味があります。
たとえば、次の場合:
display:block;
との両方が smargin:1rem;
に適用されることはわかっていselect
ます。
ブラウザーが内部の css セレクター チェックを最適化するかどうかはわかりません。上記の例では、最適ではありませんが、ブラウザーは以下をチェックできます。
- ボタン、オプション、または選択の場合、display:block;
- 選択した場合、margin:1rem;
これらのチェックを実行する最適な方法は次のとおりです。
- ボタンまたはオプションの場合、display:block;
- 選択した場合、display:block; マージン:1レム;
最新のブラウザーのほとんどは、select
セレクターの 2 つのルールの実行を結合して、2 番目のチェック セット (最適なもの) を実行するほどスマートですか?
もしそうなら、どのブラウザーとそのバージョンが css ルールの合体を実行しますか?
これに関するドキュメントへのリンク、またはブラウザー機能リスト サイトの情報へのリンクも歓迎します。
CSS を最小限に抑え (宣言の重複を避けるためにセレクター部分を複製することもある)、CSS をより保守しやすくしたいので、これに興味があります。ただし、クライアントのブラウザーが冗長な css セレクターを実行するサイクルを無駄にしないようにしたいと考えています。
ありがとう。
memory - グローバル メモリ リプレイ オーバーヘッドはどこから発生していますか?
以下のコードを実行して、NVIDIA Visual Profilerのグローバル メモリに 1 GB を書き込むと、次の結果が得
られ
ます
。
メモリ書き込みは結合されるはずであり、カーネルに発散はありません。そのため、問題は、グローバル メモリ リプレイ オーバーヘッドがどこから発生しているのかということです。nvidia-cuda-toolkit バージョン 5.0.35-4ubuntu1 を使用して、これを Ubuntu 13.04 で実行しています。
memory - 各データが 128 ビット以上かかる場合、それらをメモリ内でグループ化する利点はありますか?
CUDA プログラミング ガイドで、CUDA デバイスのグローバル メモリが 32、64、または 128 ビットのトランザクションによってアクセスされることを読みました。それを知っていると、たとえば、float4 (128 ビット) のセットをメモリ内で互いに近づけることの利点はありますか? 私が理解しているように、float4がメモリに分散されているか、シーケンスに分散されているかに関係なく、トランザクションの数は同じになります。それとも、すべてのアクセスが 1 つの巨大なトランザクションにまとめられるのでしょうか?
memory-management - CUDA: 同じデバイス配列へのアクセスが結合されないのはなぜですか?
レビュー用にドリルダウンしたコードを投稿しています。問題なくコンパイル、実行できると思いますが、関係のない部分をすべて除外したので、間違っている可能性があります。
これは、固定長配列を使用した Users 構造です。以下に主な機能を示します。
ここで、ステップ配列は 96 個のビンを持つ 1D 配列であり、10 個のワープにまたがっていることに注意してください (x 方向に 32 個のスレッドがあり、私のブロックには 10 個あります)。各ワープは同じ Step 配列にアクセスします。これは、以下のカーネルで確認できます。
NVIDIA Visual Profiler を使用すると、結合された取得は 47% になりました。さらに調査したところ、各ワープがアクセスしているステップ配列がこの問題を引き起こしていることがわかりました。これを何らかの定数に置き換えると、アクセスは 100% 合体します。
Q1) 私が理解しているように、合体アクセスはバイト ラインにリンクされています。つまり、バイト ラインは、整数、ダブル バイト ラインのいずれであっても、32 の倍数でなければなりません。合体アクセスが得られないのはなぜですか?
私の知る限り、cudaはデバイスのグローバルメモリにメモリブロックを割り当てるたびに、偶数アドレスを割り当てました。したがって、始点 + 32 の場所がワープによってアクセスされる限り、アクセスは合体する必要があります。私は正しいですか?
ハードウェア
Geforce GTX 470、Compute Capability 2.0