問題タブ [openmp]

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 投票する
2 に答える
4046 参照

fortran - FortranのOpenMP

私はめったにFortranを使用しませんが、並行して実行するためにレガシーコードを書き直すという任務を負っています。コンパイラーの選択にgfortranを使用しています。https://computing.llnl.gov/tutorials/openMP/でいくつかの優れたリソースと、他のいくつかのリソースを見つけました。

私の問題は、OpenMPディレクティブを追加する前に、レガシープログラムをコンパイルするだけの場合です。

gfortran Example1.F90 -o Example1

すべてが機能しますが、ディレクティブを追加しなくてもopenmpコンパイラオプションをオンにします。

gfortran -openmp Example1.F90 -o Example1

レガシープログラムを実行すると、セグメンテーション違反が発生します。私が書いた小さなテストプログラムを使用して、複数のスレッドで実行される-openmpを使用して他のプログラムを正常にコンパイルしましたが、オプションを単独で有効にし、ディレクティブを使用しないとセグメンテーション違反が発生する理由がわかりません。

私の質問がかなり単純なものである場合は、お詫び申し上げます。コードを投稿することはできますが、かなり長いです。初期値を割り当てると障害が発生します。

「uconsold」への最初の割り当ては正常に機能します。2番目の割り当ては障害の原因のようです。次の数行をコメントアウトすると、「uconsolde」が再び使用されるまで陽気に実行されます。

この件に関してご協力いただきありがとうございます。

0 投票する
5 に答える
7373 参照

multicore - マルチコア プログラミング。Boost の MPI、OpenMP、TBB、またはその他の何か?

私はマルチコア プログラミングの初心者ですが、C++ のプログラミング方法は知っています。

現在、マルチコア プログラミング ライブラリを探しています。楽しみのためだけに試してみたいと思います。現在、3 つの API を見つけましたが、どの API を使用すればよいかわかりません。現在、Boost の MPI、OpenMP、および TBB が表示されます。

これら 3 つの API (またはその他の API) のいずれかを使用したことがある方は、これらの違いを教えてください。AMD や Intel のアーキテクチャなど、考慮すべき要素はありますか?

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

xcode - Snow Leopard用のOpenMP用のリンカーライブラリ?

現在、SnowLeopardのXCode3.2.2でOpenMPを試しています。

リンクライブラリはまだ含まれていなかったので、リンカは次のように文句を言います。

"_omp_get_thread_num"、参照元:_main in main.o
"_omp_get_num_threads"、参照元:_main in main.o

OK、問題ありません。既存のフレームワークを調べて、openmpやompなどのキーワードを探します...ここで問題が発生します。リンクライブラリはどこにありますか?または、openMPのリンクライブラリの名前は何ですか?それはdylib、フレームワーク、または何ですか?それとも、最初にどこかから入手する必要がありますか?

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

synchronization - for プラグマ内の同期構造

次のようなプログラムブロックがあります。

内側と外側のループを並列化し、iCount を重要な領域に配置しようとしました。これを並列化するための最良のアプローチは何でしょうか? iCount を omp single または omp atomic でラップすると、コードでエラーが発生し、omp for 内では無効であることがわかりました。これを並列化するために、多くの無関係なものを追加していると思います。アドバイスが必要...

ありがとう、

サヤン

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

c++ - OpenMP num_threads(1) は、OpenMP なしよりも高速に実行されます

さまざまな状況でコードを実行した結果、奇妙な動作と思われる結果が生じました。私のテストは、HT を搭載したデュアル コア Intel Xeon プロセッサで行われました。

OpenMP '#pragma' ステートメントなし、合計実行時間 = 507 秒

OpenMP の「#pragma」ステートメントで 1 コアを指定すると、合計実行時間 = 117 秒

OpenMP の「#pragma」ステートメントで 2 コアを指定すると、合計実行時間 = 150 秒

OpenMP の「#pragma」ステートメントで 3 コアを指定すると、合計実行時間 = 157 秒

OpenMP の「#pragma」ステートメントで 4 コアを指定すると、合計実行時間 = 144 秒

私のopenmp行をコメントアウトすると、openmpを使用しない1つのスレッドとopenmpを使用する1つのスレッドの間でプログラムの速度が大幅に低下する理由がわかりません。

私が変更しているのは次のとおりです。

とにかく、なぜこれが起こっているのか、誰かが知っているなら、私に知らせてください!

助けてくれてありがとう、

ブレット

編集:ここでいくつかのコメントに対処します

num_threads(1)、num_threads(2) などを使用しています。

さらに調査すると、コードに「スケジュール (ガイド付き)」行が含まれているかどうかに基づいて、結果に一貫性がないことがわかりました。

-スケジュール (ガイド付き) ラインを使用している場合、スレッドの数に関係なく、最速のソリューションを生成します。- デフォルトのスケジューラーを使用している場合、結果が大幅に遅くなり、値が異なります - スケジュール (ガイド付き) を使用すると、スレッドを増やしても改善が得られません - スケジュール (ガイド付き) を使用しない場合、スレッドを追加すると改善が得られます

スケジュール(ガイド付き)が何をするのかについての十分な説明が見つからなかったと思いますが、最も時間のかかる反復が最初に発生するようにループを分割しようとすることを理解しています。 1 つのスレッドが他のスレッドが反復を完了するまで待機する時間。

私の ~ 900 反復ループでは、スケジュール (ガイド付き) を使用すると、~ 200 回の反復のみを処理しているように見えますが、スケジュール (ガイド付き) を使用しない場合は、900 回すべての反復を処理しています。何かご意見は?

0 投票する
2 に答える
3513 参照

c++ - ブースト RNG のスレッドセーフ

openmp プラグマを 1 つ挿入することで適切に並列化する必要があるループがあります。

(私がエラーを起こさない限り、各実行は他の実行にまったく依存しません。申し訳ありませんが、すべてのコードが挿入されているわけではありません)。

しかし、私の質問は - ブースト RNG スレッドセーフですか? gcc の gcc コードを参照しているように見えるため、gcc コードがスレッドセーフであっても、他のプラットフォームには当てはまらない場合があります。

0 投票する
2 に答える
234 参照

multithreading - 複数のスレッド間の共有リストは競合状態ですか?

通常は問題なく動作するマルチスレッド コードがありますが、頻繁に壊れます。私は問題を特定しようとしていますが、OpenMP を使用するとそれが難しくなります (問題はシリアルでは発生しません)。変数への複数アクセス (競合状態) がしばしばプログラムをクラッシュさせることを知っています。

複数のスレッド間で共有されているリストがあり、そのリストの push_back() が競合状態の候補であるかどうかに興味があります。そのため、時々プログラムがクラッシュしますか? もしそうなら、これを処理する方法に関する推奨事項はありますか?
- 速度が最も重要です
- を使用すると競合状態が解決されることはわかってい#pragma omp criticalますが、アプリケーションの速度が低下する可能性があります (リストが 2 つあるため、アトミックではなくクリティカルが必要です)。

これについてよくわからない唯一の理由は、stl コンテナーを使用していくつかのテストを実行したが、テスト コードがクラッシュしなかったためです。

どんな提案でも大歓迎です!
前もって感謝します、

0 投票する
2 に答える
1526 参照

c - 順次実行される openmp セクション

次のコードがあります。

Zoom プロファイラーによると、2 つのスレッドが作成され、1 つのスレッドが両方のセクションを実行し、もう 1 つのスレッドは単純にブロックします。

誰かが以前にこのようなことに遭遇したことがありますか? (そして、はい、私はデュアル コア マシンを持っています)。

0 投票する
4 に答える
1088 参照

c++ - C/C++ のデータ並列ライブラリ

データの並列性が高い C# プロトタイプがあり、.NETv4 で Parallel.For コンストラクトを使用して桁違いの高速化に非常に成功しています。今度はネイティブ コードでプログラムを作成する必要があります。さまざまなオペレーティング システムやコンパイラ間である程度移植性のあるものを好みますが、プッシュが押し寄せる場合は、Windows/VC++ を使用できます。

私は OpenMP を調べましたが、これは面白そうですが、これが他のプログラマーによって優れたソリューションと見なされているかどうかはわかりません。私が見ることができる他の移植可能なライブラリの提案も大好きです。

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

fortran - 入れ子になった並列 (OpenMP) Fortran ループから慣用的に抜け出す方法は?

シーケンシャル コードは次のとおりです。

次以外に、外側のループの反復を同時に実行するためのよりクリーンな方法はありますか?

-loopでの反復の順序は、いくつかiが見つかる限り、任意である可能性があります ( を満たす限り、実行ごとに変更されても問題ありません)。 result"some_condition"