問題タブ [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.
parallel-processing - ひどいパフォーマンス - 単純なオーバーヘッドの問題ですか、それともプログラムの欠陥ですか?
ここには、比較的単純な OpenMP コンストラクトであると私が理解しているものがあります。問題は、2 つのスレッドと比較して、1 つのスレッドでプログラムが約 100 ~ 300 倍高速に実行されることです。プログラムの 87% が で費やされgomp_send_wait()
、さらに 9.5% が で費やされgomp_send_post
ます。
プログラムは正しい結果を返しますが、リソースの競合を引き起こしているコードに欠陥があるのか 、それともチャンクサイズ4のループではスレッド作成のオーバーヘッドが大幅に価値がないだけなのか疑問に思います p
。シミュレートしている分子のサイズに応じて、17 から 1000 までです。
私の数値は、p が 17 でチャンク サイズが 4 の場合の最悪の場合のものです。パフォーマンスは、静的、動的、またはガイド付きスケジューリングのいずれを使用しても同じです。p=150
と チャンク サイズを使用75
しても、プログラムはシリアルよりも 75 倍から 100 倍遅くなります。
c++ - OpenMP を使用したブロッキング関数
2 番目のスレッドからネットワーク ポートをリッスンする GUI アプリケーションがあります。私は OpenMP を見ていましたが、このようなスレッドを作成する簡単な方法があるかどうか疑問に思っていました。ドキュメントを探していましたが、OpenMP サイトはナビゲートするのにあまり便利ではありません。誰か助けてくれませんか?
multithreading - 並列化:pthreadまたはOpenMP?
科学計算のほとんどの人は、共有メモリの並列化に関して、準標準としてOpenMPを使用しています。
pthread上でOpenMPを使用する理由(読みやすさ以外)はありますか?後者はより基本的なようであり、最適化する方が速くて簡単かもしれないと思います。
openmp - 並列プログラムをクラスター プログラムに変換します。OpenMP から?
OpenMP ベースの並列プログラムを使用してクラスター上で実行するコード コンバーターを作成したいと考えています。
この問題についてどうすればよいですか?どのライブラリを使用しますか? このために小さなクラスターをセットアップするにはどうすればよいですか?
インターネット上でクラスター コンピューティングに関する優れた資料を見つけるのは非常に難しいと感じています。
編集: それが不可能な場合、インテルはどのようにそれを行うのですか? Intel コンパイラは、私がやりたいことを正確に実行しているようです。実行したい特定のアプリケーションはありません。アプリケーションではなく、「コンバーター/コンパイラー」を書きたい。共有メモリは分散メモリとは異なることは理解していますが、アプリケーションがカスタム構成で記述されていることを意味する場合でも、すべての場合ではないにしても、特定の場合にメモリを同期する方法が必要です。
c++ - 最小、最大、中央値、平均のOpenMpC++アルゴリズム
いくつかの単純なOpenMpアルゴリズムを提供するページをGoogleで検索していました。おそらく、巨大なデータ配列から最小、最大、中央値、平均を計算する例がありますが、私はそれを見つけることができません。
少なくとも、私は通常、配列をコアごとに1つのチャンクに分割し、後で境界計算を実行して、完全な配列の結果を取得しようとします。
車輪の再発明をしたくなかっただけです。
追記:単純な削減で機能する例が何千もあることを私は知っています。例:PIの計算。
しかし、これらの種類のアルゴリズムが使用できない場合、アルゴリズムを削減するための例はほとんど残っていません。
c - 計算負荷の高いタスクの実行中にデータをディスクに効率的に保存する方法
私は非常にCPUを集中的に使用する(そのprocバウンド)科学的ソフトウェアに取り組んでいますが、データをかなり頻繁にディスクに書き込む必要があります(i/oバウンド)。
私はこれ (OpenMP) に並列化を追加していますが、ディスクへの書き込みのニーズに対処する最善の方法を考えています。シミュレーションが HDD で待機する必要がある理由はありません (これが現在行われていることです)。
このための「ベスト プラクティス」を探しています。速度が最も重要です (これらは非常に長いシミュレーションになる可能性があります)。
ありがとう〜アレックス
最初の考え:
別のプロセスがディスクへの実際の書き込みを行うため、シミュレーションには 2 つのプロセスがあります。1 つは CPU バウンド (シミュレーション) で、もう 1 つは IO バウンド (ファイルの書き込み) です。これは複雑に聞こえます。
おそらくパイプ/バッファ?私はこれらに慣れていないので、おそらくそれが可能な解決策になるでしょう。
c++ - 複数の実行可能ファイルを 1 つのアプリケーションにモーフィングする
多くのソース コードとデータを共有する 3 つのレガシー アプリケーションがあります。これらの各アプリケーションの複数のインスタンスは、ユーザーによっていつでも実行できます。たとえば、一度に多数の混合アプリケーションを実行できます。これらのアプリケーションは現在、共通のカーソル位置などを維持できるように、共有メモリとメッセージング技術を介して通信します。アプリケーションは主に C++ で記述され、Qt を使用し、合計で約 500 万行のコードを実行します。既存のコードの一部のみがスレッドセーフです。
これら 3 つの実行可能ファイルを 1 つの実行可能ファイルに統合し、マルチスレッド機能を使用して、3 つの機能ブランチのそれぞれの複数のインスタンスを同時に実行できるようにしたいと考えています。共有ポインターなど、Boost が提供する機能のいくつかを調査し、OpenMP を使用して複数のスレッドの全体的な実行を調整することを提案されました。
進め方に関するコメント、特にこの種のリファクタリングの問題に取り組むための最良の方法に関する参考文献を歓迎します。
c++ - OpenMP がないマシンでは無視する
OpenMP を使用する C++ プログラムがあります。これは、OpenMP がインストールされているかどうかに関係なく、複数のマシンで実行されます。
#include <omp.h>
マシンに OpenMP がなく、それらの OpenMP ディレクティブ ( など#pragma omp parallel ...
) やライブラリ関数 ( など)を無視するかどうかをプログラムに知らせるにはどうすればよいtid = omp_get_thread_num();
ですか?
c++ - OpenMPが私のC++プログラムで機能するかどうかを見分ける方法
OpenMPを使用して、ネストされたループでマルチスレッドを実行しています。このようなものは初めてなので、実際に並列プログラミングを実行できるように、OpenMPを正しい方法で使用しているかどうかはわかりません。それで、OpenMPを使用するC ++プログラムのパフォーマンスを測定できるかどうかを知りたいので、実際に機能し、正しい方向に進んでいることがわかりますか?並行して実行されているスレッドの数や、各スレッドが終了するのにかかる時間など。ありがとう、よろしく!
linux - Linux で OpenMP のバージョンを確認する方法
Linux リモート マシンで OpenMP のバージョンを確認する方法を教えてください。
設置場所もわかりません。