問題タブ [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.
openmp - OpenMPのSchedule句
OpenMPを使用して最適化しようとしているコード(アプリケーションの一部)があり、さまざまなスケジューリングポリシーを試しています。私の場合、句が他のschedule(RUNTIME)
句よりも優れていることに気づきました(chunk_sizeを指定していません)。私は2つの質問があります:
チャンクサイズを指定しない場合、との間に違いは
schedule(DYNAMIC)
ありschedule(GUIDED)
ますか?OMP_SCHEDULE
OpenMPは、変数に格納されているデフォルトの実装固有のスケジューリングをどのように決定しますか?
スケジューリングスキームが指定されていない場合、デフォルトschedule(STATIC)
で使用されることを学びました。したがって、OMP_SCHEDULE
変数を変更せずschedule(RUNTIME)
、プログラムで使用する場合、スケジューリングスキームはschedule(STATIC)
常に使用されますか、それともOpenMPには、スケジュール戦略を動的に考案して随時変更するインテリジェントな方法がありますか?
fortran - 些細なプログラムの場合は-fopenmpを使用したsegfault
私はopenmpを少しリフレッシュしていて、この奇妙な状況に陥りました。束を削り取って、私は問題を示すこの最小限の些細なケースを作成しました
フラグが指定されていない場合、Mac(10.6)上のgfortran 4.3.4がコンパイルされ、プログラムは正しく実行されます。
ただし、-fopenmpを使用してopenmpを有効にすると、プログラムはセグメンテーション違反で終了します。すぐにクラッシュするため、コードは実行されないようです。ご覧のとおり、コードでopenmpを使用して何かを並列化することはありません。スタックサイズを変更しようとしましたが、両方ともulimit -fmax-stack-var-sizeを使用しましたが、いずれの場合も、1000万の実数は大きな配列を定義するものではありません。
私は何を間違っているのですか?
openmp - クラスメンバー変数と OpenMP
次のようなシナリオがあります。
この関数は、後で obj.abovefunction(x) などのオブジェクトによって呼び出されます。val1 と val2 は somemethod.h で宣言/初期化されているため、private (val1, val2) として使用することはできず、private (this->val1, this->val2) のようなものも使用できません。このような変数がクラスの一部であり、OpenMP プラグマが適用されているコード ブロックの直接のスコープで宣言されていない場合に、OpenMP を使用して並列化する最良の方法を教えてください。
OpenMP フォーラムで同じ質問をしました - http://openmp.org/forum/viewtopic.php?f=3&t=886#p3516
ありがとう、
サヤン
macos - Is there a way that OpenMP can operate on Qt spanwed threads?
I'm trying to parallelize a number-crunching part of an application to make use of a quad-core architecture using OpenMP and GCC 4.2 on Mac OS 10.5. But what I think the problem is that this application uses Qt for the GUI and I'm trying to fork the worker threads on a secondary thread created by Qt which causes the program to crash - but of this I'm not sure.
I'm seriously on the dark here since it's my first time working with either Qt or OpenMP, (or C++ for that matter). Any sort of guidance is greatly appreciated.
visual-c++ - Visual Studio の OMPTL?
Visual StudioでOMPTLを使用しようとしていました。私が理解している限りでは、OMPTL がいくつかの stl 関数のマルチスレッド実装を使用できるようにするには、/openmp オプションを設定するだけで済みます。
/openmp を使用しない場合、すべて問題なく、OMPTL はマルチスレッドなしで関数を通常の stl カウンター部分にマップします。ただし、/openmp を使用すると、次のコンパイラ エラーが発生します。
問題の行は言う
これを修正する方法はありますか、それとも OMPTL は単に Microsoft のコンパイラでは使用できませんか?
python - OpenMp を使用した ctypes とのリンク
期待どおりに動作する openmp を使用する c99 関数があります。また、問題の原因となる ctypes を使用して python インターフェイスを作成しました。Ctypes/python は openmp のライブラリを見つけることができません。エラーメッセージは次のとおりです。
そして、私はこれらのコマンドを使用します:
私はすでにグーグルで「解決策」をオンラインで見つけましたが、次の意味がわかりません。
コンストラクターの restype を ctypes.c_void_p に設定する必要があると思います。
そして、呼び出された
関数の argtypes に対応する型を ctypes.c_void_p に設定する必要があります。これにより、必要な変換
が行われますか?
これがこの状況にアプローチ する正しい方法であることを確認したいと思います。
解決策は何を意味するか、または別の方法を知っていますか?
[アップデート]
したがって、Iulian Şerbănoiu の助けを借りて、正しいコマンド ライン オプションを次に示します。
openmp - OpenMP - チャンクでスレッドを実行する
特定の方法で並列にしたい次のコードがあります。私は間違いを犯しているため、すべてのスレッドが思ったようにループを実行しているわけではありません。誰かがその間違いを特定するのを手伝ってくれたら素晴らしいでしょう。
ヒストグラムを計算するコードです。
iCount 変数は反復回数を追跡します。シリアル バージョンとパラレル バージョンの間に顕著な違いがあることに気付きました。すべてのスレッドが実行されているとは限らないため、並列プログラムから取得したヒストグラム値は、実際の読み取り値よりもはるかに小さくなっています (密な配列にヒストグラム値が格納されています)。
ありがとう、
サヤン
c++ - OpenMP、C++、イテレータ
コンテナーの要素をループするには、通常、次のように反復子を使用します。
ここで、OpenMP を使用してループを並列化したい場合は、次のようなことを試してみてください。
ただし、上記のコードを実行すると、コンテナーに変更が加えられません。ただし、コンテナーで一般的なインデックスを使用すると、並列コードは正常に機能します。私が疑問に思っているのは、OpenMP のコンテキストで反復子を使用できるかどうか、または反復ループをインデックス付きループに変換する必要があるかどうかです。
language-agnostic - OpenMPを使用した複数レベルの並列処理-可能ですか?頭いい?実用的?
私は現在、管理しているシミュレーションツール用に、C++のスパース行列/数学/反復ソルバーライブラリに取り組んでいます。既存のパッケージを使用したかったのですが、徹底的な調査の結果、シミュレーターに適したものは見つかりませんでした(flens、it ++、PetSC、eigenなどを調べました)。良いニュースは、私のソルバーとスパース行列構造が非常に効率的で堅牢になったことです。悪いニュースは、OpenMPを使用した並列化を検討していることです。学習曲線は、少し急です。
私たちが解決するドメインは、ブロック対角形式でまとめられたサブドメインに分割できます。したがって、私たちのストレージスキームは、それぞれがサブドメインに適した形式(たとえば、圧縮行ストレージ:CRS、圧縮対角ストレージ:CDS、高密度など)を持つ小さな正方行列(blocks [])の配列のように見えます。サブドメイン間の接続を説明するバックグラウンドマトリックス(現在CRSを使用)。
ほとんどの(すべて?)反復ソルバーの「ホットスポット」は、行列ベクトルの乗算演算です。これは、私のライブラリにも当てはまります。したがって、私はMxVルーチンの最適化に注力してきました。ブロック対角構造の場合、M * x=bの擬似コードは次のようになります。
ここで、background_matrixはバックグラウンド(CRS)行列、blocksはサブドメイン行列の配列、.rangeは開始インデックスから終了インデックスまでのベクトルの部分を返します。
操作はループの他の反復から独立しているため、明らかにループを並列化できます(そして並列化できます)(範囲は重複しません)。通常のシステムには10〜15個のブロックがあるため、4つ以上のスレッドが実際に大きな違いを生みます。
並列化が適切なオプションであると見なされているもう1つの場所は、各サブドメインストレージスキームのMxV操作です(上記のコードの1行目と6行目で呼び出します)。CRS、CDS、および密行列MxV操作の並列化についてはたくさんあります。通常、2つのスレッドで素晴らしいブーストが見られ、スレッドが追加されるにつれて収穫逓減が大幅に減少します。
上記のコードのブロックループで4つのスレッドが使用され、それらの各スレッドがサブドメインの解決に2つのスレッドを使用するスキームを想定しています。ただし、OpenMPを使用してスレッドのプールを管理する方法がわかりません。openmpforループのスレッド数を制限することは可能ですか?このマルチレベルの並列処理は、実際には意味のあることですか?私がここで提案したことについての他の考えはありがたいです(そして最後まで読んでくれてありがとう!)
fortran - OpenMP & MPI 解説
数分前、私はいくつかのテキストに出くわしました。それは、しばらく頭を悩ませていた何かを思い出させましたが、尋ねる場所がありませんでした.
したがって、これが人々が両方を実際に体験できる場所になることを願って、誰かが OpenMP と MPI の違いを説明できるかどうか疑問に思っていました。
私はウィキペディアの記事全体を読み、部分的に理解しましたが、まだ考え中です。いつの日か並列処理の世界に入りたい (OpenMP の基礎を学んでいる) Fortran プログラマーにとって、より将来性のある方法は何ですか?
私はあなたのすべてのコメントに感謝します