为什么taskset对fedora没有影响?

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

我正在尝试运行一个高度多线程的应用程序,并希望使用不同的内核(0,1,2,3,4,5,6 ... 12)来测量其性能。我在谷歌搜索时看到了任务集,

taskset 0x00000003 ./my_app

但是当我看到 Fedora 的系统监视器时,它只显示一个核心执行 100%,其他核心仅执行 12%、0% 等。 有什么方法可以告诉进程在某个核心上运行。我还听说过像 -t #no of cores 这样的选项。喜欢

./my_app -t2 

对于 0 和 1 核心..但这也没有效果 我做错了什么任何人都可以引导我走向正确的方向吗?

c++ c multithreading parallel-processing cpu-cores
1个回答
2
投票

taskset 0x00000003 ./my_app
将 my_app 进程的亲和力设置为核心 1 和 2。如果您的应用程序是多线程的,则线程会继承亲和力,但未设置它们在核心 1 和 2 之间的分配。

要设置进程中每个线程的亲和力,您可以在进程运行后使用任务集(即运行 myapp,检查线程 id 并为每个线程调用

taskset -pc <core> <tid>
),或者在线程创建时使用
sched_setaffinity
设置亲和力,
pthread_setaffinity_np
(如果您使用的是 pthread 等)。

无论

./myapp -t2
做什么都是特定于您的应用程序的。

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