• ベストアンサー

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

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

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

  • ベストアンサー
  • terra5
  • ベストアンサー率34% (574/1662)
回答No.7

私もデュアルプロセッサ特有のプログラミングというのは特にないと思います。 特別なCPUなりOSなり使っていれば別かも知れませんが、MacOSだとマルチスレッドなりマルチプロセスなりのプログラミングになるのではないかと。 基本的に#2の方の回答が一番手軽だと思います。 それにマルチスレッドするにしろ、いちばん簡単なのは同様な関数を二つ用意して実行することになるでしょうし。 (マルチスレッドは簡単に言えば並列に動作する関数呼び出しと言っていいかと思います。) 作る上では独立性が高いならプログラムをわけてしまうのがいちばん簡単で安全だろうと思います。特別な知識もいらないですし。 それにプログラムをわけてしまえば、複数のマシンを使うことも可能になるでしょうし。 マルチスレッドはよくわかってないといろいろとトラブルおきやすいですし。 特にシングルプロセッサでは問題が無かったマルチスレッド処理がデュアルだと本当に同時に動くために動かなかったりしますし。まあ、単純な計算だけならあまり問題ないかも知れませんが、慣れてないと手間取る可能性も考えられますますので。

shinya_ohtani
質問者

補足

なるほど、デュアルプロセッサで本当に同時に処理するようになるとはまる事もあるのですね。ありがとうございます。 マルチスレッドプログラミングというキーワードでもう少し勉強してからマルチスレッドに手を出したいと思います。皆様ありがとうございました。 #Fortran90についても面白そうなので検討してみたいと思います。

その他の回答 (6)

  • rinkun
  • ベストアンサー率44% (706/1571)
回答No.6

通常ソフトウェアではデュアルプロセッサという概念を扱うことはないので、そのキーワードで調べても見つからないでしょう。 OSを書く場合はマルチプロセッサ(ソフトウェア的には2個も3個も変わらないのでデュアルだけ特別扱いする理由はない)を、アプリケーションを書く場合はマルチスレッド・プログラミング(あるいはマルチプログラミング)をキーに調べると良いでしょう。 マルチスレッドについては入門書的なものをあったと思いますが、あまり読まないので良いものは知りません。 マルチスレッドを扱う場合はC/C++ではOSに依りますが、UNIX系ではpthreadライブラリを使うので、これを当たるのも良いかと思います。

shinya_ohtani
質問者

補足

だんだんクリアになってきました。デュアルプロセッサにこだわり過ぎてました。マルチスレッド・プログラミングをすればいいんですよね。当然の事になぜ気付かなかったのか。そういう意味でスレッドという言葉を最初に出して下さった#2さんありがとうございます。 MacOSに限定した話になりますが、昔々、まだデュアルプロセッサなど手元にない時にCodeWarriorのMacOS用のクラスライブラリであるPowerPlantを使ったマルチスレッドのサンプルコードを山のように見かけて、PowerPlantを使えばむっさ簡単やんと思ったことがありました。その後5年くらいMacOSでのプログラミングをしてなかったので完全に忘れていました。 でも、昔のPowerPlantやCodeWarriorは古いので役立たなくなってしまっているのではと少し不安です。 Carbon用のコードを吐き出すことができるみたいなのですが、Carbonもいろいろとしよう変更しているみたいだし。 Xcode 2.1で動くPowerPlantを使っていない、マルチスレッドの小さなサンプルコード。 Appleのページでもう少し探してみます。 ありがとうございました。

  • uyama33
  • ベストアンサー率30% (137/450)
回答No.5

Advanced Windows という本にマルチスレッドの 解説とサンプルコードがあります。  読んだけど 作ったわけではないので自信はありません。  本屋で立ち読みしてから買って下さい。

shinya_ohtani
質問者

補足

ありがとうございます。 Advanced Windows。参考にしたいと思います。 ただ、私のOSはMacOS X なのでどこまで参考になるかは少し不安ですが、本の紹介ありがとうございました。

  • nbd00115
  • ベストアンサー率18% (116/632)
回答No.4

>デュアルプロセッサを使うプログラミング方法を調べているのですが、 >なかなかサンプルプログラムに出会うことができません。 当たり前です。 デュアルCPUシステムは、それぞれ特有の命令があるので、 サンプルを出しても、あまり参考にならないからです。 どんなソフトも、使用するシステムに合わせ適性化を 行います。

shinya_ohtani
質問者

補足

> 当たり前です。 そうでしょうか、MacOS 10.4のDual CPUを使う参考になるコード。実際プログラミングしている人がいるのだからその人たちが参考にしたものがどこかにあると思って、それを質問しました。昔のInside Macintoshのようなものを探しています。

  • rabbit_cat
  • ベストアンサー率40% (829/2062)
回答No.3

実際には#2の方のやり方が一番手っ取り早いでしょうが。 研究で使っているということなので、少しだけ情報を。 Fortran90を知ってるなら、 (HPF)High Performance Fortran を覚えるといいです。 けっこうオススメです。

  • xcrOSgS2wY
  • ベストアンサー率50% (1006/1985)
回答No.2

プログラム自体をデュアルプロセッサに完全対応させるとすれば、プログラム内で複数の並列動作する「スレッド」を作成し、それぞれのスレッドで目的の処理を行うということになろうかと思います。 しかし、質問に書かれていた「何万通りも計算する」という処理の内容が、事前におおよそ2分割できるようであれば、もっと楽に並列化する方法があります。 それは、同じプログラムを2つ実行することです。 例えば、パラメータが1から1,000までの1,000通りあるとします。どのパラメータを与えても計算に要する時間がほぼ同じだとすれば、この1000通りのパラメータを「1から500まで」と「501から1000まで」のように2分割すれば、それぞれの計算時間はほぼ同じということになります。 また、実際の計算を行うプログラムには少々手を加えて、どこからどこまでの範囲のパラメータを使用するか指定できるようにしておきます。計算結果を格納するファイルもそれぞれ別になるように変更します。 そうしておいて、まず「1から500まで」のパラメータ範囲を計算するようにプログラムを起動し、次に、そのプログラムが動作しているあいだに、「501から1,000まで」のパラメータ範囲を計算するようにもう1つプログラムを起動します。 そうすれば、プログラム自体はデュアルプロセッサに対応していなくても、結果として2つのプロセッサを満遍なく使用することができます。

shinya_ohtani
質問者

補足

回答ありがとうございます。 ただ、やっぱりひとつのプログラムで実行したいので > それぞれのスレッドで目的の処理を行う というあたりの簡単なプログラムサンプルがあれば欲しいのですが。

  • gugux
  • ベストアンサー率16% (68/413)
回答No.1

それはオペレーターが意識しないもので、コンパイラが勝手に(自動で)やるものだと昔聞いたことがあります。 今探したら、これがでました。 「デュアルプロセッサ対応 統合Fortran開発環境 デュアルプロセッサ対応 ...」 http://www.hulinks.co.jp/news/ads/data/nk200412.pdf

関連するQ&A

  • デュアルプロセッサについて

    私はデュアルプロセッサに対応しているノートパソコンをかったのですが 512MBのCPUひとつしか付属していません あまりパソコンの中身について詳しくないのですが。 調べたところデュアルプロセッサは同じ要領のCPUを二つ付属させるのが普通なそうです。 増設するCPUについて調べたところ現在2GBのメモリ、1GBのメモリも売っているんです。 価格的にも2GBのメモリを買って増設を考えているのですが 512MBのメモリ、2GBのメモリでデュアルプロセッサを機能させると処理速度はどうなるでしょうか?やはり2つのメモリの要領に違いがあると問題があるでしょうか? 教えてください。 ------- あと答えれたらこれもお願いします 1GB*2、または2GB+512MB どちらのほうが処理が早いでしょうか?

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

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

  • デュアルプロセッサって…

    CPUが2つついているデュアルプロセッサのパソコンの利点は、 どんなことがありますか? スピード? 処理能力? メモリ、HDDに負担かけない? アプリが対応しないってことはない?

  • プロセッサーとは上げる事が可能でしょうか?

    プロセッサー: Dual Core CPU 2.0GHz以上まで上げたいのですが、うちのPCWindowsvista EK30Xは現在1.600GHzしかありません。 プロセッサーとはPCに取り込んだ音楽や写真など削除していけば数値が上げれるものですか?? 宜しくお願いします。

  • デュアルプロセッサの処理速度を教えて下さい(CAD)

    仕事で3次元CAD(正確に言えば3次元CADCAM)を使っているのですが、デュアルプロセッサはシングルプロセッサと比べて、どの位高速化するのでしょうか(CPUとメモリー等が同条件の場合)。数ヶ月後にシステムをバージョンアップするので、参考にしたいと思い質問させて頂きました。 OSはWINXP/PRO、CADソフトはデュアルプロセッサ対応です。処理はグラフィック処理より内部演算処理が多いです。このような環境での大体の目安を教えて下さい。

  • プロセッサ(CPU)購入の件

    プロセッサ(CPU)購入の件 現在 使用しているCPUはAMD Athlon(tm)64×2 Dual Core Processor 5600+ 2.90GHzですが 非常に処理が遅いので、グレイドアップしたCPUを購入したいのですがパソコンショップ(パソコン工房) 等に行ったが、型式が古いため販売してなかった、ほかに購入方法はないでしょうか?

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

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

  • c++のプログラミングにて

    青い背景にボールが映っている画像があります HSB値に対する閾値処理を行いボールだけを抽出したいのですが プログラミング素人の自分には全くわかりません サンプルプログラムやヒントなどをどうかお願いします

  • xbox360とPS3のCPUついて

    xbox360とPS3のCPU,(xbox360は3デュアルプロセッサ 3.2GHz(それぞれの速さが3.2Ghz)とPS3はPower型のCPUコアが1つ,それにSPEと呼ぶ信号処理プロセサ用のコアが8つ,合計9個のマルチコア構造)は、どちらのほうがゲーム機のCPUとして優秀なんですか?

  • 「2個のコア、4個のロジカル プロセッサ」の意味

    いつもお世話になります。 CPU,MPUに詳しい方回答をお願いします。 私は、最近の(M)CPUは勉強していませんが、8ビットマイコンの勉強は遠い昔勉強しました。 今更なのですが、Windows8で「msinfo32」を実行すると私のノートPCは 【Core i3-3120M CPU ` 2.5GHz、2個のコア、4個のロジカル プロセッサ】 とあります。 一方、Core i3-3120M CPUのスペックは以下です。 Intel® CoreTM i3-3120M Processor (3M Cache, 2.50 GHz) ↓↓ http://ark.intel.com/ja/products/71465/Intel-Core-i3-3120M-Processor-3M-Cache-2_50-GHz 【質問1】ロジカルプロセッサとはスレッド数のことを言っているのでしょうか? それとも違う意味でしょうか? 【質問2】マルチスレッドの場合、1クロックでそのスレッド数、私のPCの場合、最大で四つの機械語の命令を同時処理(処理に取り掛かっている)している。 という認識でいいのでしょうか? それとも、コアが二つなので二つの機械語命令が処理中で1クロックで二つの命令にしか対応していないのでしょうか?こちらだと思うのですが… 勿論、スレッドなので常にフルで稼働しているとは限らず、別のスレッド待ち時間などあるとは思います。 専門用語などWebで調べがつく範囲は使用した回答で構いません。 ロジカルプロセッサという言葉の検索でWeb上であまりいい処にヒットせず、調べがつきませんでした。 専門的な知識がほしいので、なるべく、専門家の方、あるいはCPUに詳しい方に専門的なご回答をお願いします。

専門家に質問してみよう