2011年11月25日金曜日

libiomp5md.dll と OpenMP

急ぎの計算があったので、後輩の Workstation を借りています。

Del l の precision T3500です。
残念ながら4コアでした。

早速、OpenMP で並列化済みの Dtransu とデータファイルをHDにコピーし、起動!
と思いきや、いきなりエラーが出ました。

コンピューターにlibiomp5md.dllがないため、プログラムを開始できません。・・・
そういえば、コンパイル時にライブラリーにリンク張る設定にしてました。(っていうか、並列化コード、使ってないんですね。もったいない。)

libiomp5md.dll を自分のpcからコピーして再度実行すると、以下のエラーが出ます。

アプリケーションを正しく起動できませんでした(0xc000007b)。・・・

うーん、これは前にも見おぼえがあります。でも、忘れました。
検索してみると、X86の dll を64bit OS で使用した場合に出るエラーでした。
64bit 用の dll に入れ直すと、正常作動しました。


うーん、OpenMPで並列化したコードを配布する場合、このライブラリーは一緒に配布して良いのでしょうか?サポートに問い合わせると、以下の回答が得られました。

「可能リスト(fredist.txt)に入ってますし、Redistributable Libraries に入っているので問題ないですよ。」

そうですか。そんなリストがあったんですね。
確かに、書かれていました。どこまで見ていないんでしょうか。



余談ですが、SSRの更新をしたにもかかわらず、登録をしていなかったため、Update 7もDLできない状態でした。あわてて登録、VFを12に、shellを2010に入れ替えました。はあ、プロが側に欲しい。


さらに余談ですが、12月の地下水学会の講習会で2次元版DtransuのOpenMP並列化コードが配布されるようです。他支店から参加するので、参考に見せてもらいましょう。


------------------------------------------
2012.8.24追記
上記だけではダメな場合もあります。
基本は Redistributable Libraries をインストールしてしまいましょう。
http://phreeqc.blogspot.jp/2012/08/0xc000007b.html


2 件のコメント:

  1. VSのOpenMPのみを使用するのであれば要らないDLLですね。
    Intel IPP(インテグレーテッド・パフォーマンス・プリミティブ)を使用すると必要になるようですね(↓)。
    http://www.isus.jp/article/library-special/deploying-with-intel-ipp-dlls/

    返信削除
  2. そう言えば、ココだけ見ると開発環境がわからないですね。
    確かに、Intel製品を使用しています。Visual Fortran です。
    OpenMPでいりますよね。

    返信削除