- ベストアンサー
デュアルプロセッサを使うプログラミング方法
デュアルプロセッサを使うプログラミング方法を調べているのですが、なかなかサンプルプログラムに出会うことができません。 MacOS X 10.4 Dual 2.0GHzで自分の研究プログラムを動かしているのですが、CPUをひとつしか使っていないので非常に非効率的です。実際、今行っている処理は完全に独立な処理をパラメータを変えて何万通りも計算しているので、デュアルプロセッサをうまく使えれば完全に2倍に速くなることが期待できるのです。 どなたかこの件に関して何か情報を下さい。
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
私もデュアルプロセッサ特有のプログラミングというのは特にないと思います。 特別なCPUなりOSなり使っていれば別かも知れませんが、MacOSだとマルチスレッドなりマルチプロセスなりのプログラミングになるのではないかと。 基本的に#2の方の回答が一番手軽だと思います。 それにマルチスレッドするにしろ、いちばん簡単なのは同様な関数を二つ用意して実行することになるでしょうし。 (マルチスレッドは簡単に言えば並列に動作する関数呼び出しと言っていいかと思います。) 作る上では独立性が高いならプログラムをわけてしまうのがいちばん簡単で安全だろうと思います。特別な知識もいらないですし。 それにプログラムをわけてしまえば、複数のマシンを使うことも可能になるでしょうし。 マルチスレッドはよくわかってないといろいろとトラブルおきやすいですし。 特にシングルプロセッサでは問題が無かったマルチスレッド処理がデュアルだと本当に同時に動くために動かなかったりしますし。まあ、単純な計算だけならあまり問題ないかも知れませんが、慣れてないと手間取る可能性も考えられますますので。
その他の回答 (6)
- rinkun
- ベストアンサー率44% (706/1571)
通常ソフトウェアではデュアルプロセッサという概念を扱うことはないので、そのキーワードで調べても見つからないでしょう。 OSを書く場合はマルチプロセッサ(ソフトウェア的には2個も3個も変わらないのでデュアルだけ特別扱いする理由はない)を、アプリケーションを書く場合はマルチスレッド・プログラミング(あるいはマルチプログラミング)をキーに調べると良いでしょう。 マルチスレッドについては入門書的なものをあったと思いますが、あまり読まないので良いものは知りません。 マルチスレッドを扱う場合はC/C++ではOSに依りますが、UNIX系ではpthreadライブラリを使うので、これを当たるのも良いかと思います。
補足
だんだんクリアになってきました。デュアルプロセッサにこだわり過ぎてました。マルチスレッド・プログラミングをすればいいんですよね。当然の事になぜ気付かなかったのか。そういう意味でスレッドという言葉を最初に出して下さった#2さんありがとうございます。 MacOSに限定した話になりますが、昔々、まだデュアルプロセッサなど手元にない時にCodeWarriorのMacOS用のクラスライブラリであるPowerPlantを使ったマルチスレッドのサンプルコードを山のように見かけて、PowerPlantを使えばむっさ簡単やんと思ったことがありました。その後5年くらいMacOSでのプログラミングをしてなかったので完全に忘れていました。 でも、昔のPowerPlantやCodeWarriorは古いので役立たなくなってしまっているのではと少し不安です。 Carbon用のコードを吐き出すことができるみたいなのですが、Carbonもいろいろとしよう変更しているみたいだし。 Xcode 2.1で動くPowerPlantを使っていない、マルチスレッドの小さなサンプルコード。 Appleのページでもう少し探してみます。 ありがとうございました。
- uyama33
- ベストアンサー率30% (137/450)
Advanced Windows という本にマルチスレッドの 解説とサンプルコードがあります。 読んだけど 作ったわけではないので自信はありません。 本屋で立ち読みしてから買って下さい。
補足
ありがとうございます。 Advanced Windows。参考にしたいと思います。 ただ、私のOSはMacOS X なのでどこまで参考になるかは少し不安ですが、本の紹介ありがとうございました。
- nbd00115
- ベストアンサー率18% (116/632)
>デュアルプロセッサを使うプログラミング方法を調べているのですが、 >なかなかサンプルプログラムに出会うことができません。 当たり前です。 デュアルCPUシステムは、それぞれ特有の命令があるので、 サンプルを出しても、あまり参考にならないからです。 どんなソフトも、使用するシステムに合わせ適性化を 行います。
補足
> 当たり前です。 そうでしょうか、MacOS 10.4のDual CPUを使う参考になるコード。実際プログラミングしている人がいるのだからその人たちが参考にしたものがどこかにあると思って、それを質問しました。昔のInside Macintoshのようなものを探しています。
- rabbit_cat
- ベストアンサー率40% (829/2062)
実際には#2の方のやり方が一番手っ取り早いでしょうが。 研究で使っているということなので、少しだけ情報を。 Fortran90を知ってるなら、 (HPF)High Performance Fortran を覚えるといいです。 けっこうオススメです。
- xcrOSgS2wY
- ベストアンサー率50% (1006/1985)
プログラム自体をデュアルプロセッサに完全対応させるとすれば、プログラム内で複数の並列動作する「スレッド」を作成し、それぞれのスレッドで目的の処理を行うということになろうかと思います。 しかし、質問に書かれていた「何万通りも計算する」という処理の内容が、事前におおよそ2分割できるようであれば、もっと楽に並列化する方法があります。 それは、同じプログラムを2つ実行することです。 例えば、パラメータが1から1,000までの1,000通りあるとします。どのパラメータを与えても計算に要する時間がほぼ同じだとすれば、この1000通りのパラメータを「1から500まで」と「501から1000まで」のように2分割すれば、それぞれの計算時間はほぼ同じということになります。 また、実際の計算を行うプログラムには少々手を加えて、どこからどこまでの範囲のパラメータを使用するか指定できるようにしておきます。計算結果を格納するファイルもそれぞれ別になるように変更します。 そうしておいて、まず「1から500まで」のパラメータ範囲を計算するようにプログラムを起動し、次に、そのプログラムが動作しているあいだに、「501から1,000まで」のパラメータ範囲を計算するようにもう1つプログラムを起動します。 そうすれば、プログラム自体はデュアルプロセッサに対応していなくても、結果として2つのプロセッサを満遍なく使用することができます。
補足
回答ありがとうございます。 ただ、やっぱりひとつのプログラムで実行したいので > それぞれのスレッドで目的の処理を行う というあたりの簡単なプログラムサンプルがあれば欲しいのですが。
- gugux
- ベストアンサー率16% (68/413)
それはオペレーターが意識しないもので、コンパイラが勝手に(自動で)やるものだと昔聞いたことがあります。 今探したら、これがでました。 「デュアルプロセッサ対応 統合Fortran開発環境 デュアルプロセッサ対応 ...」 http://www.hulinks.co.jp/news/ads/data/nk200412.pdf
補足
なるほど、デュアルプロセッサで本当に同時に処理するようになるとはまる事もあるのですね。ありがとうございます。 マルチスレッドプログラミングというキーワードでもう少し勉強してからマルチスレッドに手を出したいと思います。皆様ありがとうございました。 #Fortran90についても面白そうなので検討してみたいと思います。