簡體   English   中英

如何在Linux中為AC程序分配更多的CPU和RAM

[英]how to allocate more cpu and RAM to a c program in linux

我正在運行一個簡單的C程序,該程序執行大量計算(CFD),因此需要大量時間才能運行。 但是我仍然有很多未使用的CPU和RAM。 那么我將如何分配我的一些處理能力給一個程序呢?

在需要進行計算時,Linux不會使程序等待,並且不會占用CPU。 您有一個多核CPU和一個單線程正在運行(如@Pankrates所建議),或者您正在阻塞某些I / O。

我猜想CFD意味着計算流體動力學(但是CFD還有很多其他含義,所以我可能猜錯了)。

您絕對應該首先配置您的代碼。 至少要使用gcc -Wall -pg -O編譯,並學習如何使用gprof 您可能還使用strace來查找由代碼完成的系統調用。

我不是CFD專家(即使在上個世紀我曾與CFD專家合作)。 但是這樣的代碼使用了大量的有限元分析和其他向量計算。

如果您正在編寫代碼,則可能考慮使用OpenMP (因此,通過在源代碼中仔細添加OpenMP編譯指示 ,可以加快速度),甚至可以考慮通過對在GPU上運行的OpenCL內核進行編碼來使用GPGPU。

您還可以了解有關pthreads編程的更多信息,並更改代碼以使用線程。

如果您正在使用重要的數值庫(例如BLAS),則它們會有很多調整,甚至是專門的變體(例如,多核,OpenMP-ed,甚至在OpenCL中)。

在所有情況下,並行化代碼都是很多工作。 如果可能的話,您將花費數周或數月的時間對其進行改進。

您可以使用負增量來改善該過程,但是您需要為此超級用戶。 看到

man nice

這將增加進程的調度優先級。 如果它正在與其他進程爭用CPU時間,它將獲得更多的CPU時間,因此“運行得更快”。

至於增加程序使用的RAM數量:您需要重寫或重新配置程序以使用更多的RAM。 考慮到問題中可用的信息,很難說更多。

要一次使用多個CPU,您要么需要運行程序的多個副本,要么需要在程序中運行多個線程。 兩者都不是很難開始的。

但是,並行編寫“我有10000個大數,我想為它們中的每一個查找素數”要容易得多,而不是“大量A = A + B”並行鍵入計算-因為在進行下一步之前需要新的A。 就我所知,CFD計算傾向於使用后者,但是要使用大型數組。 您可以將大型矢量計算拆分為一組較小的矢量計算[例如,我們有1000 x 1000的矩陣,可以將其拆分為4組250 x 1000矩陣,或4組500 x 500矩陣,並且在自己的線程中執行每個操作]。

如果這是您自己的代碼,那么您希望知道它的作用和工作方式。 如果是別人的代碼,那么您需要與擁有該代碼的人交談。

沒有一種神奇的方式來“自動利用更多的CPU”。 四核處理器上30%的CPU使用率可能意味着您的系統基本上是在使用一個內核,而系統中發生的其他事情的開銷則在5%左右-或者您的應用程序中的某個地方使用了第二個線程一點點CPU做任何事情。 或應用程序是多線程的,但沒有完全使用多個內核,因為線程之間在某些共享資源上存在爭用……對於我們來說,這三種[或其他幾種選擇]中的哪一個是不可能的。

除非您有一些有用的東西可以放入內存,否則請求更多的RAM不會有幫助。 如果有可用內存,則您的應用程序將獲得所需的內存。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM