日本語練習帳

つらみのラプソディを歌います

エラー処理に1日を溶かしました(n回目)

本日のエラー処理

既に「Intel製のFortranコンパイラがどのMacでもまともに動かない」という問題を抱えていた.

具体的には,並列化オプション付きで.f90なり何なりをコンパイルすると,

software.intel.com

にも報告されているように,コンパイル自体は普通にうまくいくのだが

dyld: Library not loaded: libiomp5.dylib
Referenced from: /Users/$USERNAME/hogehoge
Reason: image not found

と言った形のランタイムエラーを吐き続ける.直接的な原因としては,fortranコンパイラの機能である並列化オプションとして -qopenmpを付け加えて

gfortran main.f90 -o main -qopenmp

というリストをぶち込んだからなのだが,少なくともGNU製コンパイラではそんなことは起きなかったし,これは明らかに変な阻害要因がある.というわけで,いくつかのページを当たってみたところ,以下のようなサイトに出くわし,問題は解決した.

Mac用McMaille - Kanza-wiki

どうやら,岡山大の神崎さんという方の研究室で更新されているwikiらしく,いくつかの数値計算用プログラムが公開されていた.意外と興味を惹かれるものが沢山掲載されていたから,また今度じっくり時間をかけてサーフィンしてみたくなるサイトだったが,そこに書かれていたのは,ただ単純に

DYLD_LIBRARY_PATH="(libiomp5.dylibの在り処)"
export $DYLD_LIBRARY_PATH

をすれば良いという情報が簡潔に述べられていた.これは,パスを通すという概念が腑に落ちていなかった自分としては盲点で,つい先日とあるシェルスクリプトGNU Parallelを実装しようとした時の経験が一切生かされていないと実感した.その時は「複雑な処理だけど同じことを色んなパラメータについて回す」ということをGNU Parallelで行うために,実は生まれて初めてシェル関数というものを使ったのだが,どうも

parallel (シェル関数名) [...]

みたいな使い方をしようと思うと,export -f (シェル関数名)が必要になるらしく,それを関数名宣言の後に付け加えて

foo(){
hogehoge
}
export -f foo

とし,一種の構文みたいな形で貼り付けていた1

このことは,コンパイラがライブラリを呼び出す時にも同様で,パスが通っている筈のディレクトリにlibiomp5.dylibなるものが無かったからである.そして,それをexport $DYLD_LIBRARY_PATHによって任意のシェルに引き継ぐ必要があった.

解決の流れは次の通りである.

  1. まず,locate libiomp5.dylibIntelコンパイラのライブラリの箇所を突き止める.

  2. 次に,その箇所のディレクト$DYLD_LIBRARY_PATH=/opt/intel/lib環境変数に代入する.多くの場合は/opt/intel/libだと思ったが,違った場合は適宜修正を.

  3. 最後に,環境変数を引き継ぐためのお呪いとしてexport $DYLD_LIBRARY_PATHをかける.

これによって,いつでもlibiomp5.dylibの呼び出しが可能になり,コンパイラオプションとして-qopenmpをしてもランタイムエラーが出なくなる.これらのことは,.bash_profileに書いておいても損はないだろう.

DYLD_LIBRARY_PATH=/opt/intel/lib
export $DYLD_LIBRARY_PATH

また,locateがまともに通らない場合は,お呪いとして

sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.locate.plist

をやってしばらく待ってから再挑戦するというのも手だろう.

今日は一方で,えらく不思議なエラーに見舞われた.ログインシェルがbashで1行1行読ませれば通るリストを,いざスクリプトファイルにして読ませると(standard_in) 1: parse errorを吐くのだ.流石にキレソー.

その他

エクセルソフトさんが主催するセミナーへの参加を決意した.

www.xlsoft.com

数値計算における二大巨頭である並列化ベクトル化のうち,ベクトル化だけは全然知らないし,単に研究をしているだけではちっとも学べそうになかったので,その辺の意味合いも込めて話を聞いてくることにした.題材は,大正義IntelParallel Studio XEだそう2だが,なんと,この高価な(コンパイラ付き)ソフトが学生が非商用で利用するうちはタダなのだそうだ.詳しくは

Qualify for Free Software - Student | Intel® Software

にも書かれているが,(例え国公立であっても安くはない大学の学費が)より大きな巨額の富に化ける例だろう.他にも例えば,Jetbrains社のIDE利用ライセンスでも,ちゃんと学生プログラムがある.

www.jetbrains.com

こういう機会はみすみす逃さないようにしていきたいし,贅沢に利用しつつ真の自己実現を果たしたいと思うばかりである.

https://software.intel.com/en-us/intel-parallel-universe-magazine

お引っ越し

とある事情で研究室が移転することになったので,引っ越しの手続き以外(転入先の確定)を済ませた.

何の事はない,某柏大学に,JR京都駅もどき千葉支部が統合されるそうだ3.そこに指導教員が常駐することになったそうである.


  1. この用法は恐らく正しくない.というか,筆者自身がシェルスクリプトについて不勉強であることがそもそもの未解決問題であるように思えてきた.

  2. Fortran使いからすれば,Intelさんはほぼ唯一と言ってもいい力強い味方である.

  3. 今,柏大学は半分ほど更地になっていて,工事でいくつかの建物が建設中になっているが,そのうちの一つが第2京都駅というわけである.