問題タブ [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.
scala - scalaで適切なnull-safe合体演算子を書く方法は?
NPE を捕まえて、スタック トレースから破壊された名前を浚渫しようとするようなホラー ショーを含む、このような質問から回答が得られるのを見たので、回答できるようにこの質問をしています。
コメントまたはさらなる改善を歓迎します。
iphone - NSNotificationQueue 使用中の合体
NSNotificationQueueを使って合体するコードを書いてみました。イベントが複数回発生しても通知を1つだけ投稿したい。
メソッド「test000AsyncTesting」を呼び出すたびに、同じ名前の通知がキューに追加されます。合体の概念に従って、キューに任意の数の通知があるが同じ名前の場合、一度だけ投稿されます。しかし、コードを実行すると、「async000:」が複数回呼び出されます。これは、NSNotificationQueue に追加された通知の数とまったく同じです。合体が機能していないと思います。
私にとって、コードの実行はこれらのケースの両方で同じままです:
ケース 1: [[NSNotificationQueue defaultQueue] enqueueNotification:[NSNotification notificationWithName:@"async000" object:self] postedStyle:NSPostWhenIdle coalesceMask:NSNotificationCoalescingOnName forModes:nil];
ケース 2: [[NSNotificationQueue defaultQueue] enqueueNotification: [NSNotification notificationWithName:@"async000" object:self] postedStyle:NSPostWhenIdle];
私のコードのエラーを教えてください。
memory - CUDA: コンピューティング機能 1.2 以降のメモリ トランザクション サイズ
すべて、「NVIDIA CUDA プログラミング ガイド 2.0」セクション 5.1.2.1 から: 「Compute Capability 1.2 以降のデバイスでの結合」
最小番号のアクティブなスレッドによって要求されたアドレスを含むメモリ セグメントを見つけます。セグメント サイズは、8 ビット データの場合は 32 バイト、16 ビット データの場合は 64 バイト、32、64、および 128 ビット データの場合は 128 バイトです。 "
ここで疑問があります。各ハーフ ワープには 16 のスレッドがあるため、すべてのスレッドが 8 ビット データにアクセスする場合、ハーフ ワープごとの合計サイズは 16 * 8 ビット = 128 ビット = 16 バイトになります。「ガイド」には「8ビットデータの場合は32バイト」と記載されています。半分の帯域幅が無駄になっているようです。私は正しく理解していますか?
ありがとうデリック
cuda - CUDAプログラミング-L1およびL2キャッシュ
CUDAプログラミングで「L1とL2」の両方のキャッシュを使用する場合と「L2のみ」のキャッシュを使用する場合の違いを説明してください。時間の実行で何を期待する必要がありますか?いつより短いGPU時間を期待できますか?L1キャッシュとL2キャッシュの両方を有効にする場合、またはL2を有効にする場合はどうなりますか?ありがとう
memory - CUDAはグローバルメモリへのアクセスを統合しました
CUDAプログラミングガイドを読みましたが、1つ見逃しました。グローバルメモリに32ビット整数の配列があり、それを合体アクセスで共有メモリにコピーしたいとします。グローバル配列には0から1024までのインデックスがあり、それぞれ256スレッドの4つのブロックがあるとします。
合体アクセスはいつ実行されますか?
1.1。
グローバルメモリ内のアドレスは0から255まで、それぞれワープで32スレッドずつコピーされるので、ここで問題ありませんか?
2.2。
someIndexが32の倍数でない場合、それは合体していませんか?住所がずれていますか?あれは正しいですか?
cuda - GPGPU-CUDA:グローバルストアの効率
NVidiaのプロファイラーの「グローバルストア効率」の値に基づいて、カーネルの1つのグローバルメモリ書き込みアクセスがどれだけうまく合体しているかを把握しようとしています(Fermi GPUでCUDA5ツールキットプレビューリリースを使用しています)。
私が理解している限り、この値は、実行されたトランザクションの実際のnbに対する要求されたメモリトランザクションの比率であり、したがって、アクセスがすべて完全に合体されている(100%の効率)かどうかを反映しています。
ここで、スレッドブロック幅が32で、float値を入力と出力として使用する場合、次のテストカーネルは、予想どおり、グローバルロードとグローバルストアの両方で100%の効率を提供します。
私が理解していないのは、入力読み取りと出力書き込みの間に有用なコードを追加し始めると、メモリ書き込みパターンやスレッドブロックジオメトリを変更していないのに、グローバルストアの効率が低下し始める理由です。ただし、予想どおり、グローバル負荷は100%のままです。
誰かがなぜこれが起こるのかを明らかにしてくれませんか?特定のワープの32スレッドすべてが(定義上)出力ストア命令を同時に実行し、「合体しやすい」パターンを使用しているので、以前と同じように100%取得する必要があると思いましたが、明らかに何かを誤解している必要があります。グローバルストアの効率の意味、またはグローバルストアの合体の条件のいずれか。
どうも、
編集 :
次に例を示します。このコードを使用すると(入力に「ラウンド」操作を追加するだけ)、グローバルストアの効率が100%から95%に低下します。
c++ - CUDA ではどちらが高速ですか: グローバル メモリ書き込み + グローバル メモリへの __threadfence() または atomicExch() ですか?
グローバルメモリにシーケンシャルにアクセスするスレッドが多数あると仮定すると、どのオプションが全体的に高速に実行されますか? __threadfence() はすべての共有メモリとグローバルメモリの書き込みを考慮に入れていますが、書き込みは結合されているため、私には疑問があります。一方、atomicExch() は重要なメモリ アドレスだけを考慮しますが、書き込みが結合されているかどうかはわかりません。
コード内:
または
ありがとう。
memory - HLSL: 構造化バッファーを使用したメモリー結合
私は現在、グローバル メモリ帯域幅によって制限される HLSL シェーダーに取り組んでいます。各メモリ トランザクションで、できるだけ多くのメモリを結合する必要があります。CUDA および OpenCL に関する NVIDIA のガイドライン (DirectCompute のドキュメントはかなり不足しています) に基づくと、コンピューティング機能 2.0 の最大メモリ トランザクション サイズは 128 バイトで、アクセス可能な最大ワードは 16 バイトです。グローバル メモリ アクセスは、ワープ内のスレッドによってアクセスされるデータが同じ 128 バイト セグメントに分類される場合に結合できます。これを念頭に置いて、構造が 16 バイトを超える場合、構造化バッファはメモリの合体に悪影響を及ぼしませんか?
2 つの float4 の構造があるとします。それらを A および B と呼びます。非発散ワープで発行された命令の 1 つのメモリ トランザクションで、A または B のいずれかにアクセスできますが、両方にはアクセスできません。メモリのレイアウトは ABABABAB のようになります。連続する構造体を共有メモリに読み込もうとしている場合、この方法でデータを格納することでメモリ帯域幅が浪費されませんか? たとえば、アクセスできるのは A 要素のみですが、ハードウェアはメモリ トランザクションを結合するため、128 バイトの連続データ (半分は B 要素) を読み取ります。基本的に、メモリ帯域幅の半分を無駄にしています。構造体のバッファではなく、バッファの構造体である AAAABBBB のようなデータを格納する方がよいのではないでしょうか? それとも、これは L1 キャッシュによって処理されますか? 次の命令が B 要素を読み込むときに高速にアクセスできるように、B 要素はどこにキャッシュされますか? 他の唯一の解決策は、偶数番号のスレッドが A 要素にアクセスし、奇数番号の要素が B 要素にアクセスすることです。
メモリ帯域幅が実際に浪費されている場合、利便性以外で構造化バッファを使用する理由がわかりません。誰かが理解できるように、これを十分に説明したことを願っています。NVIDIA 開発者フォーラムでこれを尋ねますが、まだダウンしていると思います。NVIDIA Nsight フレーム プロファイラーを実行しようとすると、Visual Studio がクラッシュし続けるため、データの保存方法の変更によってメモリ帯域幅がどのように影響を受けるかを確認するのが困難です。PS、NVIDIA Nsight フレーム プロファイラーを正常に実行できた人はいますか?
c# - 10 進数と 10 進数の Null 合体演算子
null 合体演算子の適用中に次のエラーに直面しています。
次のエラーが返されます。
演算子「??」タイプ 'decimal' および 'decimal' のオペランドには適用できません
なぜこれが機能しないのですか?null合体演算子は小数では機能しませんか、それともここに何かが欠けていますか? 演算子を使用せずにこれを回避する方法は知っていますが、これにはやや困惑したので、これに関する正しい答えを知っているのだろうか?
ありがとう!
memory - Cuda-選択的メモリストア
私のカーネルでは、条件が満たされた場合、出力バッファーの項目を更新します
そうしないと、出力が同じままになり、値が0になる可能性があります。
入力によっては、更新の密度はまったく予測できません。さらに、どの出力場所が更新されるかも不明です。(私はそれらを強制するかもしれませんが、場合によっては)
私の質問は、すべての項目を書き込むのが良いのか、合体を達成するのが良いのか、それとも選択的な書き込みを行うのが良いのかということです。
あなたの発言について話し合っていただけませんか。