debian / gnu Linux で並列計算したいのですが…。

このQ&Aのポイント
  • debian / gnu Linux での並列計算について
  • mpichのインストールとサンプルプログラムの実行に問題が発生
  • 原因を特定するためのご意見を募集
回答を見る
  • ベストアンサー

debian / gnu Linux で並列計算したいのですが…。

並列計算ライブラリのmpichのソースファイルをダウンロードして コンフィグ、メイクしてインストールしました。 インストール先は/usr/local/mpichです。 ここからは一般ユーザで行いました。 もちろん.bashrcのPATH設定も行いました。 サンプルプログラム(cpi.c)があったのでコンパイルはmpicc -O -o cpi cpi.c としておこないました。このプログラムはπの近似値を出力するらしい。 ところが、サンプルプログラムをコンパイルして実行ファイル(cpi)が生成される ものの肝心の実行ができません。 ちなみに実行は以下の手順です。 $mpirun -np 1 cpi この後C+zするまでとまったまんまです。 πの3.14もでてきません。 どのようなことが原因なんでしょうか? よいご意見お待ちしております。

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

  • ベストアンサー
  • ojin
  • ベストアンサー率43% (280/638)
回答No.1

特殊な利用のために、答えを出してくれる人も少ないようです。 小生も、興味本位からダウンロードして、試してみました。 結論から言えば、パスが通っていません。 #または、$プロンプトで、 echo $PATHを実行して、/usr/local/mpich/binが含まれていることを確認してください。 Debian / gnu Linuxのログインシーケンスは分かりませんが、redHatの例では、ユーザホームの ".bash_profile"から、パスや、環境変数を読み込んでゆきますので、この、.bash_profileにパスを追加しました。 小生は、http://www.hpc.co.jp/Technical/MPI-TechNote-01.htm サイトからのリンク先のftpサイトから、mpich-1.2.0.tar.gzをダウンロードして、インストールしました。好ましくないのですが'root'ユーザでテストしました。 手順は、# /usr/local/mpich-1.2.0 に展開して、 1../configure 2.make 3./usr/local/mpich-1.2.0/examples/basicで  make cpi 4..bash_profileにパスを追加 5.ログアウトして、再度ログイン 6./usr/local/mpich-1.2.0/examples/basicで   mpirun -np 1 cpi で、瞬時にπの結果と誤差が、計算時間と共に表示されました。   Time = 0.003583秒でした。 cpiのほかに、fpiなどのサンプルもありますがここまでにしておきます。 ディストリビューションにより異なりますが、一般的なログインシーケンスを以下にまとめました。 bash が対話的なログインシェルとして起動されるか、 --login オプション付きの非対話的シェルとして起動されると、 /etc/profile ファイルが存在すれば、 bash はまずここからコマンドを読み込んで実行します。このファイルを読んだ後、 bash は ~/.bash_profile, ~/.bash_login, ~/.profile をこの順番で探します。 bash は、この中で最初に見つかり、かつ読み込みが可能であるファイルからコマンドを読み込んで実行します。 では、ご健闘を祈ります hogehoge ojin

参考URL:
http://www.hpc.co.jp/Technical/MPI-TechNote-01.htm
allgreen
質問者

お礼

いやーありがとうございました。 ローカルユーザのホームディレクトリの.bash_profileに export PATH="/usr/local/mpich-1.2.1/bin:$PATH" としてsource ~/.bash_profile を実行しecho $PATH としたら一番先頭に認識されていました。 最初は export PATH="$PATH:/usr/local/mpich-1.2.1/bin" というようにしていたので 認識されるのですが一番最後に付加されるというかたちでした。 ご指摘の通りbashの特性が原因でしたね。 いやー勉強になりました。 本当にありがとうございました(^o^)/

関連するQ&A

  • debian/gnu Linuxで並列計算したいのですが・・・。

    タイトルの通りdebian/gnu Linux用の並列計算ライブラリ(mpich)をftpでとってきてdpkg -i でインストールは成功しました。 でもコンパイルしてmpirun -np 1 a.out として実行しようとすると止まってしまいます。これはどのような設定が必要なのでしょうか、それとも他に原因があるのでしょうか。ちなみに私はpcクラスタを構築したいのでこれをネットワークでつないで二台のpcで並列に処理させようと考えています。

  • MPIによる並列処理

    MPICH2を使ってCプログラムの並列処理を行おうとしております。 1台のPCを使用してPC内部の4つのコアで並列処理をさせようとしております。 http://pccluster.web.fc2.com/MPI.html のページを参考にMPICH2のインストールを行い、 mpdboot ~でMPIの起動、プログラムの並列実行は行えたのですが、 ~/mpd.hostsに PCのIP:4 を書き込み、mpdboot -n 1 -f mpd.hostsで起動し、 mpiexec -n 1 xxx.cpp を実行した場合、 n=1より2、3、4の場合のほうが速くはなるのですが、2の場合が4より速くなってしまいます。 これは何かがボトルネックになっていると考えられるのでしょうか? また、mpd.hostsのファイル内で「:4」として1台のPCですが4つのコアがあると指定しているにも関わらず、実行するときに mpiexec -n 5以上の数字 xxx.cpp という指定したコア数以上での実行ができてしまいます。これは何かインストール中の設定で間違いがあるのでしょうか。(mpiexec -n 10 hostnameとした場合なぜかちゃんと10個の応答が同じPC名でかえってきます) 理解がいまいちなので、質問の文章が分かりにくいところもありますが、教えていただけないでしょうか。 よろしくお願いします。

  • Linuxマシンの複数台による並列計算環境の構築

    LinuxのPCが複数台、ルータ(ハブ)で接続されています。 これを用いて並列計算環境を構築したいと思います。サイトなどで調べたら以下のようにあっさりと書いてあります。 ○ OpenMPのインストール sudo apt-get install openmpi-bin openmpi-dev ○ 公開鍵認証を使い、パスフレーズなしで各ノードにsshでログインできるようにしておく。 その後は、実際に計算例などが出ていました。これだけで環境構築ができるらしいです。OpenMPだけでなく、MPICHによる環境の構築も出ていましたが。 そこで質問ですが、 1.OpenMPのインストールは複数台あるPCの中の1台だけでやるのでしょうか。それとも全部でやるのでしょうか。sudo ...以下のコマンドラインは各PC(ノード)でやるのでしょうか。 2.コンパイラは各PC(ノード)に個別にインストールされている必要があるでしょうか。 3.最近のGCCにはすでにOpenMPが含まれているとのことです。これは1つのPCでCPUを分割して計算する場合に用いるらしいですが、グリッドコンピューティングの場合、やはり別途OpenMPの環境設定が必要なのでしょうか。 4.gccの場合、gfortranもインストールされるようです。intel fortranで利用する場合、OpenMP(あるいはMPICH)の環境が設定できれば実行可能なのでしょうか。 5.OpenMPとMPICHによる並列環境が両方共確立しているということは無意味でしょうか。あるいは不可能なものでしょうか。使い分けができるかどうかということでもありますが。 6.話がころっと変わりますが、MACの場合、もっと簡単にできると聞いたことがあります。最近はMACにもgccが標準で入っているようで、1つのPCでの並列化はコンパイラにオプションをつけて実行できるようです。これが複数台のPCではどうなるでしょうか。 以上、よろしくお願いします。

  • Intel+WindowsPCの並列化処理

    いまどきのPCですが、Core-i5, メモリ4G, 64ビットにintel Visual Fortran11.1.048をインストールし、コマンドプロンプトにコマンドを入力しながら利用しています。 このような状況でもCPUの分割による並列計算ができると思っています。 自分のプログラム(流体計算系)を以下のようにしてコンパイル、実行してみました。 ifort /Qparallel abc.f↓ abc.exe <ret>↓ 一応、トコトコと最後まで走っていきますが、コンパイラオプション /Qparallelをつけずにコンパイルした場合と速度はほぼ変わりません(同じと言ってもいいぐらい)。自分が何か間違っているか、並列処理では効率が上がりにくいつくりになっているのかわかりませんが。ただ、このコンパイラオプションは自動並列化で、ソースの作り方が少々悪くても対応するのではないかと思っています。 (悪いのは悪いのなりに、比率の比較はできるだろうと思うのですが) また、コンパイラオプションですが、いろんなサイトを見ると、-parallel となっている場合が多いですが、ifort -helpでオプションを調べると、/Qparallel と表示されます、これでいいでしょうか。 もう1つお願いなのですが、フォートランのプログラムで並列化オプションの有無ではっきりパフォーマンスの違いがわかる簡単なサンプルコードがないでしょうか。ラプラス方程式とかポアソンソルバーとか割とソース事態は短くて、並列効果が顕著なコードですが。ネットで見るとあることはありますが、C言語だったりします。 自分で作ると、あまり効果がわからないので、これぞ、並列効果というのがわかるとありがたいです。 また、それによって、自分の環境ががんばり次第で並列化で高速化できるという自信にもなります。 (今効果が出ないのは、ひょっとしたら並列環境のインストールにミスがあるのではないか、私が何か勘違いしているのではないかと疑いもあるからです。) 並列化の処理速度以外でこのコンパイラの動作に異常はないようです。 以上、よろしくお願いします。

  • Linuxにgccをインストールしたのですが・・・

    Linux(Debian Sarge)にgccをインストールしたのですが、 #include <stdio.h> int main(void) { printf("Hello World"); return 0; } のような1.cといったファイル名のプログラムを作成し、 cc -o 1 1.c と実行したのですが、 1.c:1:19: stdio.h : そのようなファイルやディレクトリ はありません と表示されコンパイルできません。恐らくライブラリが読み込まれていないまたはライブラリがインストールされていないために起こったと考えられるのですが、 どういった設定をすればいいのでしょうか?これまでは標準でインストールしただけで、全ての設定が完了していたのですが、今回は何故か設定ができていませんでしたので、手のつけられない状況です。 ご回答よろしくお願いします。

  • WindowsとLinuxのOpenMPコンパイル

    fortranを用いたプログラムをOpenMPを用いて並列化した際のトラブルについてです。 Fortranを使ってプログラムを作成しています。 Windows上でフリーコンパイラGFortranを用いて,OpenMPで記述したCPU並列化プログラムをコンパイルし,実行したところ問題なく並列計算が動作しました。 しかし,プログラム中で用いる配列や変数が多いため,Windowsでのメモリ使用制限2GBを超えてしまい,Linuxでの開発を余儀なくされました。 そのため,初心者ながらUbuntuを導入し,GFortranをインストールして同じく並列化を指示しコンパイルしたところ,2GBの制限を超えないようにしたWindowsと全く同じプログラムでも数値がおかしくなってしまいました。 Ubuntuでも,並列化の指示をせずに逐次計算を行えばWindows上と同じようにプログラムを回すことができ,正しい値が算出されています。 つまり,UbuntuではWindowsと全く同じプログラムでも並列化がうまくできていません。 なぜこのようなことが起きるのでしょうか,対処法があればお願いします。

  • vine linux2.5でのコンパイルについて

    プログラムを作りファイルをコンパイルすることまではできるのですがコンパイルされたファイルを実行することができません。 ファイルを実行するには、どのようにしたらよいのでしょうか?

  • Eclipse CDT MinGWによるC言語

    EclipseでC言語の開発環境を整えたいと思い、CDTをインストールし、コンパイラにはMinGWをインストールしました。CDT、MinGWは正常にインストールでき、MinGWはPATHに設定済みです。 Eclipse上でCプロジェクト"sampelC"を作成し、ソースファイル"sample"を作成しました。 以下sampleコードです。 #include<stdio.h> int main(void) { printf("Hello World"); return 0; } Eclipse上で実行するとコンソールに Info: Internal Builder is used for build gcc -O0 -g3 -Wall -c -fmessage-length=0 -o sample.o "..\\sample.c" gcc -o sampleC.exe sample.o 20:16:04 Build Finished (took 151ms) と表示され、ダイアログに 'sampleCデバックの起動'に問題が発生しました。プロセス開始中のエラー -詳細- プロセス開始中のエラー。 プログラム "D:\workspace\sampleC\sample.c" を実行できません: 起動失敗 プログラム "D:\workspace\sampleC\sample.c" を実行できません: 起動失敗 プログラム "D:\workspace\sampleC\sample.c" を実行できません: 起動失敗 と表示されます。 しかしながら、生成されたsample.exeをコマンドプロンプトで実行すると正しく起動します。 よってコンパイルは正常にできているということだと思います。 Eclipse上で実行する方法のご教授をお願いします。

  • Linuxで実行ファイルを実行

    Linux上でC言語をコンパイルし、作成された実行形式ファイルを実行しようとしたのですが、実行できません。 作業フォルダは /var/www/html です。 gcc program.c でコンパイル、 作成されたa.out(ls でフォルダ内にあるのは確認済です) を以下の方法で実行しようとしましたが、全てできませんでした。 1. [root@host-210-161-57-177 html]# a.out bash: a.out: command not found 2. [root@host-210-161-57-177 html]# ./a.out opendir: No such file or directory 3. [root@host-210-161-57-177 html]# %./a.out bash: fg: %./a.out: no such job 4. [root@host-210-161-57-177 html]# % ./a.out bash: fg: %: no such job gcc -o program program.c でファイル名を指定してコンパイルしてみても同様の結果でした。 ご存じの方、どうかご回答をよろしくおねがいします。

  • 並列化プログラムのコンパイル環境と実行環境が違う

    fortran77で物理計算をしています。 パソコンが2つあって、一つは個人で使うもので、もうひとつはスパコンです。 個人PCのコンパイラはifort、スパコンはfrtが入っています。 普段は個人PCのifortでコンパイルしてからスパコンに実行ファイルを転送して走らせています。 今のところこれで問題ありません。 このプログラムを並列化して計算時間を短縮しようかなとおもっています。 mpiなりopenMPなりでプログラミングして、(もしくはifortの自動並列化コマンドを使う) (1)ifortでコンパイルしたものをスパコンに送って走らせる方法 と、 (2)スパコン内のfrtでコンパイルして走らせる方法 では 実行速度は劇的に変わるものでしょうか? frtの使い方がイマイチわからずmakeが通らないので出来れば避けたいなと思って質問させていただきました。 勉強不足な点があると思いますが、よろしくお願いします。