問題タブ [reduction]

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.

0 投票する
1 に答える
865 参照

python - CUDA と Python の ODEInt および Parallel Reduction を組み合わせる

私は生物物理学の大学院生で、PyCUDA と Scipy を使用してタンパク質凝集モデルをプログラムしようとしていODEIntます。過去 2 週間以内に、コードを実行できるようになりましたが、非常に遅いです。私のコードが何をするのか説明できるかどうか見てみましょう。

各要素が長さのポリマーの濃度である濃度のnp配列があります。各カーネルが特定の長さのポリマーの変化率を計算する場所を使用して、ポリマー濃度の変化率を計算する関数があります。この計算中に、長さの配列をスレッドで合計する必要があるため、コードが大幅に遅くなります。Ni+1CUDA(N-i-1)

少し読んでグーグルで調べてみると、並列処理を呼び出して配列の合計などのシリアル計算をはるかに高速化する方法として、並列削減に出くわしました。もちろん、私はマーク・ハリスのパワーポイントのスライドを参照しています. これらは素晴らしい読み物であり、これは私のコードを劇的に高速化する潜在的な方法のように見えますが、いくつか質問があります:

ポリマー種の数 N が ~ 8700 ~ 9000 である必要がある場合、CUDA を使用してこれらの N 配列を同時に削減することは考えられますか? 簡単な計算を行うと (同時スレッドの最大数を計算する方法に関する SO の優れた説明のおかげで可能になりました)、GTX Titan で一度に 15 * 64 * 32 = 30720 のスレッドを実行できることがわかりました。一度に最大 8960 個のカーネルでカーネルを呼び出すと、使用できるスレッドは 21760 個しか残っていないはずですよね? それを適切に削減するには、少なくとも (配列の長さ/2) スレッドが必要なように思われるので、私は絶望的です。

残りのスレッドを分割して、一度にいくつかの大きな配列をシリアルに削減することで、残りのスレッドを使用できるのではないかと考えていました。

わかりません...私はただの物理学の大学院生です。間違った方向への長い旅に出る前に、専門家に聞いてみようと思いました. カーネルに何かを減らすように簡単かつ効率的に伝えることは可能ですか?

ありがとう、カルステン

これが私がやろうとしていることの表現です。

これまで説明してきた配列の合計は、基本的に各スレッドの同じ配列のより小さいバージョンであることに気付くでしょう。これは、これがホスト上で行うべきことなのかどうか疑問に思います。

0 投票する
1 に答える
69 参照

bison - バイソンの削減は期待どおりに機能しませんでした

私は EPL パーサーを作成しようとしているので、flex と bison を学んでいます。次のルール (SQL) で使用してみます。

バイソンのルールは次のとおりです。

すべてのトークンと非終端記号の型は「char*」です

stdin からの入力は "select $abc from $ddd" であるため、レクサーが "identifier_expr" アクションでトークン FROM を返すと、出力は "ident_expr:abc from" になります。

0 投票する
3 に答える
117 参照

c - 構造体をループして関数を減らしたい

みんなおはよう、

非常に反復的な関数を削減しようとしていますが、各「反復」には、struct A.element1 が struct B.element1 を設定する 2 つの構造体があります。現時点では、B を A に設定するための約 12 の異なる reqFunction() 呼び出しを持つ myFunction() があります。

reqGetFunction() は変更できません。GLOBAL_IN をループする他の関数用の静的グローバル配列があり、structA A を静的グローバルにすることができます。

1 つのブロックを実行する myFunctionSingle() のようなものと、GLOBAL_IN 配列と構造体の A および B の要素を循環して myFunctionSingle() に入力する for ループを持つ myFunctionAll() が必要です。

したがって、私の本当の質問は、構造体のセットアップやreqGetFunctionなどのすべてが石に設定されているため、配列でできるように構造体の要素をどのように循環させることができるかということです。私はいくつかのことを試して検索しましたが、現在困惑しています。正直なところ、これが可能かどうか、またはそれだけの価値があるかどうかはわかりません。ご意見をお寄せいただきありがとうございます。

0 投票する
1 に答える
86 参照

c - ループエラーのOpenMP削減?

これはコードの一部をテストしています:

何らかの理由で、私の結果は常に次のとおりです。

a、b、c、d がすべて 100 に等しくないのはなぜですか?

0 投票する
1 に答える
2242 参照

arrays - CUDA 配列削減

この質問に似た質問が複数あることは承知していますが、何かを間違ってインデックス付けしている可能性があることを除けば、それらから非常に役立つものをまとめることができませんでした。

入力ベクトル A のシーケンシャル アドレッシング リダクションを出力ベクトル B に実行しようとしています。

完全なコードはhttp://pastebin.com/7UGadgjXで入手できますが、これはカーネルです。

これらはカーネル起動ステートメントです。

私が読んだ特定されていない起動エラーは、セグメンテーション違反に似ています。私は nvidia リダクションのドキュメントを綿密にたどり、カーネルを numElements の範囲内に収めようとしましたが、コードがいかに単純であるかを考えると、何か重要なものが欠けているようです。

0 投票する
3 に答える
3773 参照

algorithm - 最小コスト フローから最大フロー

最小コスト フローの問題から最大フローの問題への削減はありますか? それともその逆?最小コスト フロー アルゴリズムを使用して、最大フローの問題を解決したいと考えています。

0 投票する
1 に答える
654 参照

parallel-processing - CUDA 削減: アトミック操作はパフォーマンスに影響しない?

パフォーマンスへの影響を測定するために、最適化された配列削減カーネルにアトミック加算操作を挿入する効果をテストしています。結果を理解できていません。5 つの異なるカーネルをテストしました。

要素の十分に大きなサンプルで使用しているデバイスの平均削減時間:

アトミック操作がカーネルにまったく影響を与えないように見える、2または3カーネルにわずかな影響を与えるように見えるのはなぜ4ですか?

これが完全なコードです。関連するカーネルは次のとおりです。

0 投票する
1 に答える
6491 参照

c++ - float ベクトルの SSE リダクション

sse 組み込み関数を使用して float ベクトルの合計要素 (リダクション) を取得するにはどうすればよいですか?

シンプルなシリアルコード: