我使用 R 進行了大量統計分析,並大量使用 AWS 上的大型多核心執行個體。主要用於超參數搜尋、交叉驗證和引導。
假設我有一個帶有核心的實例c
,以及一個帶有副本的作業,這些副本一次r >= c
外包給核心。c
現在,由於系統進程(例如我的 ssh 客戶端正在運行),除了我的複製 htop
之外還有作業正在運行。c
這意味著,據我了解作業系統的工作原理,有一些進程正在關閉我的工作,以便htop
(以及其他任何東西)可以存取處理器。在讓這些不同的過程在陽光下暴露一段時間後,我的工作又恢復了。
當我看時htop
,我看到很多紅色與綠色混合在一起。綠色是我的工作,紅色是為實現我的工作而完成的背景材料,這樣說準確嗎?
直覺上,這種洗牌似乎不是最優的。所以這是我的直接問題:如果我有權訪問c
核心,我是否應該將複製作業分配給所有c
核心,或者也許c-1
什麼?
我還想像有很多關於如何將計算資源分配給我不理解且掩蓋的作業的細節。讓我的所有工作都進入c-1
核心並且所有系統進程都進入核心會涉及什麼cth
?這會讓我的所有 htop 都變成綠色嗎,除了一個欄位之外?這有什麼意義嗎?
我想我可以做基準測試實驗,但這對於巨大的實例和資料集來說會很困難,而且考慮到有多少東西是特定於應用程式的,我不確定我會學到什麼。所以我想更了解事情是如何運作的。
答案1
如果不進行實驗,很難知道對特定應用程式的確切影響,但一般的經驗法則是,稍微超過核心數量是有益的(例如,大多數編譯指南建議使用核心/線程數量 + 呼叫 make ) 1),但由於額外的開銷,大量超過它可能會適得其反。這樣做的原因是,如果一個(或幾個)任務正在休眠等待 I/O 或計時器或其他任務,其他執行緒仍然可以繼續進行。
工作改組(作業系統調度)發生在所有現代作業系統上,我們應該與之合作,而不是對抗。如果似乎存在一些不相關的競爭,您可以降低流程的良好級別,但在專用的 AWS 實例上......很難想像需要這樣做。