2012-11-18 53 views
2

這聽起來很瘋狂,但對於我來說是否有接口讓程序員編寫代碼來將核心1上的一個寄存器加載到核心2上的寄存器上,似乎還不清楚。例如,將核心1上的EAX加載到核心2上的EAX上。 它甚至有可能嗎?訪問多核CPU中/ cross核心之間的寄存器

更多關於彙編程序員使用兩個內核(在多個內核上運行代碼)的界面是什麼?

+0

可能重複[什麼是「多核」彙編語言看起來像?](http://stackoverflow.com/questions/980999/what -does-multicore-assembly-language-look-like) –

+2

重複,但快速回答:不,你不能這樣做。 –

回答

1

不。要做到這一點,一個核心必須存儲在內存中的價值,另一個必須把它拿出來。所以核心一個可能是這樣的:

mov eax, [235] 

和Core 2這樣做:

mov [235], eax 
1

硬件不直接提供這個。然而,爲了構建真正的工具(例如調試器),必須存在這樣的一些設施。這通常由系統的核心軟件實現,爲一個CPU「停止」另一個CPU,檢查其寄存器狀態,修改其寄存器狀態,單步修改另一個CPU的存儲器映射等等。這些工具建立在低級硬件原語的基礎之上,它允許一個CPU中斷另一個CPU,並組織代碼,以便CPU中斷使被中斷的CPU使其狀態可供中斷CPU使用。 (這往往是非常棘手的代碼,並非常依賴於硬件)。

Windows通過Win32調用GetThreadContext()提供了這些功能(至少是寄存器訪問部分)。我相信有一個相當於Win64,和類似的Linux等