Debian 如何利用大量 CPU 核心?

Debian 如何利用大量 CPU 核心?

我剛剛在 24 核 VPS 上獲得了一個帳戶(根據 UnixBench 有 24 個 CPU)。

  1. 一般來說,如何在 Debian 中充分利用所有這些核心進行通用 shell 計算?
  2. 當我從 shell 發出長時間運行的應用程式時,是否需要輸入一些特殊的內容,以使每個進程在單獨的核心(如果可用)上運行?或者 Debian 只負責處理所有這些,而我卻看不見?

答案1

您不需要做任何特殊的事情:核心的工作是決定哪個執行緒運行在哪個 CPU 上,並且它比人類做得更好。

但是,如果沒有至少 24 個並發執行緒運行,那麼擁有 24 個 CPU 就沒有意義。如果有更多的CPU 可用,程式不會神奇地運行得更快:只有編碼為具有多個平行執行緒的程式才會受益,而許多程式不會受益,不是因為它們的編寫方式較差,而是因為它們所做的是本質上是不可並行的。

具有 N 個並發計算執行緒的程式將受益於最多 N 個 CPU(儘管它可能不會快 N 倍,因為執行緒之間的同步需要時間)。運行 M 個不同的程序,如果有的話,不會進行太多交互,同樣會利用 M 個 CPU(如果程序是多線程的,則更多)。

在某些情況下,需要手動幹預才能利用並行性。如果您要啟動多個資料處理任務,請注意它們是並行產生的(每個 CPU 略多於一個任務),而不是一個接一個地產生。例如,在建立軟體時,將-j選項傳遞給make.請參閱其他一些範例和解釋:

如果您正在執行 Web 伺服器,則所有專為重負載設計的 Web 伺服器都擅長利用並行性。在評估 Linux 核心最佳化效能時,使用 Apache 作為測試案例。但請注意,CPU 中的並行性僅在不存在其他瓶頸(例如資料庫存取或輸入輸出頻寬所引起的爭用)的情況下才有幫助。

答案2

利用多個核心來提高效能在很大程度上取決於您的應用程式。有些應用程式需要逐步運行:沒有辦法將計算並行地分配給多個核心,因為要計算某個步驟,需要知道前面步驟的結果。如果是這樣的話,那麼使用 24 個核心就和只使用一個核心一樣好。

在其他情況下,應用程式需要執行許多彼此不依賴的事情,擁有多個核心可以大大加快速度。作為一個相關的範例,如果您正在編譯包含許多原始檔案的項目,則可以在連結不同檔案之前獨立編譯每個原始檔案。在這種情況下,您可以讓編譯器在單獨的核心上編譯每個檔案。可以使用多個 CPU 核心的應用程式通常有一個開關供您請求。例如,當使用 GNU 編譯專案時make,您可以將-j開關傳遞給它,後面跟著數字。此數字指定應同時啟動的作業數量make(即:在不同的核心上)。

相關內容