• ベストアンサー

MPI プログラム

C言語で並列計算プログラムを作りたいのですが、 MPIの導入方法が分かりません。 特別なコンパイラなどが必要なのでしょうか? 単純な質問ですが、お力添え願います。

  • ageb
  • お礼率78% (18/23)

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

  • ベストアンサー
  • onosuke
  • ベストアンサー率67% (310/456)
回答No.1

MPIは規格の名前(ソフトウェアの名前ではない)なので、 MPIを実装したソフトウェアを導入する必要があります。 オープンソースの有名どころは、以下の2つです。 ・OpenMPI ・MPICH2 >特別なコンパイラなどが必要なのでしょうか? 不要です。gcc、gf77などで十分です。 MPICH2だと、mpiccやmpif77といったコンパイラ風のコマンドが含まれていますが、 ただのwrapperコマンドです。 mpi向けのコンパイルオプションやリンカオプションを自動的に付与してくれる だけであり、コンパイラの本体は、gcc、gf77などを利用しています。

ageb
質問者

お礼

明快なお答えありがとうございました!

関連するQ&A

  • MPIに関して

    Fortran90でOpen_MPIを使ったプログラムの並列化の練習をしたいのですがインターネットで検索しても参考になるサイトなどがなかなか見つかりません。例を見ることで関数の具体的な使われ方を学びたいのですが良いサイトなどをご存知の方いらっしゃいましたら教えていただけませんでしょうか。よろしくお願いいたします。

  • MPIに関して

    Fortran90のプログラムをOpen_MPIを使って並列化する練習をしたいのですがインターネットで検索してもなかなか参考になるサイトなどが見つかりません。具体例を見て関数がどのように使えるかを学びたいのですが良いサイトなどをご存知の方いらっしゃいましたら教えていただけないでしょうか。よろしくお願いいたします。

  • mpiによる多次元配列の送受信

    私はmpiによる並列計算プログラムをfortranを使って書いてます。 配列a(i, j, k) (i=1~10, j=1~10, k=1~10)があったとします。 これを call mpi_send(a(1, 1, 1), 100, MPI_INTEGER, ...) とすると、a(1,1,1), a(1,1,2), …, a(1,1,10), a(1,2,1), a(1,2,2), …, a(1,10,10) のようにiを固定した100個のデータが送信されますよね? これをjやkを固定してデータを送りたい場合どのようにすればいいのでしょうか?

  • MPIを用いたFortranプログラムのコンパイル

    バンド構造などをシミュレーションできるソフトPHASE ver. 4.00を下のサイトからダウンロードし、makeしようとしたのですが出来ません。 http://www.fsis.iis.u-tokyo.ac.jp/result/software/ エプソンダイレクト TP715LR CPU名称 Pentium III CPU動作周波数 700MHz メモリ 128MB OS Fedora Core 5 Linux Fortranコンパイラ intel Fortran Compiler 9.0 for Linux Cコンパイラ gcc MPI mpich-1.2.7 PHASEはMPIを使ったFortranのプログラムで、オブジェクトファイルは作られたのですが、最後のリンクのところで IPO link: can not find -lfmpich というエラーメッセージが出てしまいます。 リンクはifortで、オプションに-lfmpich -lmpichなどを指定しました。 -lのオプションは後に続くディレクトリ名をライブラリの検索先として指定するようなので、どこかにfmpichというディレクトリがあるかどうか調べたのですが存在しませんでした。本来ならばどこかにあるものなのでしょうか。

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

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

  • 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名でかえってきます) 理解がいまいちなので、質問の文章が分かりにくいところもありますが、教えていただけないでしょうか。 よろしくお願いします。

  • CプログラムをUNIXで使いたい

     メーカーで解析の仕事をしている者です。  解析用コンピュータのOSは「IRIX」です。またそれとは別に自分のデスクにパソコン(Windows2000)があります。  解析ソフトからの出力ファイルを使って計算するプログラムをC言語で作成して、「Windowsのパソコンで」使用しています。  WindowsのパソコンにCコンパイラは入っていますが、解析用コンピュータには入っていないので仕方なくそうしています。  解析用コンピュータでこのプログラムが使えれば便利なのですが、できないため現状は計算するたびに何度も何度も行ったり来たりしなければならず、とても不便です。  解析用コンピュータにCコンパイラを導入するのは結構なお金がかかるという理由で難しい状況です。  何か良い方法はないでしょうか。教えてください。よろしくお願いします。

  • MPI

    MPIのエラーメッセージの意味がわからないので質問します。 エラーメッセージは以下の通りです。 ----------------------------------------------------------------------------------------- [cli_1]: aborting job: Fatal error in MPI_Send: Other MPI error, error stack: MPI_Send(172).............................: MPI_Send(buf=0x80e557c, count=26, MPI_INT, dest=2, tag=0, MPI_COMM_WORLD) failed MPIDI_CH3_Progress_wait(199)..............: an error occurred while handling an event returned by MPIDU_Sock_Wait() MPIDI_CH3I_Progress_handle_sock_event(436): MPIDI_CH3U_Handle_recv_pkt(247)...........: failure occurred while allocating memory for a request object rank 1 in job 258 cs080_12340 caused collective abort of all ranks exit status of rank 1: killed by signal 9 [cli_0]: aborting job: Fatal error in MPI_Send: Other MPI error, error stack: MPI_Send(172).............................: MPI_Send(buf=0x80e557c, count=26, MPI_INT, dest=1, tag=0, MPI_COMM_WORLD) failed MPIDI_CH3_Progress_wait(199)..............: an error occurred while handling an event returned by MPIDU_Sock_Wait() MPIDI_CH3I_Progress_handle_sock_event(777): MPIDU_Socki_handle_pollhup(418)...........: connection closed by peer (set=0,sock=1) ----------------------------------------------------------------------------------------- これはやはりメモリ関係のエラーなのでしょうか? 詳しい方、知っている方がいましたら教えてください。 よろしくお願いします。

  • プログラム言語って何があるの?

    私、プログラム言語について調べています。 ウィキペディアをみてもたくさんあって、そこからまたリンクがたくさんあってどこでどのように区切っていいのか分かりません。そこで皆さんに質問したいのですが、プログラム言語はどのようなものがありますか? 大まかにプログラム言語の総称があってその次に (1)機械語(マシン語) (2)アセンブラ言語 高水準言語これの中に (3)インタプリタ言語 (4)コンパイラ言語がありますが、 (1)~(4)のそれぞれの詳細を教えてください。例:BASIC、C等 またこの枠に入らないプログラム言語がありましたら教えてください。 とってもマイナーなものでも構いません。出来ればURL欲しいです。 お願いします。m(_ _)m

  • プログラム全般について

    お世話になります。素人です。 プログラム、BASIC、C、VB、PERL、HTMLなど 作成するときの根本なのですが、作成するときはエディタ?なるものを 使うようなことを耳にしますが、コンパイルする、走らせるための モノと考えればよいのでしょうか? いきなり、簡単でも難しくても、wordやテキストエディタなどで 言語を作成しても動作確認、プログラムを走らせることは出来ま せんよね? そのために専用の各言語用のエディタ?コンパイラ?なるものが 必要になると考えればよいのでしょうか? いきなりC言語でプログラムを作れ、などなど根本的に何から? がよくわかりません。 その辺りをよくご存知の方、差し支えなければご回答をお願いします。

専門家に質問してみよう