nvidiaグラフィックカードのようなgpgpuカードの場合は、複雑なデータをパックする最良の方法です(スプリットまたはインターリーブ方式)かどうか?複素数(インターリーブとスプリット)の方法をパックする
0
A
答えて
1
と仮定すると、ハードウェアは、3メモリチャネルを有し、複素数は、FP32型で
インターリーブモード:
complex number: C0 C1 C2 C3 C4
bytes: 8 8 8 8 8
memory channel: 01201201 20120120 12012012 01201201 20120120
channel-0 usage: 13 times
channel-1 usage: 13 times
channel-2 usage: 13 times
スプリットモード:これ
real part: r0 r1 r2 r3 r4
bytes: 4 4 4 4 4
memory channel:0120 1201 2012 0120 1201
imaginary has same pattern
channel-0 usage: 2x7 = 14 times
channel-1 usage: 2x7 = 14 times
channel-2 usage: 2x6 = 12 times
、5つの複素数を読み取ります3つのメモリチャネルを使用するスプリットモードでは、チャネルアクセスの1つを準最適にします。
は今、私たちはいくつかのFFT演算を行うことのようだけでも(または奇数のみ)インデックス付き複素数を読んでいると仮定することができます
、インターリーブモード:
complex number: C0 x C2 x C4
bytes: 8 x 8 x 8
memory channel: 01201201 x 12012012 x 20120120
channel-0 usage: 8 times
channel-1 usage: 8 times
channel-2 usage: 8 times
スプリットモード:
real part: r0 x r2 x r4
bytes: 4 x 4 x 4
memory channel:0120 x 2012 x 1201
imaginary has same pattern
channel-0 usage: 2x4 = 8 times
channel-1 usage: 2x4 = 8 times
channel-2 usage: 2x4 = 8 times
だから、3チャンネルのハードウェアはあまり影響を受けません。我々は戻って、FFTの例になるまでそう、彼らは同じに見える
real part: r0 r1 r2 r3 r4
bytes: 4 4 4 4 4
memory channel:
imaginary has same pattern
channel-0 usage: 2x3 = 6 times
channel-1 usage: 2x3 = 6 times
channel-2 usage: 2x3 = 6 times
channel-3 usage: 2x3 = 6 times
channel-4 usage: 2x2 = 4 times
channel-5 usage: 2x2 = 4 times
channel-6 usage: 2x2 = 4 times
channel-7 usage: 2x2 = 4 times
half channels are used %50 more times than other half! %75 bandwidth
:
、インターリーブモード:
complex number: C0 C1 C2 C3 C4
bytes: 8 8 8 8 8
memory channel:
channel-0 usage: 1 times
channel-1 usage: 1 times
channel-2 usage: 1 times
channel-3 usage: 1 times
channel-4 usage: 1 times
channel-5 usage: 1 times
channel-6 usage: 1 times
channel-7 usage: 1 times
%100 bandwidth
スプリットモード
今度は、8チャネルメモリアクセスを見てみましょうアクセスが奇数であるか、アクセスのみの場合:
インターリーブモード:
complex number: C0 C1 C2 C3 C4
bytes: 8 x 8 x 8
memory channel:x x
channel-0 usage: 3 times
channel-1 usage: 3 times
channel-2 usage: 3 times
channel-3 usage: 3 times
channel-4 usage: 3 times
channel-5 usage: 3 times
channel-6 usage: 3 times
channel-7 usage: 3 times
%100 bandwidth
インターリーブモードはまだ効率的です。
スプリットモード:
real part: r0 r1 r2 r3 r4
bytes: 4 x 4 x 4
memory channel:x x
imaginary has same pattern
channel-0 usage: 2x5 = 10 times
channel-1 usage: 2x5 = 10 times
channel-2 usage: 2x5 = 10 times
channel-3 usage: 2x5 = 10 times
channel 4-7 not used! %50 bandiwdth
非連続スプリットモードを使用して、アイテムの一部のみにアクセスするときにいくつかの場面でスプリットモードは、50%ほど遅いことができます。
偶数アクセスと完全アクセスのベンチマークで、どのタイプを使用するかを知る必要があります。
関連する問題
- 1. 複数のActiveRecord関連付けクエリをインターリーブする方法は?
- 2. スプリット複数の値
- 3. スプリット複数のアレイ
- 4. 複数のバンドルウェブホットリロードをパック
- 5. スプリットリストの要素とスプリット
- 6. Prologの要素のインターリーブ
- 7. numpy.ndarraysをインターリーブする方法は?
- 8. 複数の行(各セル内)とのスプリット複数のセルは
- 9. 複数のキー値の範囲で親のパフォーマンスをインターリーブする
- 10. スプリット行複数列に
- 11. 固定数のテンプレート引数を持つクラス内の複数のパック拡張パック
- 12. stderrとstdinをstd :: process ::コマンドにインターリーブする方法は?
- 13. パブリッシュ用のエッジブラウザエクステンションをパックする方法
- 14. SaaSデータベース設計 - 複数のデータベース?スプリット?
- 15. PySpark:スプリットDATAFRAME複数のデータフレームにループ
- 16. スプリット複数の辞書に辞書
- 17. socket.send()のHTTP GETリクエストに変数をパックする方法 - Python 2.7
- 18. CAEmitterLayer複数のセルがインターリーブされています
- 19. iphoneアプリをdebにパックする方法
- 20. スプリット複数のデータは、ここでは複数行に
- 21. 効率的に8 __int16の数字からビットをインターリーブする方法は?
- 22. Libのpython .pyとmain .exeのpython27.dllをパックする方法
- 23. javascriptでパック配列関数を解決する方法
- 24. スプリットとストリップを使用する最良の方法
- 25. イテレータをインターリーブする
- 26. Pythonで2つのリストをインターリーブする方法は?
- 27. dotnet packで複数のアセンブリをパックする
- 28. 虚数/複素数のpythonを避ける方法
- 29. 複数の同一要素のIDを設定する方法
- 30. 配列要素の複数のインデックスを取得する方法
これにアクセスできるように – Jovasa