2011-11-30 35 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命令行工具。

相关问题