プロが教えるわが家の防犯対策術!

並列計算を個人のPCで行って計算速度が上昇するか、また容易に並列計算ができるかについて伺いたいです。特に知りたいことは

(1)プロセッサによらず並列計算をすると速くなるものか?どのプロセッサが速くなりやすいとかありますか?

(2)初心者でもとっつきやすい並列計算ができるソフト、ライブラリは何か?(いくつか候補をあげてそれぞれの利点を説明して下さると有り難いです)

(3)計算がどれくらい速くなるか?

以下状況と質問内容を具体的に説明します。
現在私の利用可能なプロセッサがCoreDuoのノートPC1つ、Core2Duoのデスクトップが1つです。(後者は学校にあるものなので、勝手にノートとつないで両方で計算させることができるかは不明ですが。。。)(1)についてはこのプロセッサではどうかを特に教えて頂きたいです。

今現在数値的にやらなくていはいけない処理は、行列の積、逆行列、および固有値を求めることです。行列が複素数であり、疎でもないですし、かなり行列のサイズが大きい(100×100以上にはなる)ので困ってます。
将来的にはモンテカルロ法にもお世話になるので、「行列演算」「モンテカルロ」について並列計算でどれくらい速くなるか(3)で教えて下さると助かります。

何卒よろしくお願い致します。

A 回答 (3件)

Linux(CentOS 5)で計算機ネットワーク


http://www.rcs.arch.t.u-tokyo.ac.jp/kusuhara/tip …

http://www.cs.hiroshima-u.ac.jp/~yasuaki/dokuwik …
以上は、悪いけど、直ぐには無理だと思います。
Linux を知らなければ、一年くらいかかるか??

金をかければ、出来るかも知れません。中途半端な金額ではない。
http://www.intel.co.jp/jp/software/products/inde …
Xeon,Itanium ならもっと良いかも知れない。
しかし、この辺は知りません。そんな金はないので

だから、こつこつLinux をやっています。
初心者で簡単な方法があるのなら、私も知りたい。
    • good
    • 1

x毎に固有の処理を行うのであれば、xをパラメータ


(範囲指定でも)として、複数ジョブを走らせる、
並列して同じプログラムを別の値で走らせたら、
CPUのコアが複数あれば、並列で処理してくれるで
しょう。これが最も単純で、最も効果があると
思えます。

ただし、同時に走らせるジョブ数をコア数以上にす
ると逆効果になるかもしれません。コア数マイナス
1個のジョブ数が望ましいですね。

プログラム内で並列処理するのは、コストが掛かる
し、効果が期待できるようになる前に、スカラで
処理が終わってしまうかもしれないという代物で
しょう。
    • good
    • 0

結論を先に書くとPCでは無理と思います。



やはりスーパーコンピュータ。スーパーコン
ピュータ用のコンパイラが必要でしょう。
コンパイラは、スーパーコンピュータのハー
ド特質が分かっているし、また、プログラマ
もスーパーコンピュータ毎のハード的特質を
把握する必要があります。

スーパーコンピュータによっては繰り返し演
算が128回で最も性能が出るものや、256回で
最も性能が出るものなど、色々です。多くの
性能に影響する要素があり、意味の無いピー
ク性能を引出すだけのテストプログラムでさえ
ピーク性能を引出せる人は、そうは居ません。

また、ベクトル演算を行うためには一般的に
コスト(性能的にマイナス)があります。
専用マシンでなければそのコストはとても
回収できません。専用マシンでも、演算アル
ゴリズムが悪ければ、コスト割れしてしまい、
スカラ演算より遅くなるケースもあります。

PCごときでは、素直にスカラ演算に徹するこ
とですね。そして運用で性能を求めるのがいい
でしょう。例えば、途中結果が実は毎回同じ
値であれば、計算結果を保持し、そこから条件
に応じた計算を行うとか・・・アイデア次第で
す。

また、CPUはパイプ処理されているでしょうから、
パイプ処理の性能上のマイナスは条件分岐です。
条件分岐が必要なものはまとめて行い、単純繰り
返しをなるべく多く演算できるようにするのは
同じCPU100%でも、計算量が変わるでしょう。
ここでいうパイプ処理はスーパーコンピュータの
1方式のパイプとは違い、汎用機用のパイプ処理
です。
    • good
    • 0
この回答へのお礼

Tasukeさん、色々教えて頂いてありがとうございます。やはり並列計算ともなると奥が深いんですね。。。

ただ説明不足だったかもしれませんが、私が今やろうとしているプログラムでは簡単に言うと、「M(値xに依存)の逆行列を求めて、行列K(定数行列なので初めに1回定義)との積を計算して、その固有値を求める」これを色々なxについてのループ(1000回以上)。
なので、自分の手で並列化すること自体が非常に簡単なプログラムと思えるのですが、どうでしょうか?

くどいようで本当に申し訳ありません。。。。
Tasukeさんに限らずどなたでも教えてくださると大変助かります。

お礼日時:2008/05/12 18:03

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!