2015-05-06 15 views
1

我有一個簡單的C++代碼,它使用Intel的TBB在使用PBS的集羣上運行腳本列表。我想確認我正在按照預期使用所有內核。每個節點有16個核心。我已經創建了腳本來花費不同的時間,以便如果列表平均分配,我將擁有空閒內核。如果核心變得可用時列表被分開,我應該沒有空閒內核。該代碼似乎在單個節點上正常工作,但對多個節點不起作用。Linux中的給定外殼的echo CPU(核心)名稱/編號

我想要的東西類似於echo $HOSTNAME除了核心。谷歌使我失敗併產生了迴應核心數量或核心使用量的結果。我曾嘗試使用top和監控作業運行,但這並不告訴我哪個核心。

+0

你可以添加一個僞代碼嗎?我不確定我明白你的問題。你是否使用'parallel_for(0,N,[](int i){run_script(i);}'? – Anton

回答

0

由Linux調度程序決定哪個進程在任何給定時刻獲得哪個內核。它根據負載情況每秒多次將這些決策從核心轉移到核心。

你可以得到進程的快照CPU分配與psr選項的ps命令:

ps -o pid,psr,cmd -28832 
    PID PSR CMD 
28832 1 bash 

即這裏bash (pid=28832)被分配給processor id=1的第二個核心。

C代碼您可以使用在linux/getcpu.h中定義的getcpu(2)調用。

要將進程分配給特定的一組內核,您可以運行numactl(8)taskset(1)指定一個cpu關聯掩碼。

+0

我最終通過getcpu方法找到了sched_getcpu。 – Matt