dポイントプレゼントキャンペーン実施中!

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

A 回答 (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/Inlin …
の中央あたりに、コンパイラオプションを設定した例があります。

またLDDLFLAGSが使えるので、別途openMPでコンパイルしたサブルーチンをリンクしてinlineCから呼び出してもよいかもしれません。

Windowsの場合必要なのかわかりませんが、UNIX系OSの場合は
OMP_NUM_THREADSを設定しておかないと並列実行はしてくれませんので、注意してください。

他のスクリプト言語ですが、CやFortranで書いたサブルーチンをswigでライブラリ化して使っています。
サブルーチンをコンパイルするときに並列化などのオプションを追加しておくと並列実行できています。
またGPUを使った計算も可能でそれも実際に使っております。
コンパイラが対応しているとインラインでも同じことができるはずです。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!