• ベストアンサー

Inline CでOpenMPは使えますか?

WindowsでActivePerlを使っています。一部の処理を高速化するためにInline Cを導入したのですが、出来れば、このCの部分でOpenMPが使えればベストです。単純にプロンプトから > perl ***.pl /openmp としても動かないようですし、Inline CにおいてOpenMPによる並列化は実装可能なのでしょうか。

質問者が選んだベストアンサー

  • ベストアンサー
  • ki073
  • ベストアンサー率77% (491/634)
回答No.1

ドキュメントを見る限りできそうできそうですね。 http://perldoc.jp/docs/modules/Inline-0.43/C/C.pod CCFLAGSに-openmp あるいは /openmp(コンパイラ依存) を追加して、ソースに#pragma ompで追加していけばなんとかなるかも。 http://perldoc.jp/docs/modules/Inline-0.43/Inline.pod の中央あたりに、コンパイラオプションを設定した例があります。 またLDDLFLAGSが使えるので、別途openMPでコンパイルしたサブルーチンをリンクしてinlineCから呼び出してもよいかもしれません。 Windowsの場合必要なのかわかりませんが、UNIX系OSの場合は OMP_NUM_THREADSを設定しておかないと並列実行はしてくれませんので、注意してください。 他のスクリプト言語ですが、CやFortranで書いたサブルーチンをswigでライブラリ化して使っています。 サブルーチンをコンパイルするときに並列化などのオプションを追加しておくと並列実行できています。 またGPUを使った計算も可能でそれも実際に使っております。 コンパイラが対応しているとインラインでも同じことができるはずです。

関連するQ&A

専門家に質問してみよう