假设我有以下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(或任何其他核心)中运行?
既然你在谈论/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
了解更多详情。
这是特定于操作系统的。正如 Felice 指出的,您可以在 Linux 上通过在程序中调用 sched_setaffinity 来完成此操作。但是,如果您最终在多个平台上运行,则必须为每个平台编写不同的代码。
或者,您可以在从命令行或运行脚本或其他方式“启动”可执行文件时指定关联性。 请参阅 taskset 了解用于执行此操作的 Linux 命令行工具。