簡易並列処理の勉強について

このQ&Aのポイント
  • 全く同じ仕様のPentium4のマシンが4台あり、スイッチングハブにつながれている状態です。最初から並列処理の勉強のためのマシン設定を実現したいと思います。
  • 簡易並列処理の勉強のためにPentium4のマシンを使っていますが、セットアップが問題でうまくいきませんでした。
  • Linuxのディストリビューションのセットでインストールしただけで簡単に並列処理の勉強ができる方法を教えてください。
回答を見る
  • ベストアンサー

簡易並列処理の勉強について

ずっと以前からパソコンを並列化して計算の効率を図りたいと思っていましたが、実現しませんでした。 今日的にはグラフィックプロセッサで高速計算する時代のようですが、できれば勉強のために今一度挑戦したいと思っています。オーバーヘッドが問題で全然速くならないというのでも体験できるといいと思っています。 条件としては全く同じ仕様のPentium4のマシンが4台あり、スイッチングハブにつながれている状態です。 OSはLinux(ubuntu)で、intel のfortran compiler, intelの並列環境のソフト(名前はど忘れ)だったり、CentOS+MPI(Mpich?) だったりなどいろいろとやってみてダメでした。何でダメだったのかは忘れてしまいましたが。NFSとかNISなどその他の環境設定も付帯的に絡んでいたように思います。おそらく並列環境のセットアップではなく、その他の環境のところで引っかかったように思います。 とにかくOSも再インストールしていいですから、最初から並列処理の勉強のためのマシン設定を実現したいと思います。これだけやればよいというセットがないでしょうか。貧弱な環境ですが、勉強したいだけなので、是非やり方をご教授願いたいのですが。Linuxのディストリビューションのセットでインストールしただけでとりあえず実現できるというようなものだと大変有難いです。あるいは適当な文献とか紹介サイトなどでも結構です。 以上、よろしくお願いします。

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

  • ベストアンサー
  • DIooggooID
  • ベストアンサー率27% (1730/6405)
回答No.2

セット商品を、となると、どうしてもPCメーカー製のレディーメードの 商品になってしまうと思います。 http://www.nec.co.jp/solution/hpc/lx/index.html http://primeserver.fujitsu.com/primergy/pccluster/qss-lineup/

その他の回答 (1)

  • DIooggooID
  • ベストアンサー率27% (1730/6405)
回答No.1

とりあえず、この辺りをご一読してみてはいかがでしょう。 http://mikilab.doshisha.ac.jp/dia/smpp/cluster2000/PDF/chapter01.pdf

参考URL:
http://mikilab.doshisha.ac.jp/dia/smpp/cluster2000/PDF/chapter01.pdf
skmsk1941093
質問者

お礼

回答有難うございます。早速取り寄せて印刷しました。 この文書に記載されている内容について1つ1つ(OSインストール、mpichのダウンロード、コンパイル, NFSの設定等々)実行していくわけですが、これらが全部一式整合性のとれたパッケージになっていると助かります。 yum, sudo apt-get, rpm ./configure make make install ....などの処理を独立でやっていくと、必ずバージョンの問題とか、ファイルを捜索するレポジトリの設定の問題、ディストリビューションごとの個性、gccのバージョン、バージョン等に起因するファイルの依存関係の問題などの関門が次々に出てくることが予想されます。以前はここで消耗して諦めてしまいました。ここでいろいろ悩むことで成長するのがLinuxのカルチャーなのだろうとは思いますが、いかんせん投下する労力と時間の問題で頓挫しました。 始めから整合性のとれたセットになっているとネット上で何も取り寄せる必要がないのでWAN側のネットに一切つなげなくても実行することは可能だと思います。そういうパッケージってないでしょうか。Scientific Linux(RedHat系)には名前からしてそのようなものがありそうですが、どのようなものでしょうか。

関連するQ&A

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

  • 1台のマシンに付いている2つのNICの使い分け

    Redhatを使用してます。 マシンには2つのNICが付いています。そこで,コマンドやNFS,NISなどをひとつのNIC(eth0)を通して行い,もうひとつのNIC(eth1)は並列計算で用いるMPIで使用したいのですが,どのように設定すればよいのかわかりません。どなたか,ご教授ください。

  • 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ではどうなるでしょうか。 以上、よろしくお願いします。

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

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

  • quad coreでのMPI使用法

    私はcore 2 quadを使用しています。 先日、並列計算を使用する機会があり、MPIを使用しようと思ったのですが、単体のPCに用いる場合の説明を見つけることが出来ませんでした。クラスターのような環境に使うための説明をされているHPしか見つけることが出来ず、困っています。 状況としては、 ・mpich-1.2.7p1をインストール済み。 ・CPUはcore 2 quad Q6600 ・PCは一台のみ。 ・やりたいことは、単体PCの4つのプロセッサを使用する並列計算の実行。 という感じです。 説明が分かりづらいかも知れませんが、もし参考になりそうな文書やHPをご存知でしたら、教えてください。 よろしくお願いします。

  • 並列処理についてですが、

    並列処理についてですが、 SCOREという並列環境を構築するソフトで、4つのPC(CPU:Quad Core)を、並列化させ、 ある逐次プログラム(C言語、ラプラス方程式を差分法で解くプログラムですがプログラム内容はあまり関係ないので、あるプログラムとさせていただきます)を並列処理させたところ、 1つのPCで、4つのプロセッサを使用し、合計4ノードで並列処理を行った場合と、・・・(1) 4つのPCで各PC1台につき1つのプロセッサずつ、合計4ノードで並列処理を行った場合では、・・・(2) 同じ4ノードであるにかかわらず、 (2)がノード数に比例的に演算性能が良くなることに対して、 (1)の場合、ノード数が増えても関数log(x)(雰囲気です)をグラフにしたような形で、演算性能がうまく良くなりません このような質問を以前したところ、 ・スレッド切り替えのオーバーヘッドが影響しているのではないか ・実行環境が違うことと、ひとつのプロセスですべてのコアを占有する thread はコアを2個使えば2倍、3個使えば3倍それぞれ速くはならない。一方、PCを組み合わせて使う場合、それは完全に独立しており、データ並列のために分割されて計算量が縮小された分、PC組み合わせ数にほぼ比例して速くなる。 という回答をいただくことができました。 なんとなくで意味は分かるのですが、何卒PC初心者なもので、あまり理解することができません。 ここからが質問です。 ・「スレッド切り替え」とは一体どういったものなんでしょうか ・いただいた回答で、「ひとつのプロセスですべてのコアを占有するスレッド」とはどういうことでしょうか このことについて教えていただきたいです。スレッドとは、など部分部分での単語は調べてみましたが、 どういったように動いているのかが分かっていないせいか、上記質問のようなことが分かりません。 回答をせっかくいただいたのに自分の語彙力のせいで度重なる質問をさせていただくことを申し訳なく思いますが、みなさん回答の方よろしくおねがいします。

  • PC(並列化)の処理能力について

    現在、linux環境下で並列計算機を用いて、電子状態計算等の並列処理を行っています。 処理速度、処理能力についてですが、 計算ホストを1台から2台に増やすと、倍の処理能力を持つようになりました。 しかし2から3、3から4台にしていくと、今度は比例的にではなく、 ある処理速度に収束するような結果となりました。 これは、何が原因と考えられるのでしょうか? もしくは計算規模が小さいために、このような結果となるのでしょうか? 例えば、計算する空間を増大すると比例的に処理能力が 向上するのでしょうか? ご面倒かと思いますが、回答お願いします。

  • 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言語だったりします。 自分で作ると、あまり効果がわからないので、これぞ、並列効果というのがわかるとありがたいです。 また、それによって、自分の環境ががんばり次第で並列化で高速化できるという自信にもなります。 (今効果が出ないのは、ひょっとしたら並列環境のインストールにミスがあるのではないか、私が何か勘違いしているのではないかと疑いもあるからです。) 並列化の処理速度以外でこのコンパイラの動作に異常はないようです。 以上、よろしくお願いします。

  • 並列処理(SCore)

    並列処理(SCore) 自分はSCOREを用いて並列処理を行おうとしている初心者です。 [環境] ・CPU Intel Core2 Quad 2.83GHz ・メモリ 8GB ・スイッチングハブ FXG-08IMB(ギガビット) これをサーバー兼計算ホスト1台、計算ホスト3台の計4台でSCoreによって並列環境として接続しました。 ・使用したプログラムは、初期値を設定し、ラプラス方程式を逐次的に計算させるプログラムです。 ・並列処理を行うためのプログラムとして、MPIを使用しました。 いろいろなパターンでプログラムを実行した結果を図に貼り付けておきます。 クアッドコアなので、1PCで4ノード扱うことができています。 やや頭でっかちとなってしまいましたが、ここからが質問です。 [質問?] たとえば、1つのPCで、4ノードで並列処理を行った場合と、 4つのPCで各1ノードずつ、合計4ノードで並列処理を行った場合に、 4PCで1ノードずつを並列接続したほうが"約1.8倍"の演算性能を誇っているのはなぜでしょうか? [質問?] 今回は初期値を設定して、ラプラス方程式を解く逐次プログラムを使用しましたが、 プログラムによっては、質問?のような結果にならない場合もあるのでしょうか? もしあるなら、どのようなタイプのプログラムなら、1台で4ノード、4台で4ノードの演算性能がほとんど同じ程度になるのでしょうか? できれば、?も?も上記した環境を踏まえて回答していただけると幸いです。 申し訳ありませんが、初心者ということを分かって回答していただけると助かります。 面倒だとは思いますが、回答よろしくおねがいします。 [以下プログラム] この逐次プログラムをMPI関数によって並列処理可能にしたものが実際使用したプログラムです。 (文字数が足りなかったので、並列化する前の逐次プログラムをせめて載せておきます。) #include<math.h> #include<stdio.h> #include<sys/time.h> #define SIZE (1024*3 - 2) #define EPS 1.0e-1 double u[SIZE+2] [SIZE+2], uu[SIZE+2][SIZE+2]; double second() { struct timeval tv; gettimeofday(&tv, NULL); return tv.tv_sec + tv.tv_usec / 1000000.0; } void init(double u[SIZE+2][SIZE+2]) { int i,j; memset (u,0,sizeof(double)*(SIZE+2)*(SIZE+2)); for (i=1;i<=SIZE;i++) for(j=1;j<=SIZE;j++) u[i][j]=sin((j-1)/(SIZE*M_PI))+cos((j-1)/(SIZE*M_PI)); } int main() { double start,time,err; int i,j,iter=0; init(u); init(uu); start=second(); do{ {iter ++;} for(i=1;i<=SIZE;i++) for(j=1;j<=SIZE;j++) uu[i][j]=u[i][j]; for(i=1;i<=SIZE;i++) for(j=1;j<=SIZE;j++) u[i][j]=(uu[i-1][j]+uu[i+1][j]+uu[i][j-1]+uu[i][j+1])/4.0; {err=0.0;} for(i=1;i<=SIZE;i++) for(j=1;j<=SIZE;j++) err+=(uu[i][j]-u[i][j])*(uu[i][j]-u[i][j]); }while (err>EPS); time = second()-start; printf("time=%f seconds, iteration=%d,performance=%f MFLOPS\n", time,iter,(8.0*SIZE*SIZE*iter)/time/1.0e6); return 0; }

  • MPICHについて

    MPICHについて質問させていただきます。 今、Xeon 5160×2個のマシンにMPICHをインストールしました。 OSからはCPUコアが4つ見えています。 今、問題になっていることはMPICHで1ノード4CUPで動かそうと思っ ているのですが、1ノード1CPUでしか動きません。 MPICHのバージョンは、1.2.7p1です。 今MPICHの状況は、インストールをして、 mpich-1.2.7p1/share/machines.LINUXに自分のホスト名を 記述してあるだけです。 それで、例えば姫野ベンチをMPIで走らせようと思い4cpuでやってみた のですが、エラーが出ます。1cpuでは動くのですが何故かパフォーマン スが悪いです。 4cpuで動かした時のエラーの詳細です。 $mpirun -np 4 a.out Permission denied. p_05881: p4_error: Child process exited while making connection to remote process on xxxxx.xx.xx.jp: 0 p0_5581: (6.011719) net_send: could not write to fd=4, errno = 32 です。 パーミッションの問題かな?と思い、いろいろいじってみましたが無理 でした。 MPICHで何処かにCPUの設定ファイルなどがあるのでしょうか?(machines.LINUXにホスト名:4で記述しましたが無理でした) 色々調べてみましたがよく分からなかったのでよろしくお願いします。

専門家に質問してみよう