トップページ⇒tech
43コメント10KB

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

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさんNGNG
とりあえず、CPUごとの命令の割り振りの「具体的な」実装方法を教えてください。
0002デフォルトの名無しさんNGNG
Linuxのソースとか読むのがよろしかろうと思う
0003デフォルトの名無しさんNGNG
割り振る命令とかあんの?
0004デフォルトの名無しさんNGNG
既出。
http://pc.2ch.net/test/read.cgi/tech/997345868
0005デフォルトの名無しさんNGNG
マルチプロセッサ=マルチスレッド?
0006デフォルトの名無しさんNGNG
>>5
なんでやねん
0007デフォルトの名無しさんNGNG
>>5
かぶる話題もおおいだろうけど少しちがうような、、
ハードのアーキテクチャ(排他とか割り込みの扱いとか)
もすこし関係するし
0008デフォルトの名無しさんNGNG
>>7
結局1が何を知りたいのかが問題だな。
スレッドレベルで済む話題かもしれんし(w
0009デフォルトの名無しさんNGNG
1スレッド1CPUという非常に贅沢な方法もマルチプロセッサ処理になっちゃうのか。
0010デフォルトの名無しさんNGNG
>9
クソスレあ・げ・る・な。
0011デフォルトの名無しさんNGNG
Solarisのソース嫁っていいたいところだけど
ソース公開終わってるじゃん。
0012デフォルトの名無しさんNGNG
くそすれあげるな is くそすれ

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

本当にってなんだよ(藁
00161NGNG
スレッドとかプロセスではないんです。
OS毎の実装方法とはではなく、実際にアセンブラレベルでCPUにどういう命令を送れば
この処理はこっちのCPU、この処理はあっちのCPUとか自由に割り振れるのかな。と。
0017デフォルトの名無しさんNGNG
>>16
汗は何なのよ・・・
0018デフォルトの名無しさんNGNG
>>16
全ては2進数だよ、CPUに命令と言うより、CPUその物に
役割を別々にする半導体がある、MMXの場合は音声を
処理する部分も別にある、Pen4になら、画像処理をする領域もある。
詳しい事はネットサーフィンで図付きのを探せ
0019デフォルトの名無しさんNGNG
>>18
ネタだから無視
0020デフォルトの名無しさんNGNG
ハードウェアに依存しすぎていそうな気がするんだけど、
1は何を想定しているの? PC?
00211NGNG
あ。すみません。PCです。
0022デフォルトの名無しさんNGNG
PCって何?プログラムカウンタ?
0023デフォルトの名無しさんNGNG
クラスタリング技術を語るスレ?
0024デフォルトの名無しさんNGNG
スーパースケーラのペアリングについて語るスレです。
マルチプロセッサとは関係ありません。
0025デフォルトの名無しさんNGNG
密結合とかも、もちろんあり?
0026デフォルトの名無しさんNGNG
>>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 でのプロセス管理サブシステムに関して、十分な知
識があることは前提です。
0027デフォルトの名無しさんNGNG
なんだSMPのスレかよ。
0028デフォルトの名無しさんNGNG
だから、この1は
 mov eax, 0
 mov ebx, 1
の順に命令が並んでいたら、
 eaxに0を入れるのはCPU0が
 ebxに1を入れるのはCPU1が
やってくれると思ってるんだろ。
0029デフォルトの名無しさんNGNG
>>27
面白い話題があるなら SMP 忘れて、そっちで盛り上がっても構わないと思うが。
0030デフォルトの名無しさんNGNG
IntelのCPUで8CPUとか16CPUの
SMPマシン組めるって本当?
いくらくらいするの?

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

>>28
いや。別にそうは思ってないですが。
0032デフォルトの名無しさんNGNG
>>31
じゃぁ、どう思ってるんだ?
00331NGNG
>>32

それがわからないから聞いてるんですよ :-)
0034デフォルトの名無しさんNGNG
>>16のどこが「そうは思ってない」んだ?
0035デフォルトの名無しさんNGNG
>>26
おお、かっこいい。
そうなってるんだ。

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

イイ!
003826NGNG
>>37
ネタがないなら sage でお願いします。

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

HyperThreadingで効果がありそうな気がする
0040構文解析776NGNG
HyperThreadingって?

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

だから、密結合並列処理(SMPによるマルチスレッド)の場合はHyperScalar
004241NGNG
密結合並列処理(SMP)の場合は、
○ HyperThreading
× HyperScalar
0043aNGNG
ttp://www.intel.com/technology/hyperthread/index.htm
■ このスレッドは過去ログ倉庫に格納されています