• ベストアンサー

デュアルCPUでのプログラミングについて

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

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

  • ベストアンサー
  • seian
  • ベストアンサー率50% (16/32)
回答No.6

折角並列計算をなさろうとしていらっしゃるのに水を差すようですが、解析ソフトを並列化したところで2CPUだから性能が2倍ということはとても望めません。 もちろん、特殊な場合にはそういうこともありますが、もし解析を速く行いたいというのであれば、大抵の場合は幾つかのパラメータで複数回計算させるわけですから2CPUのマシンであれば2つのケースを通常の逐次計算プログラムで同時に計算させた方が実質的な効率はよくなります。 問題によっては並列化のための前処理、後処理のコストがかかって実質的には逐次計算と大差ないということもありますし、並列化自体が難しい場合もあります。 1回の計算に膨大な時間がかかりそれをどうしても短くしたいというニーズがあれば並列化する意味もあるとは思いますが・・・。 マルチCPUのマシンでC++を使って並列計算をしたいというのであれば皆さんがおっしゃっているようにマルチスレッドを利用するのが一番効率がいいと思われます。もちろんマルチプロセスでも出来ますが前者の方が計算負荷という意味では低コストです。 マルチスレッドを使いこなすのはかなりハードルは高いですが、並列計算という以外にも実用的なソフトウェア開発という意味では必要になってくるテクニックですので学習なさっても損はないと思います。 しかし解析が主で、並列計算に興味があるのでしたらmpich(先のリンクを参照下さい)等も学習する意味があると思います。 VC++でマルチスレッドをというのであればオライリーから「Win32/C++マルチスレッドプログラミング詳解」という本が出ていますし、Unix系でいくのならば同社から「Pthreadsプログラミング」という参考書が出ています。マルチスレッドについての概要を知りたければこれらの本の冒頭部分を立ち読み?なさってみたら如何でしょう。

asamaken
質問者

お礼

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

その他の回答 (5)

回答No.5

パソコンは何の考慮もなく作ったプログラムの何処を並列に処理できるか判断できるほど賢くありません。 1つのプログラムで2CPUの恩恵にあずかろうと思ったら、そのようなプログラムを作る必要があります。 VC++であれば、「スレッド」というキーワードでマニュアルを探してみてください。完全にSDKだけ(Win32APIだけ)でいくならCreateThread、MFCを使うならAfxBeginThread、という関数を使いますからこれらの関数とその関連リンクを調べてみるとよいでしょう。

asamaken
質問者

お礼

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

  • asuca
  • ベストアンサー率47% (11786/24626)
回答No.4

書き忘れましたがコンパイラがパラレル化に対応していても初めからパラレル化に向くプログラミングをすれば効率よく処理を行えます。 ちょっと気をつけるかどうかでものすごく処理時間は変わりますよ。 確かfork文という物を持ったC言語があったはずですがこれを使えば上手くやればきっちり早くなります。 ただパラレル化向きのプログラミングとは?とは聞かないでください。 とてもここでは書き切れませんので書店に行って並列プログラミングの本を買ってください。

  • asuca
  • ベストアンサー率47% (11786/24626)
回答No.3

>CPUが2個ついたWSを買えば、勝手に2個のCPUを使って計算してくれないのですか? それはコンパイラによると思います。 良くできたコンパイラがあって尚かつそのコンパイラのオプション指定でパラレル化オプションが出来るようでしたら可能な限りパラレル化してくれます。 ただ今現在はどうか分かりませんが以前はC言語よりもフォートランの方がパラレル化の率が高かったです。構造化プログラミングされたプログラムは特にパラレル化の率が低かったです。現在はコンパイラが良くなっているかと思いますが。 >マルチCPUに対応したアプリケーションを作らなければ片方のCPUは眠ったままで、 >プログラムをしない人にはマルチCPUっていうのはまったく >意味がないということですよね? いえ、そんなことはありません。プロセスを2本以上同時に動かす場合はOSによってはちゃんとCPUを割り振ってくれますので単独CPUよりは効率的にアプリケーションを動かせますので。

asamaken
質問者

お礼

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

  • seian
  • ベストアンサー率50% (16/32)
回答No.2

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

参考URL:
http://www-unix.mcs.anl.gov/mpi/mpich/
asamaken
質問者

補足

ご回答ありがとうございます。 僕はC言語を使っています。コンパイラはVC++6.0です。 またばかな質問をしますが、申し訳ありません。 CPUが2個ついたWSを買えば、勝手に2個のCPUを使って計算してくれないのですか? マルチCPUに対応したアプリケーションを作らなければ片方のCPUは眠ったままで、プログラムをしない人にはマルチCPUっていうのはまったく 意味がないということですよね?

  • asuca
  • ベストアンサー率47% (11786/24626)
回答No.1

デュアルCPUの場合ソフトウェアでそれように作ってやらなければ2つのCPUを使うことはありません。 そのままは知らせても1つのCPUしか使用しないでしょう。 プログラムの時は静的にメモリをとってもメモリを同時に書き込んだりして不都合が起こらないようにしてやるなど工夫が必要です。 たしかサブルーチンごと別プロセスにしてもう一つのCPUを利用できたはずですが関数名を忘れてしまいました。

関連するQ&A

  • デュアルプロセッサを使うプログラミング方法

    デュアルプロセッサを使うプログラミング方法を調べているのですが、なかなかサンプルプログラムに出会うことができません。 MacOS X 10.4 Dual 2.0GHzで自分の研究プログラムを動かしているのですが、CPUをひとつしか使っていないので非常に非効率的です。実際、今行っている処理は完全に独立な処理をパラメータを変えて何万通りも計算しているので、デュアルプロセッサをうまく使えれば完全に2倍に速くなることが期待できるのです。 どなたかこの件に関して何か情報を下さい。

  • プログラミングとコンピュータについて

    プログラミングとコンピュータについて 大学でプログラミング(C言語)を勉強をしててふと思いました プログラミングでどうやってCPUとかメモリとか、そういったコンピュータの深い部分を操作できるのでしょうか? すみません 抽象的でどう説明したらいいかわかりません 簡単なプログラミングだったらカレンダーとか電卓とか作れますが、これらのプログラムってCPUとかメモリとかOSとかの根本的な部分があればこそ成り立つものですよね 例えばCPUの状態を表示するソフトウェアだったりレジストリを削除するツールだったり、こういうプログラムってプログラムが直接コンピュータの根本的な部分と直結してるってことですよね? つまりハードとソフトの境目がどのような構造なのかよくわからないって感じですかね ソフトを作るのはプログラミングだけどソフトとハードを繋げるのもプログラミング ゲームとかスクリーンセーバーとか電卓とかを作っても、これでどうやってwindowsやLinuxは作れたんだろう?って思ってしまいます C言語や他のプログラミング言語を学んでいけば自ずと理解できるものなんでしょうか? 無知は承知で質問します どうにも不思議で、しかし腹立たしくてむずがゆいです 誰か教えてください、お願いします

  • デュアルCPUのマザーについて

    最近CPUを2つ搭載できるマザーが存在する事をしりました。 http://ascii.jp/elem/000/000/679/679294/ 「Z9PE-D8 WS」はチップセットに「Intel C602」を採用するサーバー/ワークステーション向けのマザーボード。先日発売となったLGA2011対応の「Xeon E5」シリーズが2個まで同時運用可能なデュアルソケット仕様となる。 ↑こいつを普段3Dデザイン等で使う用のマシンに転用する事は出来ないでしょうか? また「Xeon E5」シリーズが2個まで同時運用可能という事ですが、 これは「Xein E5だったらCPUの処理能力を同時に使うことが出来るよ!」 という認識で間違っていませんでしょうか? Xeon E5をwikiで調べたのですが、まだ未発売ということで性能がよく解らない事に加えて、 ソケットが2011ではなくLGA1150ではまらないのでは・・・ i7 Sandy Bridge 3820を2つ搭載し、2個一(CPUの処理能力を合わせる)ことが出来るなら お金はかかりますがこっちでやったほうが処理性能を向上できるのではと思うのです。 http://ja.wikipedia.org/wiki/Xeon#.E3.82.A4.E3.83.B3.E3.83.86.E3.83.AB_Xeon_.E3.83.97.E3.83.AD.E3.82.BB.E3.83.83.E3.82.B5.E3.83.BC_E5.E7.B3.BB_2

  • 物理現象の数値計算に優れた(計算速度の早い)ワークステーションの選択に

    物理現象の数値計算に優れた(計算速度の早い)ワークステーションの選択について,アドバイスをいただけますでしょうか. 私は大学で機械系の研究室に在籍している大学院生です. 50万円の予算で,ワークステーションを購入しようとしています. Linuxを入れようと考えています. 高いグラフィックの性能は全く必要ありません. とにかく計算速度が速いワークステーションを購入したいのですが, ワークステーションを選択する判断材料が私にはありません. そこで以下の三つの質問をさせていただきたいと思います. (1);NECやlenovo,HP等各社ワークステーションを出していますが,お勧めなどございますでしょうか. (2);ワークステーションの購入ではCPU等のオプションを選択するようなんですが,数値計算の処理速度を上げるためには,コンピュータのどの部分の性能を重視する必要があるのでしょうか. (3);購入したワークステーションは複数人で使用する予定なのですが,Linuxでは複数人が同時に平行してコンピュータを利用する事はできるのでしょうか.Windowsの場合,リモートで作業できるのは一人だけですが. 以上宜しくお願いいたします.

  • デュアルCPUで

     最近、CPU負荷とメモリを大量消費するアプリケーションを複数同時に立ち上げる機会が多く、処理速度や反応の悪さが目立ってきたので、XPへ移行しようかと考えています。 (安定性自体は今のところ問題になっていません)  PCは P3・450MHz/ME/512MB/20GB+8GBですが、CPUをもう一つインストールすることが出来るので、XPにすることで処理速度が向上するのではないかと期待していますが、以前WinNT4を使っていたときにデュアルであることの恩恵を受けた覚えがないので、以下の条件でどの程度の違いが『出る/出そう』か教えてください。  出来れば専門家の方の意見が頂けると助かりますが、乗り換え組の方の『こんなに違う』という意見もOKです。 よく同時利用するアプリケーションで、メモリーをほぼ使い切っている。  ジャストホーム2 (ほぼ常駐)  ホームページNinja2002 (95%文字ベースのHP作成)  HYPERKiD (大きくても2MB程度の画像処理)  DVDビデオ再生 <PowerDVD

  • プログラミングを突き詰めて考えると難しい

    プログラミング(C.C++)を勉強しているのですが、プログラムが実行されるまでの流れの”中身”が分かりません。 ■C言語で書いたプログラム ↓ ■コンパイラ ↓ ■マシン語 ↓ ■CPU だと思うのですが中でどのように処理されているかがよく分かりません。 あと、「マシン語によるプログラミングでは、基本的にCPUが直接解釈できるマシンコードと一対一に対応するニーモニックを使用する。この後アセンブラによってニーモニックをマシンコードに変換し、CPUで実行できるようにする。」と書いてるあったのですが、C言語との違いは何なのでしょうか?どちらもマシンコードに変換するのでおなじプログラムだと思うのですが。 色々調べているうちにこれを理解していくにはかなり難しく、マシン語がどのようにCPUで処理されて結果としてでてくるまでの過程など勉強しなければいけない気がするのですが、わかりやすい参考になる本やサイトがれば教えて頂けないでしょうか

  • GPUは、CPUよりも高速で省エネ

     日経コンピュータ1月6日号に、 グラフィック処理専用プロセッサであるGPUは、CPUよりも高速で省エネ、 個人のPC用途からスパコン、そしてモバイル機器まで、 あらゆるコンピュータにGPUは搭載されつつある、 とありました。  「CPUよりも高速で省エネ」とは、どういうことでしょうか? もしそれが本当なら、みんなCPUで計算させるような計算機の設計にすればいいような気がするのですが。

  • プログラミングをマスターすると何ができる?

    大学でfortranの授業があります。とても面白いのでプログラミングを趣味としてはじめたいのですが、プログラミングで何ができるのですか?ゲームを作ったりとかきくけれど、そういうのでなく、日常で役に立つプログラムとか作るんですか? 授業では演習(主に数値計算)を解くのを目標に勉強しますが、趣味で数値計算はあまりやらないでしょう。 また、どの言語がおすすめですか?

  • cpuの性能の違いについて

    インテルcore2 Quad Q 9300と9550では値段にかなりのひらきがありますが、処理能力等の性能に、どれくらいの差異があるものでしょうか?ワークステーションの購入を検討中で、cpuをどちらにするかで悩んでいるところです。御教示頂ければ幸いです。

  • プログラミングって

     商業科の3年なのですが 今まで取った資格でなんとか大学決まりそうなのですが 受けた大学は経営情報学部なんです 普通科と商業科の違いはやはり資格だと思っているので 卒業する前に情報処理の資格も取っておきたいと思っています 将来役立てる為ではなく、大学に入った時のスタートダッシュの段階で差をつけたいだけなので 全商の情報処理1級やってみようと思っているのですが プログラミングをやったことがありません(汗 エクセルの方は今までやってきたのですが   プログラミングってどんなものなのでしょうか エクセルを使った表計算のようなものなのでしょうか?