問題タブ [prefix-sum]
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 - GPUGems3の並列プレフィックスアルゴリズムで使用されるCONFLICT_FREE_OFFSETマクロ
まず、アルゴリズムへのリンクは次のとおりです。
GPU Gems 3、第39章:CUDAを使用した並列プレフィックス合計(スキャン)。
バンクの競合を回避するために、NUM_BANKS(つまり、計算可能性2.xのデバイスの場合は32)要素ごとに共有メモリ配列にパディングが追加されます。これは(図39-5のように)によって行われます。
ai/NUM_BANKSがマクロとどのように同等であるかわかりません。
等しいではありませんか
どんな助けでも大歓迎です。ありがとう
algorithm - プレフィックス合計を計算するための並列アルゴリズム
プレフィックスの合計を並列に計算するためのアルゴリズムの実装に問題があります。このアルゴリズムには3つのステップがありますが、擬似コードが指定されていないため、コードを記述できません。
Webやスタックオーバーフローについてさまざまな資料を調べましたが、 wikiに記載されているアルゴリズムの正確な実装を取得できませんでした。ウィキには次のことが記載されています。
プレフィックスの合計は、次の手順で並行して計算できます。
- ペアの最初のアイテムが偶数のインデックスを持つアイテムの連続するペアの合計を計算します:z0 = x0 + x1、z1 =x2+x3など。
- シーケンスz0、z1、z2、..のプレフィックス合計w0、w1、w2、...を再帰的に計算します。
- シーケンスw0、w1、w2、...の各項を全体的なプレフィックス合計の2つの項に展開します:y0 = x0、y1 = w0、y2 = w0 + x2、y3 = w1など。最初の値の後、それぞれ連続番号yiは、wシーケンスの半分の位置からコピーされるか、xシーケンスの1つの値に前の値が追加されます。
誰かが私がチェックして実装するための擬似コードの実装を提案できますか?
c++ - IntelCPUのSIMDプレフィックス合計
プレフィックス合計アルゴリズムを実装する必要があり、可能な限り高速である必要があります。
元:
与える必要があります:
SSE SIMD CPU命令を使用してこれを行う方法はありますか?
私の最初のアイデアは、すべての合計が以下のように計算されるまで、各ペアを再帰的に並列に合計することです。
アルゴリズムをもう少し明確にするために、z
は最終出力ではなく、出力の計算に使用されます。
cuda - CUDA:atomicAddは時間がかかりすぎ、スレッドをシリアル化する
私はいくつかの比較を行い、2つのオブジェクトが衝突するかどうかを決定するカーネルを持っています。衝突するオブジェクトのIDを出力バッファに保存したい。出力バッファにギャップを持たせたくありません。各衝突を出力バッファの一意のインデックスに記録したいと思います。
そこで、共有メモリ(ローカル合計)とグローバルメモリ(グローバル合計)にアトミック変数を作成しました。以下のコードは、衝突が見つかったときの共有変数の増分を示しています。今のところ、グローバルメモリでアトミック変数をインクリメントすることに問題はありません。
私の問題は、多くのスレッドがアトミック変数をインクリメントしようとすると、シリアル化されることです。prefix-sumのようなものを書く前に、これを効率的に行う方法があるかどうかを尋ねたかったのです。
この1行があるため、カーネルの経過時間は13ミリ秒から44ミリ秒に増加します。
プレフィックスサムのサンプルコードを見つけましたが、NVIDIAのディスカッションボードがダウンしているため、参照されているリンクが失敗します。 https://stackoverflow.com/a/3836944/596547
編集:上記にコードの最後も追加しました。実際、私には階層があります。すべてのコード行の影響を確認するために、すべてのオブジェクトが互いに衝突するシーン、極端な場合、およびオブジェクトがほとんど衝突しない別の極端な場合を設定します。
最後に、共有アトミック変数をグローバル変数(gColCnt)に追加して、衝突の数を外部に通知し、正しいインデックス値を見つけます。ここでは何らかの方法でatomicAddを使用する必要があると思います。
copy - PyOpenCL、配列フィルター: copy_if と独自のアトミック ベースの実装の比較
私はランダムな整数の配列を持っています。たとえば[132, 2, 31, 49, 15, 6, 70, 18 ... , 99, 1001]
。たとえば、100 を超えるすべての数値の配列を生成し、その配列のサイズを取得したいと考えています。
次の 2 つの方法があります。
- PyOpenCL の新機能
copy_if
。これは、 Prefix SumsGenericScanKernel
をさらに深く掘り下げた場合に基づいてい ます。 - Atomicsを使用した純粋な OpenCL ソリューション
copy_if
常に正しく動作しますか? 私が見ることができるようにcopy_if
、原子を使用していません。を使用してトラブルに直面することは可能copy_if
ですか?
copy_if
アトミックな方法と比較してのパフォーマンスはどうですか?
あなたは何を選びますか、そしてその理由は何ですか?
c - アセンブリ言語のプレフィックス合計の問題
そのため、一連の数値に対して接頭辞の合計を実行するアセンブリ コードを作成する任務を負っています。
与えられた例は2 4 6 -1
であり、戻り値は である必要があります12 10 6
。-1
ストッパーとして機能します。
したがって、基本的に私のコードは印刷6 10 12
され、この出力を逆にする方法を見つける必要があります。何か案は?
opencl - Sum にはグローバル メモリを、エラーにはローカル メモリをプレフィックスとして付けます。
ローカル メモリをまったくサポートしない Mali GPU を使用しています。ローカル メモリで構成されるコードを実行するたびに、デバイスからいくつかのエラーが発生します。そのため、コードをグローバル メモリのみを使用するバージョンに転送したいと考えています。GPU のみでグローバル メモリを使用してプレフィックス サム/パラレル リダクション アルゴリズムを実行できるかどうかを考えていました。
EDITED
: エラーをデバッグしていて、ある特定の行でエラーが発生しているという奇妙なことがわかりました。次のような行があります。
ふたはローカルIDで、サイズ32のqorkグループを使用しました。強調表示された行がエラーの原因であることがわかりました。lm_sum
固定値を使用してみましたが、ステートメントの右側には使用できないことがわかりました。もしそうなら、それは私にエラーを与えます。たとえば、次の行でもエラーが発生します。
int temp= lm_sum[0][0]
何が起こっているかについて何か考えはありますか?
エラー: