我在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_A
,func_B
和func_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。
感谢任何帮助。 在此先感谢您的帮助。