0

我正在尝试运行一个高度多线程的应用程序,并希望使用不同的内核(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 核心 .. 但这也没有影响我做错了什么可以请任何人引导我走向正确的方向。

4

1 回答 1

2

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

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

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

于 2013-02-03T07:25:20.020 回答