2011-11-30 21 views
5

說我有下面的C程序運行:如何強制交流計劃,在一個特定的核心

#include <stdio.h> 

int main() 
{ 
    printf("Hello world \n"); 
    getchar(); 

    return 0; 
} 

gcc 1.c -o helloworld 

,並說我有一個雙核的機器:

cat /proc/cpuinfo | grep processor | wc -l 

現在的問題是,當我們執行程序時,我們該如何強制這個程序運行在core-0(或任何其他特定的核心)?

如何以編程方式執行此操作?例子,api的,代碼引用會有幫助。

如果沒有可用的api,那麼是否有任何編譯時間,鏈接時間,加載時間這樣做的方式?

OTOH,如何檢查程序是運行在core-0還是core-1(或任何其他內核)?

+1

這不在C的範圍內。您必須檢查操作系統的文檔以查看操作系統是否暴露了這樣的功能。 –

+1

在Linux下,您可以使用taskset設置親緣關係,我也同意Kerrek認爲這更像是一個操作系統問題 –

+0

雖然之後您可以使用taskset設置啓動的進程的核心關聯,但他明確要求api以及如何執行它以編程方式 – hirschhornsalz

回答

5

由於您在談論/ proc/cpu,我假設您使用的是linux。在linux中,你可以使用sched_setaffinity函數。在您的例子中,你會打電話

cpu_set_t set; 
CPU_ZERO(&set);  // clear cpu mask 
CPU_SET(0, &set);  // set cpu 0 
sched_setaffinity(0, sizeof(cpu_set_t), &set); // 0 is the calling process 

查找man sched_setaffinity瞭解更多詳情。

3

這是操作系統特定的。正如Felice指出的那樣,你可以在你的程序中調用sched_setaffinity來在Linux上完成。如果你最終在多個平臺上運行,你必須爲每個平臺編寫不同的代碼。

或者,您可以在啓動您的可執行文件時從命令行或運行腳本或其他文件中指定關聯。 請參閱taskset以獲取Linux命令行工具。