[解決済み】マルチコアアセンブラとはどのようなものですか?
質問
昔々、x86アセンブラを書く場合、例えば「EDXレジスタに値5をロードする」「EDXレジスタをインクリメントする」等の命令を書いていました。
最近のCPUは4コア(あるいはそれ以上)ありますが、マシンコードレベルでは4つのCPUがあるように見えるのでしょうか(つまり、4つの異なるquot;EDX"レジスタがあるだけでしょうか)。 その場合、「EDXレジスタをインクリメントする」というとき、どのCPUのEDXレジスタがインクリメントされるかは何で決まるのでしょうか?今のx86アセンブラには、quot;CPU context"やquot;thread"という概念はあるのでしょうか?
コア間の通信・同期はどのように行われるのですか?
もしあなたがオペレーティングシステムを書くとしたら、異なるコアでの実行をスケジュールするために、ハードウェアを介してどのようなメカニズムが公開されていますか?それは何か特別な命令なのでしょうか?
マルチコアCPUのための最適化コンパイラ/バイトコードVMを書くとしたら、すべてのコアで効率的に動作するコードを生成するために、例えばx86について特に何を知る必要があるでしょうか?
マルチコア機能をサポートするために、x86のマシンコードにはどのような変更が加えられているのでしょうか?
解決方法は?
これは質問に対する直接的な答えではありませんが、コメントに出てくる質問に対する答えです。 本質的には、ハードウェアがマルチスレッド操作にどのようなサポートを与えるかという質問です。
ニコラス・フリントは正しかった
少なくともx86に関しては。 マルチスレッド環境(ハイパースレッディング、マルチコア、マルチプロセッサー)において
ブートストラップスレッド
(通常、プロセッサ0のコア0のスレッド0)は、アドレス
0xfffffff0
. 他のすべてのスレッドは、次のように呼ばれる特別なスリープ状態で起動します。
SIPI待ち
. 初期化の一環として、プライマリスレッドはSIPI(Startup IPI)と呼ばれるAPIC上の特別なプロセッサ間割り込み(IPI)をWFSにいる各スレッドに送信します。 SIPIには、そのスレッドがコードのフェッチを開始すべきアドレスが含まれています。
この仕組みにより、各スレッドは異なるアドレスからコードを実行することができる。 必要なのは、各スレッドが独自のテーブルとメッセージングキューをセットアップするためのソフトウェアサポートだけです。 OSは それら で、実際のマルチスレッドスケジューリングを行います。
実際のアセンブリに関しては、Nicholasが書いているように、シングルスレッドでもマルチスレッドでも違いはないです。論理的なスレッドはそれぞれ独自のレジスタセットを持つので、書き込みも。
mov edx, 0
が更新されるのは
EDX
に対して
現在実行中のスレッド
. を変更する方法はありません。
EDX
を別のプロセッサで使用する場合、1つのアセンブリ命令を使用します。 ある種のシステムコールを使って、OS が他のスレッドに、自分自身の
EDX
.
関連
-
[解決済み] MIPs Assemblyでsllなどを使ってビットをずらすのはなぜですか?
-
[解決済み] MIPSの大、小、大
-
[解決済み] 着信側セーブレジスタ、発信側セーブレジスタとは何ですか?
-
[解決済み] callq命令とは何ですか?
-
[解決済み] ミップスアセンブリの文字列の長さ
-
[解決済み] アセンブリ - CMP後のJG/JNLE/JL/JNGE
-
[解決済み] BL命令ARM - その仕組み
-
[解決済み] アセンブリで文字列の長さを表示する方法
-
[解決済み] アセンブリの追加要求の明確化
-
[解決済み] Collatz予想の検証を行うC++のコードは、なぜ手書きのアセンブリよりも高速に動作するのでしょうか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] x86アセンブリの「ロック」命令の意味を教えてください。
-
[解決済み] Lc3分割のしくみ
-
[解決済み] WAWハザードとは?
-
[解決済み] アセンブリMIPS。配列の初期化および合計
-
ファイルまたはアセンブリを読み込めませんでした ... 不正なフォーマットでプログラムをロードしようとしました。
-
[解決済み] x86アセンブリでレジスタに使用されるpush/pop命令の機能は何ですか?
-
[解決済み] アセンブルmov命令
-
[解決済み] POSIX」の意味を教えてください。
-
[解決済み】オペレーティングシステムなしでプログラムを実行するには?
-
[解決済み】std::atomicとは一体何ですか?