問題タブ [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.
multithreading - どの並列プログラミング API を使用していますか?
最近のマルチコアおよびマルチプロセッシング ハードウェアの非常に重要性を考慮して、人々が実際に並列コードをどのように書いているかを把握しようとしています。私には、支配的なパラダイムは pthreads (POSIX スレッド) のように見えます。これは Linux でネイティブで、Windows で利用できます。HPC の人々は OpenMP や MPI を使用する傾向がありますが、ここ StackOverflow にはあまりないようです。それとも、移植可能な標準ではなく、Java スレッド化、Windows スレッド化 API などに依存していますか? あなたの意見では、並列プログラミングを行うための推奨される方法は何ですか?
それとも、Erlang、CUDA、RapidMind、CodePlay、Oz、または親愛なる古い Occam などのよりエキゾチックなものを使用していますか?
明確化: Linux、さまざまな UNIX、さまざまなホスト アーキテクチャなどのプラットフォームに移植可能で適用可能なソリューションを探しています。Windows は、サポートしてよかった稀なケースです。したがって、C# と .net はここでは狭すぎます。CLR はクールなテクノロジですが、Linux ホスト用にリリースして、JVM、Python、Erlang、またはその他の移植可能な言語と同じくらい普及するようにしてください。
C++ または JVM ベース: JVM はパフォーマンスを隠す傾向があるため、おそらく C++ です。
MPI: HPC 関係者でさえ、これを使いにくいツールと見なしていることには同意しますが、128000 プロセッサで実行する場合、map/reduce が適用されない問題に対する唯一のスケーラブルなソリューションです。ただし、メッセージ パッシングは、ローカル メモリ/AMP、共有メモリ/SMP、分散ランタイム環境に適切に拡張できる唯一のプログラミング スタイルであるため、非常に洗練されています。
興味深い新しい候補はMCAPIです。しかし、それを実際に経験する時間があった人はまだいないと思います。
全体として、私が知らなかった多くの興味深い Microsoft プロジェクトがあり、Windows API または pthreads が実際に最も一般的な実装であるという状況のようです。
stack - OMP を使用したセグメンテーション違反
全て!イタリアからのタイピング この小さなコードは、行列のサイズが 800 未満の場合に機能し、サイズが大きくなるとセグメンテーション違反で失敗します.... Linux では gcc 4.3.2 コンパイラ、Windows では macosx および VisualStudio コンパイラで試しました。問題はスタックサイズにあるようです.....どうすればそれを増やすことができますか? より大きな行列サイズの問題を解決するにはどうすればよいですか? コードは、シリアル実行で正常に機能し、並列実行で失敗します。ありがとう。
openmp - OpenCL: OpenMP でうまく動作するか、他の言語を接続できますか、など
OpenCL の 1.0 仕様が数日前に公開されたばかりで (仕様はこちら)、私はそれを読み始めたところです。OpenMP ( spec ) などの他の高性能マルチプロセッシング API とうまく連携するかどうかを知りたいです。また、何を学ぶべきかを知りたいです。だから、ここに私の基本的な質問があります:
- すでに OpenMP を使用している場合、それによって OpenCL が壊れますか、またはその逆ですか?
- OpenCL は OpenMP よりも強力ですか? それとも、それらは補完的であることを意図していますか?
- OpenCL プログラムを標準の C99 プログラム (または他の言語) に接続する標準的な方法はありますか? それは何ですか?
- 誰かが OpenCL の本を書いているかどうか知っていますか? 仕様を読んでいますが、本の方が役立つことがわかりました。
import - OpenMP: foo() と bar() の違いは何ですか
Q1-foo() と bar() は同等ですか?
c++ - C++ 並列化ライブラリ: OpenMP とスレッド ビルディング ブロックの比較
マルチコア CPU を利用できるように、カスタム グラフィック エンジンを改造します。より正確には、ループを並列化するためのライブラリを探しています。
OpenMP と Intel の Thread Building Blocks の両方が、この仕事に非常に適しているように思えます。また、どちらも Visual Studio の C++ コンパイラと他のほとんどの一般的なコンパイラでサポートされています。また、どちらのライブラリも非常に使いやすいようです。
では、どちらを選択すればよいでしょうか。両方のライブラリを試した人はいますか?どちらかのライブラリを使用することの長所と短所を教えてください。また、最終的にどんな仕事に就きましたか?
ありがとう、
エイドリアン
multithreading - OpenMP 機能の欠落: スレッドの優先度
誰でも考えてみてください。ダンベルを処理するために CPU の筋肉を調整する OpenMP 機能。私のopenmpの研究では、強力な筋肉でブロックコードを実行するためにスレッドの優先度を設定することはできません。最も優先度の高いスレッドを作成する方法は 1 つだけです (_beginthreadex または 5. パラメータを指定した CreateThread 関数)。
この問題のコードは次のとおりです。
これは手動設定です。
ここに私が見たいのはこの部分です:
または
openmp で優先順位を設定する方法があったかどうかはわかりません。お知らせください。
warnings - OpenMp コーディング: 警告: #pragma omp parallel を無視します
Linux で OpenMP ディレクティブを使用して C コードをコンパイルしているときに、次の警告が表示されます。
Gcc のバージョンは 4.4 です。
それは私が気にするべきではない単なる警告ですか?実行は並列になりますか? 説明付きの解決策が欲しいです。
私はコマンドを提供-fopenmp
しましたmake
が、gcc はそれを受け入れません。それ以外の場合は、ファイルを 1 回コンパイルするだけgcc -fopenmp
です。
c++ - 「mpirun」は内部コマンドまたは外部コマンドとして認識されません。
小さな openMP プロジェクトを作成する必要があります。www.openmp.org から例を取り上げました。VC++ 2005 内で /openmp オプションを使用してコンパイルできます。ネットで検索したら。この mpirun と mpiexec が XP デスクトップにないことがわかりました。それらはサーバー配布のみです。Windows で openMP プログラムを実行/デバッグするにはどうすればよいですか?
それとも Linux に移行する必要がありますか?
c++ - 再帰関数でのOpenMP並列化
並列化を使用して、階層的に順序付けられたオブジェクトを使用して3Dシーンを描画するためのリフレッシュレートを改善しようとしています。シーン描画アルゴリズムは、最初にオブジェクトのツリーを再帰的にトラバースし、そこから、シーンを描画するために必要な重要なデータの順序付けられた配列を構築します。次に、その配列を複数回トラバースしてオブジェクト/オーバーレイなどを描画します。私が読んだことから、OpenGLはスレッドセーフなAPIではないため、配列トラバーサル/描画コードはメインスレッドで実行する必要があると思いますが、配列を満たす再帰関数を並列化できるかもしれないと思っています。重要な点は、シーン内でオブジェクトが発生する順序で配列にデータを入力する必要があるため、特定のオブジェクトを配列インデックスに関連付けるすべての機能を適切な順序で実行する必要があることです。ただし、配列インデックスが割り当てられると、ワーカースレッドを使用して、その配列要素のデータを入力できます(これは必ずしも簡単な操作ではありません)。これが私が取得しようとしている擬似コードです。xml風のスレッド構文を理解していただければ幸いです。
それで、OpenMPを使用してこれを行うことは可能ですか?もしそうなら、どのように?これをより適切に処理する他の並列化ライブラリはありますか?
補遺:ダビデのさらなる説明の要請に応えて、もう少し詳しく説明させてください。シーンが次のように順序付けられているとしましょう。
現在、これらの各オブジェクトには、場所、回転、サイズ、さまざまな描画パラメータなど、多くのデータが関連付けられています。さらに、適切に描画するには、このシーンを複数回パスする必要があります。1つのパスはオブジェクトの形状を描画し、別のパスはオブジェクトを説明するテキストを描画し、別のパスはオブジェクト間の接続/関連付けを描画します(存在する場合)。とにかく、これらの異なるオブジェクトからすべての描画データを取得するのは、複数回アクセスする必要がある場合はかなり遅いので、1つのパスを使用して、すべてのデータを1次元配列にキャッシュし、次にすべての実際のオブジェクトをキャッシュすることにしました。描画パスは、配列を見るだけです。問題は、OpenGLのプッシュ/ポップを正しい順序で実行する必要があるため、配列はツリー階層を表す適切な深さ優先探索順序である必要があるということです。上記の例では、
したがって、配列の順序は適切にシリアル化する必要がありますが、その順序を適切に割り当てると、配列の入力を並列化できます。たとえば、自転車フレームをインデックス0に割り当て、ハンドルバーをインデックス1に割り当てると、1つのスレッドが自転車フレームの配列要素の入力を取得し、別のスレッドがハンドルバーの配列要素の入力を取得できます。
OK、これを明確にすることで、私は自分の質問に答えたと思うので、Davideに感謝します。だから私は自分の答えを投稿しました。
visual-c++ - Visual Studio 2005 Standard の OpenMP
並列コードを書くために gcc で OpenMP を使用しました。現在、Visual C++ 2005 を使用しており、OpenMP の使用方法を理解しようとしています。Properties->C/C++/Language メニューにコンパイラ オプションがありますが、ライブラリが見つからないというメッセージが表示されます。OpenMP 用のサード パーティの実装はありますか、それとも Visual C++ の構成が間違っているだけですか?