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

5 visualizaciones (últimos 30 días)
MathWorks Support Team
MathWorks Support Team el 30 de Mzo. de 2018
Editada: MathWorks Support Team el 19 de Mayo de 2021
MEX-ファイル内に OpenMP の機能を盛り込み、並列処理を行うことを考えていますが、可否を教えてください。
 

Respuesta aceptada

MathWorks Support Team
MathWorks Support Team el 19 de Mayo de 2021
Editada: MathWorks Support Team el 19 de Mayo de 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ファイルを再構築して再リンクする必要があります。

Más respuestas (0)

Categorías

Más información sobre 実行速度 en Help Center y File Exchange.

Etiquetas

Aún no se han introducido etiquetas.

Productos


Versión

R2017b

Community Treasure Hunt

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

Start Hunting!