- ベストアンサー
マルチコアCPUの動作
私が前に聞いた話なのですが、 マルチコアCPUだとプログラム中の変数に複数のCPUから アクセスがくるから、変数に排他制御が必要で、 その対策にマルチコアCPU対応プログラミングの本を買ったよ、 という話を聞いて、その場は聞き流していたんです。 でも、その話を思い出して気づいたのですが、 もし、そんなことになっていたら排他制御の嵐となり、 現在までに作成されたプログラム達はまともに動かなくなると 思うのです。現に、ググっても、ちっともそんなことは 書かれていません。しかし、実際に複数のCPUが同時に 同じメモリをアクセスすることは、論理的に起こりうるような 気がします。 マルチコアCPUでは、このようなことが起こらないよう CPU側で何らかの制御を行っているのでしょうか。 それとも、本当に排他制御の嵐が必要なんでしょうか??? 追伸:もし、CPU側で何らかの制御を行っているのなら、 その「マルチコアCPU対応プログラミングの本」っていうのは 何なんだろう………???
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
う~ん, その人は「マルチコア」と「マルチスレッド」を混同してるような気がします. っつ~か, その問題は「マルチコア」じゃなくても発生するのに, なんで「マルチコア」だけ気にするんだろ? マルチスレッドでは「複数のスレッドが同時に同じ変数をアクセスする」ことがありえるので排他制御が必要ですが, マルチコアというだけではそんなことはありません. 複数のプロセスがそれぞれ独自のメモリ空間で動くだけなら, ユーザプロセスにおける排他制御は不要です. もちろん OS での排他制御は必要だけど. マルチスレッドでない状況下で「複数の CPU が同時に同じメモリをアクセスする」ことは (OS がわけてくれているはずなので) 普通はありませんが, もしあったとしてもバスアービタがなんとかします. 「マルチコア対応プログラムの本」ってのは「マルチスレッドで動くプログラムを書くための本」のことかなぁ.
その他の回答 (2)
- Wr5
- ベストアンサー率53% (2173/4061)
お礼
本を予測していただいてありがとうございます。 が、その本の実物を見てないんで(汗)、 これなのかどうかは、わからないですね~。 マルチスレッドについて書いてある本なのですね。 もし、本屋で見かけたら見てみようかな。
- dummyplug
- ベストアンサー率58% (134/230)
Tacosanの言われるように、マルチスレッドやマルチプロセスとマルチコア・マルチプロセッサを混同している気がします。 マルチスレッドを例に挙げると、マルチスレッドで実行されるプログラムにおいては各スレッドで共有されるものと(基本的には)分離されているものがあります。C言語で言えば、グローバル変数はスレッド間で共有されますし、ローカル変数はスレッドごとに別の変数になります。 ですから、うかつにグローバル変数だらけのプログラムがあるとすると、それをマルチスレッド化しようとするとあちこちに排他制御をいれないといけなくなります。しかし、きちんと整理されたプログラムであればスレッド間で共有データにアクセスしたり通信するところでだけ排他制御を行えば済みます。 こうした並列実行可能なコードの実装手法は(マルチコアが普及してきた)最近の話ではなくてもう十年単位のずっと昔から為されてきました。ですから、今になって慌てて同期や排他制御の嵐になるなんていうことはありません。現在でも多くのマルチスレッド対応プログラムが存在しています。 複数のCPUやコアが同時に同じアドレスのメモリにアクセスすることはあり得ます。それをCPUが勝手にうまくやってくれるということはありません。 どういう排他制御が必要なのかor必要ないのかをCPUが(コードとして指示されない限り)知り得ないからです。 共有データへのアクセスをコードを書く人が気にしないで済むような処理系もありますが、それはまた別のレイヤの話なので興味があれば調べてみてください。(その内部ではきちんと排他制御されているわけですが。)
お礼
細かく説明して頂いてありがとうございます。 >共有データへのアクセスをコードを書く人が気にしないで >済むような処理系もありますが、 そういった処理系もあるんですね。 データベースとかそういったものでしょうか。 機会があれば、後々のために調べてみたいと思います。
お礼
回答ありがとうございます。 >その人は「マルチコア」と「マルチスレッド」を >混同してるような気がします それで、排他制御が必要という話がでてきたんですかね~。 >OS での排他制御は必要だけど. マルチスレッドでない状況下で >「複数の CPU が同時に同じメモリをアクセスする」ことは > (OS がわけてくれているはずなので) 普通はありませんが, >もしあったとしてもバスアービタがなんとかします. あ~、こういったことも知りたかった点です。 「バスアービタ」について、自分で調べようと思います。