問題タブ [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 - 並列だが遅い
私はモンテカルロ法を使用して pi を計算し、並列プログラミングと openmp の基本的な経験をしています。
問題は、1 スレッド、x 反復を使用すると、常に n スレッド、x 反復よりも高速に実行されることです。誰でも理由を教えてもらえますか?
たとえば、コードは「a.out 1 1000000」のように実行されます。ここで、1 はスレッド、1000000 は反復です。
openmp - openmp を使用したコードの並列化
以下の関数には、ネストされた for ループが含まれています。それらの3があります。簡単に理解できるように、以下に関数全体を示します。最大の CPU 時間がかかるため、最も内側の for ループでコードを並列化したい。次に、外側の 2 for ループについて考えることができます。最も内側の for loop に依存関係と内部インライン関数が表示されます。最も内側の for ループを書き直して、openmp プラグマを使用して並列化を有効にできますか。方法を教えてください。最初に興味のあるループだけを書いてから、このループが参照用に存在する完全な関数を書いています。
下記のループの並列化に興味があります。
このループが存在する完全な機能は、参考のために以下に示します。/*!
最も内側の for ループ、つまり for(y=0;y<4;y++) と多くの LineSadBlk の依存関係を解決するようにコードを書き直しました。違っていたらコメントください。refptr と orgptr はこれで整理され、依存関係は解決されると思いますが、LineSadBlk0,1,2,3 には、1 回目と 2 回目の反復を並行して実行するかのように、まだ依存関係があります。LineSadBlk0,1,2,3 の値はスレッドによって取得されます。これを解決する方法をお願いします。
openmp - OPENMP セクションを使用してこれを並列化する方法
openmpセクションを使用して並列化したいこの関数があります。関数をさまざまなセクションに分割し、#pragma omp セクションを適用しましたが、セグメンテーション エラーが発生します。誰か理由と解決策を教えてください。セクションでいくつかの句を使用する必要がありますか。どちらで、どのようにお願いします。
c++ - AMDマルチコアプログラミング
追加のコアを利用して、多くの計算を実行する必要があり、計算が互いに独立しているコードの部分を実行するアプリケーション(C ++)の作成を開始したいと思います。私は次のプロセッサを使用しています:x64ファミリ15モデル104ステッピング2 Authentic AMD〜1900 Mhzは、Windows Vista HomePremium32ビットおよびOpenSUSE11.064ビットで実行されています。
Intelプラットフォームでは、次のAPI Intel TBB、OpenMPを使用しました。それらはAMDで動作し、AMDには同様のAPIがありますか?あなたの経験は何ですか?
visual-studio - VS2008 Pro OpenMP プロジェクトの VCOMP90.DLL への依存
OpenMP を使用する VS 2008 Pro に DLL プロジェクトがあります。/MT を「コード生成」オプションとして使用します。これは、多くのライブラリをクライアントに配布したくないため、すべての依存関係を DLL に静的にリンクする必要があるためです。すべてがこの 1 つの DLL ファイルに含まれます。問題は、作成した DLL がまだ VCOMP90.DLL に依存していることです。
この依存関係を取り除くにはどうすればよいですか?
いくつかの情報:
- /openmp はコンパイラ オプションで設定されます
- vcomp.lib に対して静的にリンクします
インクルードが設定されています
- マルチスレッド ライブラリ (/MT) を使用する
助けてくれてどうもありがとう!
c++ - OpenMP: ヒープ破損の原因は?
編集:同じプログラムを問題なく同時に 2 回実行できます。これを OpenMP または他の方法で複製するにはどうすればよいですか?
これが問題の基本的な枠組みです。
を介して一部のメモリの割り当てを解除しようとするとMemDeallocFunctionInDLL()
、_CrtIsValidHeapPointer()
アサーションが失敗することを確認しました。
これは、両方のスレッドが同じメモリに書き込んでいるためですか?
これを修正するために、私はプライベートにしようと思いましたSomeClass
(これは私にとってまったく異質なので、助けていただければ幸いです)。
そして、最初にメモリを割り当てようとすると失敗します。Data
注:必要に応じて DLL を変更できます
注:なしで完全に実行されます#pragma omp parallel for
編集:Bar
次のようになります:
まだ運がありません。
openmp - OpenMPで途中全スレッド同期(`barrier`)で`omp parallel for`を作る方法
からまでの 2 つの関数と がdo_step_one(i)
ありdo_step_two(i)
ます。i
0
N-1
現在、私はこの(シーケンシャル)コードを持っています:
do_step_one()
との各呼び出しはdo_step2()
任意の順序で並列に実行できますが、開始do_step_two()
するにはすべての の最後が必要ですdo_step_one()
(結果を使用しdo_step_one()
ます)。
私は次のことを試しました:
しかし、gccは文句を言います
convolve_slices.c:21: 警告: バリア領域は、ワークシェアリング、クリティカル、順序付き、マスター、または明示的なタスク領域内に密接にネストされていない可能性があります。
私は何を誤解していますか?その問題を解決する方法は?
c - スレッドの反復回数が等しくないwhileループでompバリアを使用する方法
配列 W の合計プレフィックスを持つために、omp を使用してリストランキングの問題 (ショートカットによっても知られる) を実装しようとしています。flush プラグマを正しく使用しているかどうかはわかりません。領域は、ワークシェアリング、クリティカル、順序付き、マスター、または明示的なタスク領域内に密接にネストすることはできません"
}
助けてください!
visual-studio-2008 - Visual C ++ 2008StandardEditionのOpenMP
VC ++ 2008でOpenMPをセットアップするにはどうすればよいですか?コンパイラはそれをサポートしています、私はヘッダー/ライブラリが欠けているだけだと思います。MFC開発のためにフレームワークSDKをVC++Expressに追加する方法と同様にそれらを入手できますか?
java-native-interface - OpenMPを使用してコンパイルされたJNIライブラリをJavaの「メイン」スレッドでのみ呼び出すことができるのはなぜですか?
実行を並列化するためにさまざまな#pragmaompディレクティブを使用して、Cでライブラリを作成しました。私はMacOSX10.6を使用しています。次に、これらの関数をJNIライブラリにラップし、Javaアプリケーションから呼び出しました。
OpenMPディレクティブを含むネイティブ関数の呼び出しは、メインスレッド以外のJavaスレッドから呼び出された場合、EXC_BAD_ACCCESSでクラッシュするようです。
動作しますが、別のスレッドでライブラリを呼び出す、たとえばEventQueue
EXC_BAD_ACCESSでクラッシュします。
私はOpenMPの初心者なので、これを引き起こしている原因がわかりません。Javaの「メイン」スレッドの何が特別なのですか?OpenMP並列化タスクを初期化するために必要なリソースにアクセスできるのはそれだけであるような特権モードで実行されますか?また、OS XでのJVMの内部動作についてもよく知らないため、Javaスレッドとネイティブスレッドの関係がわかりません。
どんな助けでも大歓迎です!