No.6ベストアンサー
- 回答日時:
折角並列計算をなさろうとしていらっしゃるのに水を差すようですが、解析ソフトを並列化したところで2CPUだから性能が2倍ということはとても望めません。
もちろん、特殊な場合にはそういうこともありますが、もし解析を速く行いたいというのであれば、大抵の場合は幾つかのパラメータで複数回計算させるわけですから2CPUのマシンであれば2つのケースを通常の逐次計算プログラムで同時に計算させた方が実質的な効率はよくなります。
問題によっては並列化のための前処理、後処理のコストがかかって実質的には逐次計算と大差ないということもありますし、並列化自体が難しい場合もあります。
1回の計算に膨大な時間がかかりそれをどうしても短くしたいというニーズがあれば並列化する意味もあるとは思いますが・・・。
マルチCPUのマシンでC++を使って並列計算をしたいというのであれば皆さんがおっしゃっているようにマルチスレッドを利用するのが一番効率がいいと思われます。もちろんマルチプロセスでも出来ますが前者の方が計算負荷という意味では低コストです。
マルチスレッドを使いこなすのはかなりハードルは高いですが、並列計算という以外にも実用的なソフトウェア開発という意味では必要になってくるテクニックですので学習なさっても損はないと思います。
しかし解析が主で、並列計算に興味があるのでしたらmpich(先のリンクを参照下さい)等も学習する意味があると思います。
VC++でマルチスレッドをというのであればオライリーから「Win32/C++マルチスレッドプログラミング詳解」という本が出ていますし、Unix系でいくのならば同社から「Pthreadsプログラミング」という参考書が出ています。マルチスレッドについての概要を知りたければこれらの本の冒頭部分を立ち読み?なさってみたら如何でしょう。
No.5
- 回答日時:
パソコンは何の考慮もなく作ったプログラムの何処を並列に処理できるか判断できるほど賢くありません。
1つのプログラムで2CPUの恩恵にあずかろうと思ったら、そのようなプログラムを作る必要があります。
VC++であれば、「スレッド」というキーワードでマニュアルを探してみてください。完全にSDKだけ(Win32APIだけ)でいくならCreateThread、MFCを使うならAfxBeginThread、という関数を使いますからこれらの関数とその関連リンクを調べてみるとよいでしょう。
No.4
- 回答日時:
書き忘れましたがコンパイラがパラレル化に対応していても初めからパラレル化に向くプログラミングをすれば効率よく処理を行えます。
ちょっと気をつけるかどうかでものすごく処理時間は変わりますよ。
確かfork文という物を持ったC言語があったはずですがこれを使えば上手くやればきっちり早くなります。
ただパラレル化向きのプログラミングとは?とは聞かないでください。
とてもここでは書き切れませんので書店に行って並列プログラミングの本を買ってください。
No.3
- 回答日時:
>CPUが2個ついたWSを買えば、勝手に2個のCPUを使って計算してくれないのですか?
それはコンパイラによると思います。
良くできたコンパイラがあって尚かつそのコンパイラのオプション指定でパラレル化オプションが出来るようでしたら可能な限りパラレル化してくれます。
ただ今現在はどうか分かりませんが以前はC言語よりもフォートランの方がパラレル化の率が高かったです。構造化プログラミングされたプログラムは特にパラレル化の率が低かったです。現在はコンパイラが良くなっているかと思いますが。
>マルチCPUに対応したアプリケーションを作らなければ片方のCPUは眠ったままで、
>プログラムをしない人にはマルチCPUっていうのはまったく
>意味がないということですよね?
いえ、そんなことはありません。プロセスを2本以上同時に動かす場合はOSによってはちゃんとCPUを割り振ってくれますので単独CPUよりは効率的にアプリケーションを動かせますので。
No.2
- 回答日時:
要するに並列計算がしたいということですよね?
それこそ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っていうのはまったく
意味がないということですよね?
No.1
- 回答日時:
デュアルCPUの場合ソフトウェアでそれように作ってやらなければ2つのCPUを使うことはありません。
そのままは知らせても1つのCPUしか使用しないでしょう。
プログラムの時は静的にメモリをとってもメモリを同時に書き込んだりして不都合が起こらないようにしてやるなど工夫が必要です。
たしかサブルーチンごと別プロセスにしてもう一つのCPUを利用できたはずですが関数名を忘れてしまいました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# 1. 仮想CPU「exmini」を使用して,「$dataからn減算する」プログラムを作成してください 2 2022/07/04 17:49
- その他(プログラミング・Web制作) UnityのゲームビューのFPS設定 1 2023/03/10 02:14
- その他(ソフトウェア) F-BASICで計算中の実行が中途で勝手に止まり、大変困っています。 2 2023/03/02 16:15
- CPU・メモリ・マザーボード パソコンについて パソコンcpu Inteli54460 HDDからSSDに交換してから起動直後、ア 7 2023/08/23 10:57
- CPU・メモリ・マザーボード パソコンの性能を引き出すために 4 2022/12/29 17:05
- CPU・メモリ・マザーボード パソコンでCPUとメモリー、優先は? 11 2023/01/11 17:19
- ビデオカード・サウンドカード メイン機とは別に、初自作としてpcを組みました。 pcスペック cpu ryzen5 5500 グラ 1 2023/05/15 12:22
- デスクトップパソコン ゲーミングPCのグラボとCPUを変更したいのですが、 現在1660super×i5-11400の組み 1 2022/11/06 00:54
- CPU・メモリ・マザーボード CPUデュアルチャネルについて。 2 2022/12/17 12:26
- CPU・メモリ・マザーボード パソコン購入でCPUについて(長文ですいません。) 26 2022/04/05 15:26
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBA
-
Webプログラムってネイティブア...
-
世界一美しいソースコード
-
コードプロテクトについて
-
VBAにてTIFFから画像を取込みた...
-
C言語→MATLABへの変換で、困っ...
-
画像がランダムに切り替わるwor...
-
マイコンからプログラムを読み...
-
プルダウメニューの項目をクリ...
-
遺伝的アルゴリズムのプログラ...
-
vba listviewにおけるtextのAli...
-
Arduino nano(アルドゥイーノ ...
-
AD変換ボードでオシロスコープ
-
USBカメラのTWAIN制御について
-
URLの最初の「h」を略す
-
VB6でシリアル通信サンプルソー...
-
C言語で1000までの素数を求める...
-
ubuntuでC++のGUIプログラム
-
c言語についてで、星占いをswit...
-
お掃除ロボットのソースコード
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Webプログラムってネイティブア...
-
vba listviewにおけるtextのAli...
-
初級者の質問――time_tについて
-
VBA
-
COBOLのS9タイプからXタイプへ...
-
指定したフォルダーを最前面表...
-
マイコンからプログラムを読み...
-
2値化した画像の黒い部分のピク...
-
プロダクションコードとは?
-
Arduino nano(アルドゥイーノ ...
-
URLの最初の「h」を略す
-
VBコンソールアプリ(.NET Frame...
-
XPathの関数「text()="value"」...
-
世界一美しいソースコード
-
Excel VBA で、データベースフ...
-
三次元のグラフを書きたいので...
-
Visual Studio .NET C# でDLLを...
-
SH2を使いたいです
-
壁紙の変更
-
gccでスタックオーバーフローの...
おすすめ情報