マルチプロセッサプログラミングを語るスレ

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
とりあえず、CPUごとの命令の割り振りの「具体的な」実装方法を教えてください。
2デフォルトの名無しさん:01/11/11 01:11
Linuxのソースとか読むのがよろしかろうと思う
3デフォルトの名無しさん:01/11/11 01:12
割り振る命令とかあんの?
マルチプロセッサ=マルチスレッド?
>>5
なんでやねん
7デフォルトの名無しさん:01/11/11 02:09
>>5
かぶる話題もおおいだろうけど少しちがうような、、
ハードのアーキテクチャ(排他とか割り込みの扱いとか)
もすこし関係するし
>>7
結局1が何を知りたいのかが問題だな。
スレッドレベルで済む話題かもしれんし(w
9デフォルトの名無しさん:01/11/11 02:22
1スレッド1CPUという非常に贅沢な方法もマルチプロセッサ処理になっちゃうのか。
>9
クソスレあ・げ・る・な。
Solarisのソース嫁っていいたいところだけど
ソース公開終わってるじゃん。
12デフォルトの名無しさん:01/11/11 02:53
くそすれあげるな is くそすれ

再帰。
13糞スレだなー。:01/11/11 04:13
>>1
なんじゃそりゃ。
本当にCPUごとに命令を割り振りたいのか?
小一時間自分を問い詰めろ。
>>12
スレとレスの違いわかる?
15デフォルトの名無しさん:01/11/11 07:33
>>13

本当にってなんだよ(藁
161:01/11/11 07:44
スレッドとかプロセスではないんです。
OS毎の実装方法とはではなく、実際にアセンブラレベルでCPUにどういう命令を送れば
この処理はこっちのCPU、この処理はあっちのCPUとか自由に割り振れるのかな。と。
>>16
汗は何なのよ・・・
>>16
全ては2進数だよ、CPUに命令と言うより、CPUその物に
役割を別々にする半導体がある、MMXの場合は音声を
処理する部分も別にある、Pen4になら、画像処理をする領域もある。
詳しい事はネットサーフィンで図付きのを探せ
>>18
ネタだから無視
ハードウェアに依存しすぎていそうな気がするんだけど、
1は何を想定しているの? PC?
211:01/11/11 23:58
あ。すみません。PCです。
PCって何?プログラムカウンタ?
クラスタリング技術を語るスレ?
スーパースケーラのペアリングについて語るスレです。
マルチプロセッサとは関係ありません。
密結合とかも、もちろんあり?
>>16
そんな命令はありません。SMP では、基本的に複数のプロセッサはそれどれ独立して勝手に動いています
から、あるプロセッサに処理を割り振りたければ、そのプロセッサが処理を行うように「仕向ける」必要があり
ます。

今 2CPU からなる SMP システム (CPU をそれぞれ CPU#0, CPU#1 とする) で

- すべてのプロセッサ間で共有されるスレッドキューが、主記憶上のあるアドレスに存在する
- ある特定の割り込みが発生すると、スレッドの切り替え(キューにある最も優先度が高いスレッドに
 処理が移る)が起こる

というプログラムが、各プロセッサで実行されているとしましょう。これで CPU#1 に特定のスレッドを実行さ
せたければ、

1. 自分が CPU#1 であれば、そのスレッドを直接実行
2. 自分が CPU#0 であれば
 - スレッドキューをロックする
 - 目的のスレッドの優先度を最高にする
 - CPU#1 に特定の割り込みをかける CPU#1 は割り込みルーチンに入り、スレッドキューのアンロックを
  待つ
 - CPU#0 がスレッドキューをアンロックする

というようなコードを書いて、走らせておけば良いわけです(実際にはもっと複雑)。

いずれにせよアプリケーションレベルでどうこうできる話ではなく、OS のプロセス管理サブシステムの設
計マターです。x86 固有のマルチプロセッサ制御について知りたければ、Intel の Web サイトから

「インテル・アーキテクチャー・ソフトウェア・デベロッパーズ・マニュアル 下巻」

というタイトルの PDF ファイルを入手して、関連する章(とくに APIC の解説)を読んでください。言うまでも
ないですが、シングルプロセッサ/マルチタスク OS でのプロセス管理サブシステムに関して、十分な知
識があることは前提です。
なんだSMPのスレかよ。
だから、この1は
 mov eax, 0
 mov ebx, 1
の順に命令が並んでいたら、
 eaxに0を入れるのはCPU0が
 ebxに1を入れるのはCPU1が
やってくれると思ってるんだろ。
>>27
面白い話題があるなら SMP 忘れて、そっちで盛り上がっても構わないと思うが。
30デフォルトの名無しさん:01/11/12 15:10
IntelのCPUで8CPUとか16CPUの
SMPマシン組めるって本当?
いくらくらいするの?

あとさ、CPUが自分の番号知るのってどうやるの?
I/Oポートかなんか読むんかな。
311:01/11/12 16:47
>>26
なるほど、分かりやすい説明どうもありがとうございます。疑問氷解。
「インテル・アーキテクチャー・ソフトウェア・デベロッパーズ・マニュアル 下巻」
は持ってるんでけど、殆ど読んでなかったのでちゃんと読んでみたいと思います。

>>28
いや。別にそうは思ってないですが。
>>31
じゃぁ、どう思ってるんだ?
331:01/11/12 20:30
>>32

それがわからないから聞いてるんですよ :-)
>>16のどこが「そうは思ってない」んだ?
>>26
おお、かっこいい。
そうなってるんだ。

自分も今までマルチプロセッサのシステムでの
プロセッサの動作がイメージできなかったけど
>>26で雰囲気つかめました。
命令ごとには分けないな。
ある程度独立した処理の単位ごとに分ける。
37デフォルトの名無しさん:01/11/13 16:36
>>26

イイ!
3826:01/11/13 22:29
>>37
ネタがないなら sage でお願いします。

あとコテハン名乗り忘れたけど 26=名無しさん++ ね。
39a:02/01/07 02:05
WinNT系の場合
スレッド単位でCPUに割り振るなら、SetThreadAffinityMaskを
使えばいいのでは?

HyperThreadingで効果がありそうな気がする
40構文解析776:02/01/07 02:12
HyperThreadingって?

CPU のContextSwitching抑制したり、PipeLineの乱れを抑制すること?
疎結合並列処理で、ノード(プロセッサー)間の通信がほとんどない
場合に、1プロセッサー処理速度のn倍よりも性能が向上してしまう、
という話があって、それをHyperScalarとか呼ぶ

だから、密結合並列処理(SMPによるマルチスレッド)の場合はHyperScalar
4241:02/01/07 02:31
密結合並列処理(SMP)の場合は、
○ HyperThreading
× HyperScalar
43a