更改CPU关联会影响其他功能的性能

时间:2013-05-30 20:01:26

标签: c++ c parallel-processing affinity cpu-speed

我在C中有一个代码,它具有以下总体框架:

while (err > tol){
    func_A();
    func_B();
    func_C();
    func_Par();
}

代码正在改变一些全局变量以及它们的连接方式。在func_Par()中,创建了三个线程。所有线程都使用相同的函数,即Threads_Func()。根据线程数,Threads_Func()中使用以下代码来更改每个线程的cpu亲和性:

pthread_t curThread = pthread_self();
cpu_set_t cpuset;
CPU_ZERO(&cpuset);
CPU_SET(thread_number, &cpuset);
pthread_setaffinity_np(curThread, sizeof(cpu_set_t), &cpuset);

这是我无法解释的奇怪行为。我正在衡量func_Afunc_Bfunc_C的cpu时间,以下是结果(所有结果都以微秒为单位):

Threads_Func()中设置CPU亲和力:

func_A: 439197
func_B: 61129
func_C: 400482
func_Par: 2488662

未在Threads_Func()中设置CPU亲和力:

func_A: 226677
func_B: 30922
func_C: 242516
func_Par: 4843463

如您所见,虽然函数按顺序执行,但设置cpu affinity会使其他函数的时间加倍。我试图找出我应该设置CPU亲和力(以在func_Par中获得性能改进),同时避免其他功能中的性能下降。

仅供参考,我正在使用gcc-O0标志编译代码,以确保编译器不会更改任何顺序。此外,我使用的是四核处理器,操作系统是Linux Ubuntu。

感谢任何帮助。 在此先感谢您的帮助。

0 个答案:

没有答案