为什么taskset对fedora没有影响?

时间:2013-02-03 03:24:07

标签: c++ c multithreading parallel-processing core

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

taskset 0x00000003 ./my_app

但是当我看到fedora的系统监视器时,它只显示一个核心做100%而其他核心只有12%,0%,等等。 有没有办法告诉进程在某个核心上运行。我还听说过像-t #no of core这样的选项。像

./my_app -t2 

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

1 个答案:

答案 0 :(得分:2)

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

要设置进程中每个线程的亲和性,您可以在进程运行后使用taskset(即运行myapp,检查线程ID并为每个线程调用taskset -pc <core> <tid>)或在线程创建时设置亲和性使用sched_setaffinitypthread_setaffinity_np如果您正在使用pthreads等。)

无论./myapp -t2做什么都是特定于您的申请。