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

SDKで解析ソフトを作っている大学生です。
デュアルCPUのコンピューターでプログラムを
走らせるた場合、2個のCPUを同時に使って早い処理をして
くれるのでしょうか?
デュアルCPU専用のプログラミングをしなければ2個のCPU
を同時に使用して計算することができないと聞きました。
そのためデュアルCPUのワークステーションを買うかどうか迷って
います。
どなたかご教授頂ければ幸いです。

A 回答 (6件)

折角並列計算をなさろうとしていらっしゃるのに水を差すようですが、解析ソフトを並列化したところで2CPUだから性能が2倍ということはとても望めません。


もちろん、特殊な場合にはそういうこともありますが、もし解析を速く行いたいというのであれば、大抵の場合は幾つかのパラメータで複数回計算させるわけですから2CPUのマシンであれば2つのケースを通常の逐次計算プログラムで同時に計算させた方が実質的な効率はよくなります。
問題によっては並列化のための前処理、後処理のコストがかかって実質的には逐次計算と大差ないということもありますし、並列化自体が難しい場合もあります。
1回の計算に膨大な時間がかかりそれをどうしても短くしたいというニーズがあれば並列化する意味もあるとは思いますが・・・。

マルチCPUのマシンでC++を使って並列計算をしたいというのであれば皆さんがおっしゃっているようにマルチスレッドを利用するのが一番効率がいいと思われます。もちろんマルチプロセスでも出来ますが前者の方が計算負荷という意味では低コストです。
マルチスレッドを使いこなすのはかなりハードルは高いですが、並列計算という以外にも実用的なソフトウェア開発という意味では必要になってくるテクニックですので学習なさっても損はないと思います。
しかし解析が主で、並列計算に興味があるのでしたらmpich(先のリンクを参照下さい)等も学習する意味があると思います。

VC++でマルチスレッドをというのであればオライリーから「Win32/C++マルチスレッドプログラミング詳解」という本が出ていますし、Unix系でいくのならば同社から「Pthreadsプログラミング」という参考書が出ています。マルチスレッドについての概要を知りたければこれらの本の冒頭部分を立ち読み?なさってみたら如何でしょう。
    • good
    • 0
この回答へのお礼

有意義なご回答ありがとうございました。
みなさんのご回答をもとに自分で勉強していきたいと思います。

お礼日時:2001/04/06 19:59

パソコンは何の考慮もなく作ったプログラムの何処を並列に処理できるか判断できるほど賢くありません。



1つのプログラムで2CPUの恩恵にあずかろうと思ったら、そのようなプログラムを作る必要があります。

VC++であれば、「スレッド」というキーワードでマニュアルを探してみてください。完全にSDKだけ(Win32APIだけ)でいくならCreateThread、MFCを使うならAfxBeginThread、という関数を使いますからこれらの関数とその関連リンクを調べてみるとよいでしょう。
    • good
    • 0
この回答へのお礼

具体的なご回答ありがとうございます。
これからいろいろと調べて勉強していきたいと思います。

お礼日時:2001/04/06 20:04

書き忘れましたがコンパイラがパラレル化に対応していても初めからパラレル化に向くプログラミングをすれば効率よく処理を行えます。



ちょっと気をつけるかどうかでものすごく処理時間は変わりますよ。

確かfork文という物を持ったC言語があったはずですがこれを使えば上手くやればきっちり早くなります。

ただパラレル化向きのプログラミングとは?とは聞かないでください。
とてもここでは書き切れませんので書店に行って並列プログラミングの本を買ってください。
    • good
    • 0

>CPUが2個ついたWSを買えば、勝手に2個のCPUを使って計算してくれないのですか?



それはコンパイラによると思います。
良くできたコンパイラがあって尚かつそのコンパイラのオプション指定でパラレル化オプションが出来るようでしたら可能な限りパラレル化してくれます。
ただ今現在はどうか分かりませんが以前はC言語よりもフォートランの方がパラレル化の率が高かったです。構造化プログラミングされたプログラムは特にパラレル化の率が低かったです。現在はコンパイラが良くなっているかと思いますが。

>マルチCPUに対応したアプリケーションを作らなければ片方のCPUは眠ったままで、
>プログラムをしない人にはマルチCPUっていうのはまったく
>意味がないということですよね?

いえ、そんなことはありません。プロセスを2本以上同時に動かす場合はOSによってはちゃんとCPUを割り振ってくれますので単独CPUよりは効率的にアプリケーションを動かせますので。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
みなさんのご回答をもとに、これから勉強していきたいと思います。

お礼日時:2001/04/06 20:01

要するに並列計算がしたいということですよね?


それこそgooで「並列計算」というキーワードで探せば腐るほど情報が得られますよ。
asucaさんも述べておられる通り、並列計算をさせたかったらば、それなりに並列で計算するようなプログラミングをしなければいけません。
SDKとおっしゃってますが何のSDKなんでしょう?
普通、解析プログラムといえばFortran、C、C++などを使って記述するのが普通ですが、それぞれそれなりに方法はあります。
コンパイラー自体にそれなりの機能があって割と簡単に並列化できる場合もありますし、フリーのライブラリを使ってかなり細かく書かなければいけないけれどもかなり効率のよい並列プログラムを書くことも出来ます。
デュアルCPUといったマルチCPUのマシンを使う場合は前者の候補が増えます。
並列化したいプログラムにもよりますが、別にマルチCPUのマシンでなくともネットワークでつながった複数のマシンで並列計算を行うことも出来ます。
もちろんCで書けば何でも出来てしまいますから、別にライブラリ等がなくとも、例えばマルチCPUのマシンであれば複数のプロセスを起動するか複数のスレッドを起動することにより並列化したプログラムを書くことも可能です。
とにかくWeb上にたくさんの情報がありますし、並列計算に関する本もたくさん出版されています。それなりに奥の深い分野ですので学生さんであれば腰を据えて勉強なさった方がよいかと思います。

参考URL:http://www-unix.mcs.anl.gov/mpi/mpich/

この回答への補足

ご回答ありがとうございます。
僕はC言語を使っています。コンパイラはVC++6.0です。
またばかな質問をしますが、申し訳ありません。

CPUが2個ついたWSを買えば、勝手に2個のCPUを使って計算してくれないのですか?
マルチCPUに対応したアプリケーションを作らなければ片方のCPUは眠ったままで、プログラムをしない人にはマルチCPUっていうのはまったく
意味がないということですよね?

補足日時:2001/04/05 19:14
    • good
    • 0

デュアルCPUの場合ソフトウェアでそれように作ってやらなければ2つのCPUを使うことはありません。


そのままは知らせても1つのCPUしか使用しないでしょう。
プログラムの時は静的にメモリをとってもメモリを同時に書き込んだりして不都合が起こらないようにしてやるなど工夫が必要です。

たしかサブルーチンごと別プロセスにしてもう一つのCPUを利用できたはずですが関数名を忘れてしまいました。
    • good
    • 0

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