会社のクラスター。 LAM/MPI インストールされてんだけど、どうもディストロから何も考えずに一式突っこんだままなので mpicc が gcc 前提になっとる。
mpicc は LAMHCC でコンパイラ振り分けられるんだが、なにせ gcc 前提で build したやつだから、 -pthread をくっつけるようになっていて、これが LAMHCC で PGI の pgcc を使おうとした時に悪さをする。 pgcc はいちいち -pthread をありえないオプションつーことでエラーにして終了するから。
それというのも pgcc があるのに LAM/MPI をちゃんと自分で作らないからで(っていうか、バージョンも随分古いままだぞ)、 LAM の方にはちゃんとこれを回避するオプションがある(--without-dash-pthread)。 build 時のオプションだけどorz
あるいは、 lam_config.h で define しているだけだから、そこで潰すんでもいい。
ただ、いずれにせよユーザ権限じゃ如何ともし難い。ちゃんと仕事しろよ駄目管理人……。
てゆーか、ただ使うなら手で
何故か MPICH も入ってるんでそっち使うか……。orz
それに LAM/MPI はもう放置モードっぽくて、みんな OpenMPI に移ったようだな。
$ cat N.c #includeint main () { int argc; char **argv; MPI_Init(&argc,&argv); ; return 0; } $ env MPICH_CC=pgcc /opt/mpich-ch_p4-gcc-1.2.7/bin/mpicc -c N.c $ env LAMHCC=pgcc /opt/lam-7.0.6/bin/mpicc -c N.c pgcc-Error-Unknown switch: -pthread /opt/lam-7.0.6/bin/mpicc: No such file or directory $ grep pthread /opt/lam-7.0.6/include/lam_config.h /* Do threads have different pids (pthreads on linux) */ #define WRAPPER_EXTRA_CFLAGS "-pthread" #define WRAPPER_EXTRA_CXXFLAGS "-pthread" #define WRAPPER_EXTRA_FFLAGS "-pthread"
追記: $HOME/bin に以下の内容で mpicc ファイルを作ってやったら、うまく configure も騙せて最後まで build できた。昔はこういうイカサマ大得意だったのに、すっかり思いつかなくなっちゃってるな。
exec pgcc $* -I/opt/lam-7.0.6/include -L/opt/lam-7.0.6/lib -lmpi -llam -lpthread