我正在尝试运行高度多线程的应用程序,并希望使用不同的内核(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核心..但这也没有效果 我做错了什么,任何人都可以引导我走向正确的方向。
答案 0 :(得分:2)
taskset 0x00000003 ./my_app
设置my_app进程与核心1和2的关联。如果您的应用程序是多线程的,则线程会继承关联,但不会设置它们在核心1和2之间的分配。
要设置进程中每个线程的亲和性,您可以在进程运行后使用taskset(即运行myapp,检查线程ID并为每个线程调用taskset -pc <core> <tid>
)或在线程创建时设置亲和性使用sched_setaffinity
,pthread_setaffinity_np
如果您正在使用pthreads等。)
无论./myapp -t2
做什么都是特定于您的申请。