如何强制c程序在特定核心上运行

问题描述 投票:0回答:2

假设我有以下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(或任何其他核心)中运行?

c process cpu-cores
2个回答
7
投票

既然你在谈论/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 指出的,您可以在 Linux 上通过在程序中调用 sched_setaffinity 来完成此操作。但是,如果您最终在多个平台上运行,则必须为每个平台编写不同的代码。

或者,您可以在从命令行或运行脚本或其他方式“启动”可执行文件时指定关联性。 请参阅 taskset 了解用于执行此操作的 Linux 命令行工具。

© www.soinside.com 2019 - 2024. All rights reserved.