2012-05-06 67 views
1
for i in `seq 1 8` ; do 
    (./runProgram &) 
done 

親愛的朋友, 我知道如何通過創建8個獨立的流程來創建並行進程,接下來的事情我在尋找的是如何鋼釘使用UNIX系統的並行過程調用

我潤8份同時與處理器釘扎(每個拷貝上是自己的處理器核心)

ⅱ-運行16份同時用處理器釘扎(每個芯2個拷貝)

III-運行8個拷貝同時與處理器釘扎按照「III」和在代碼中的特定函數調用之後,將處理器內核翻轉到最遠的內核。

我的cpu的當前配置是8個核心,它運行着Fedora操作系統。我不提前知道進程id。

請建議。

在此先感謝。

+0

對於CPU關聯性,請嘗試'taskset':[我如何設置Linux上進程的處理器關聯性?](http://unix.stackexchange.com/q/73/376) – miku

+0

我不知道進程ID提前。 – Basmah

+1

你可以使用'taskset'來啓動一個新的進程,你不需要事先知道它的ID。只需使用'$ i'來計算CPU數量,例如爲** **減去1 **:'taskset -c $((i-1))./runProgram& –

回答

1

實現我最簡單的方法和II是使用taskset命令:

案例一:

for i in `seq 0 7`; do 
    taskset -c $i ./runProgram & 
done 

案例二:

for i in `seq 0 7`; do 
    taskset -c $i ./runProgram & 
    taskset -c $i ./runProgram & 
done 

案例三:參見手冊頁爲sched_getaffinity(2)sched_setaffinity(2)如何更改代碼中的固定。