我有幾個關於HPC的問題。我有一個帶有串行和並行段的代碼。並行部分在不同的內存塊上工作,並且在某些時候它們可以相互通信。爲此,我在我們的集羣上使用了MPI。 SLURM是資源管理器。以下是集羣中節點的規格。關於HPC上SLURM的問題
規格的節點:
Processor: 2x Intel Xeon E5-2690 (totally 16 cores 32 thread)
Memory : 256 GB 1600MHz ECC
Disk : 2 x 600 GB 2.5" SAS (configured with raid 1)
問題:
1)請在一個節點共享相同的內存(RAM)中的所有核心?如果是,請讓所有內核以相同的速度訪問內存?
2)考慮的情況下:
--nodes = 1
--ntasks-per-node = 1
--cpus-per-task = 16 (all cores on a node)
如果所有內核共享相同的存儲器(取決於答覆問題1)將所有核心被使用或它們中的15因爲OpenMP的休眠狀態(用於共享內存)是不曾用過? 3)如果需要的內存少於一個節點的總內存,使用單個節點不是更好嗎,使用OpenMP來實現核心級並行性,並避免由於節點間通信造成的時間損失?也就是說,使用這種
--nodes = 1
--ntasks-per-core = 1
,而不是這樣的:
的問題--nodes = 16
--ntasks-per-node = 1
其餘都在this鏈接相關的聲明。
如果您的應用程序受CPU限制,則使用核心分配;你可以投入的處理器越多越好!
這個聲明是否意味着--ntasks-per-core
在覈不頻繁訪問RAM時良好?
如果內存訪問是應用程序性能的瓶頸,請使用套接字分配。由於內存中有多少數據可以限制作業的速度,因此在同一內存總線上運行更多任務不會導致加速,因爲所有這些任務都在通向內存的路徑上。
我只是不明白這一點。我知道的是所有插座和插座上的內核共享相同的內存。這就是爲什麼我不明白爲什麼--ntasks-per-socket
選項可用?
如果某些節點範圍的資源是您應用程序的瓶頸,請使用節點分配。在嚴重依賴磁盤訪問或網絡資源的應用程序中就是這種情況。每個節點運行多個任務不會導致加速,因爲所有這些任務都在等待訪問同一個磁盤或網絡管道。
這是否意味着,如果所需內存超過單個節點的總RAM,那麼它最好使用多個節點?