MEX-ファイルの中で OpenMP を使用することはできますか?

9 views (last 30 days)
MathWorks Support Team
MathWorks Support Team on 30 Mar 2018
MEX-ファイル内に OpenMP の機能を盛り込み、並列処理を行うことを考えていますが、可否を教えてください。
 

Accepted Answer

MathWorks Support Team
MathWorks Support Team on 19 May 2021
Edited: MathWorks Support Team on 19 May 2021
MathWorks ではお客様が作成した MEX-ファイルの内容については技術的なサポートは行っておりません。このため OpenMP を MEX-ファイル内で使用することについての動作テストも特に行っておりません。
 
以下は、MEX-ファイル内で OpenMP を使用する場合のいくつかのポイントです。
 
*コンパイラについて*
OpenMP の機能を MEX-ファイルに盛り込むためには、MEX化の際に使用する C/C++ コンパイラが OpenMP に対応している必要があります。
 
  • Windowsの場合、MEX-ファイル作成に対応したコンパイラのうち、いくつかは OpenMP に対応していないものもあります。例えば、Microsoft Windows SDK 7.1 は OpenMP をサポートしておりません。同様に、過去のバージョンのMATLABで使用されていた Microsoft Visual C++ Express の多くも OpenMP をサポートしておりません。一般的にはMicrosoft Visual C++ Professional Editionでしたら OpenMP をサポートしています。
  • Macの場合、昨今のバージョンのMATLABでは、MEX-ファイル作成に対応したコンパイラはXcode 5.x および 6.x にふくまれているclangです。Xcode 5 および 6 に含まれたclangコンパイラは OpenMP をサポートしていません。このためほかのコンパイラをご使用いただくことをお勧めいたします。理論的には gcc/g++ であればMEX-ファイルを作成することは可能です。
  • Linuxの場合、MEX-ファイル作成に対応している gcc/g++ であれば OpenMP をサポートしております。しかしOpenMP を使用する場合、 ‘-fopenmp’ フラグをコンパイラとリンカに使用する必要があります。このフラグは例えば以下のように使用します。
>> mex -v mexFunction.cpp CXXFLAGS="$CXXFLAGS -fopenmp" LDFLAGS="$LDFLAGS -fopenmp"
*OpenMPの実装の間で成立しないこと*
既定では、Microsoft Visual C ++はオブジェクトをMicrosoftのOpenMP実装にリンクしますが、gcc / g ++は通常libgomp(GNU OpenMP)にリンクします。 MATLAB自体はIntel社のOpenMPを利用していますが、これはMATLABのMicrosoft OpenMPまたはGOMPにリンクされたMEXファイルを実行する際に互換性の問題となる可能性があります。このような互換性の問題を避けるため、Intel社のOpenMP実装をMEXファイルにも使用することをお勧めします。 次のIntel社のWebサイトでは、Intel社のOpenMPに対するコードのコンパイルとリンクに、gcc / g ++やMicrosoft Visual C ++などのIntel社以外のコンパイラとリンカーを使用する方法を説明しています。
"mex"を呼び出すときに正しいフラグを適用できるように、コンパイラとリンカのフラグを無効にする方法の詳細については、 "mex"のドキュメントページを参照してください。 このページを開くには、MATLABコマンドウィンドウで「doc mex」と入力するか、オンラインドキュメントを参照してください(次のリンクはMATLABリリースR2020aに固有のものです)。
さらに、インテルOpenMPインポート・ライブラリ(libiomp5.lib/so/dylib)は、Windowsの32ビットおよび64ビットMATLABではbin\win32またはbin\win64ディレクトリにあり、Linuxではsys/os/glnxa64ディレクトリにあり、Macではsys/os/maci64をインストールします。
*バージョンの互換性*
MATLABのマニュアルには、「最適な結果を得るためには、お使いのMATLABのバージョンがMEXファイルの作成に使用されたものと同じである必要がありますが、MEXファイルは通常下位互換性があります」と記載されています。
しかし、OpenMPを使用し、上記の手順に従ってリンクされたMEXファイルの場合は、バージョンを合わせる必要があります。バージョンが異なる場合、作業している各MATLABリリースのOpenMP MEXファイルを再構築して再リンクする必要があります。

More Answers (0)

Tags

No tags entered yet.

Products


Release

R2017b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!