我有一台 2011 年初的四核心 i7 Mac。由於超線程,許多程式報告有 8 個「核心」。如果我要編寫一個並行執行的程序,我可以啟動該程式的 8 個實例還是僅啟動 4 個實例?
我知道我可以啟動任意數量的線程,但是我會看到 4 個或 8 個程式實例並行執行嗎?
答案1
Intel Core i7 處理器有 4 個實體核心,但每個核心一次最多可以輸入 2 個線程,以「可用邏輯 CPU」的形式向作業系統顯示總共 8 個執行緒。
實際上,單一核心一次只能處理一個線程,但它具有特殊的排隊/計時/調度機制,允許 2 個線程同時處於「管道」的不同階段。這使得 CPU 能夠比一次只處理一個執行緒更快完成 2 個執行緒。因為兩個執行緒共享同一個管道,所以效能收益顯然不會是 2 倍。大多數測試將收益固定在 10% 到 50% 之間,具體取決於正在執行的指令類型。
回答你的問題,如果你啟動程式的 4、8 或 16 個實例,它們都將“運行”,但每個實例的指令將根據可用執行緒的數量排隊。一旦超過可用實體核心的數量(例如 5 個或更多),效能就會降低,因為超過 4 個基數的任何執行緒都將共享實體 CPU 核心。
最後,一旦達到可用 CPU 執行緒能力的限制(超過 8 個執行緒),作業系統將開始排程/排隊指令以等待,直到管道中的指令完成。理想情況下,您希望避免遍歷可用線程,因為它可能會對效能產生負面影響並造成系統瓶頸。