相关疑难解决方法(0)

如何在Linux中为C或C++中的进程设置CPU关联?

是否有一种编程方法可以为Linux操作系统在c/c ++中为进程设置CPU亲和性.

c linux smp affinity

34
推荐指数
4
解决办法
3万
查看次数

sched_setaffinity()如何工作?

我试图了解linux系统调用sched_setaffinity()的工作原理.这是我在这里提出的问题的后续内容.

我有这个指南,它解释了如何使用系统调用,并有一个非常整洁(工作!)的例子.

所以我下载了Linux 2.6.27.19 内核源代码.

我对包含该系统调用的行进行了'grep',得到了91个结果.没有前途.

最后,我试图了解内核如何为特定内核(或处理器)设置指令指针.

我熟悉单核单线程程序的工作原理.有人可能发出'jmp foo'指令,这基本上将IP设置为'foo'标签的内存地址.但是当一个有多个内核时,必须说"在内存地址foo处获取下一条指令,并设置内核编号2的指令指针以便在那里开始执行."

在汇编代码中,我们指定哪个核心执行该操作?

回到内核代码:这里重要的是什么?文件'kernel/sched.c'有一个名为sched_setaffinity()的函数,但返回类型为"long" - 这与其手册页不一致.那么重要的是什么?这些模块中的哪一个显示了组装说明?什么模块正在读取'task_struct',查看'cpus_allowed'成员,然后将其转换为指令?(我还翻阅了glibc源代码 - 但我认为它只是调用内核代码来完成这项任务.)

c linux kernel multicore system-calls

12
推荐指数
1
解决办法
1万
查看次数

多核系统上的C++多线程

在四核CPU上运行以下代码时,我保证这四个线程将在四个不同的内核上运行吗?

或者操作系统可以根据系统的工作负载在单个核心上放置多个线程.如果是这种情况,由于上下文切换和其他线程开销,运行多线程甚至可能会给您带来性能损失.

我想没有办法对应用程序进行编码,这会强制线程在不同的内核上运行?

int main()
{
    std::vector<std::thread> threads(3);

    for (size_t i = 0; i < 3; i++)
    {
        threads[i] = std::thread(DoSomethingLengthy);
    }

    DoSomethingLengthy();

    for (auto& thread : threads)
    { 
        thread.join(); 
    }
}
Run Code Online (Sandbox Code Playgroud)

c++ multithreading

1
推荐指数
1
解决办法
1045
查看次数

标签 统计

c ×2

linux ×2

affinity ×1

c++ ×1

kernel ×1

multicore ×1

multithreading ×1

smp ×1

system-calls ×1