C NUMA系统上的多程序共享变量
我正在用NUMA系统做一些实验,其中我有一个多线程/2线程的c程序,在它们之间共享一个缓存线(int64)变量。当我在同一个节点上运行两个线程时,与在两个不同的NUMA节点上运行/绑定这些线程相比,程序完成所需的时间要多出近50%。我想应该是相反的,因为它们共享数据,如果在同一个节点上运行,它们应该完成得更快 我是不是遗漏了什么C NUMA系统上的多程序共享变量,c,linux,linux-kernel,pthreads,numa,C,Linux,Linux Kernel,Pthreads,Numa,我正在用NUMA系统做一些实验,其中我有一个多线程/2线程的c程序,在它们之间共享一个缓存线(int64)变量。当我在同一个节点上运行两个线程时,与在两个不同的NUMA节点上运行/绑定这些线程相比,程序完成所需的时间要多出近50%。我想应该是相反的,因为它们共享数据,如果在同一个节点上运行,它们应该完成得更快 我是不是遗漏了什么 pthread_mutex_lock (&shared_mutex); if (thinfo->thread_num == 1) shar
pthread_mutex_lock (&shared_mutex);
if (thinfo->thread_num == 1)
shared_var++;
else
shared_var--;
pthread_mutex_unlock (&shared_mutex);
更新问题中的代码。避免在注释部分中使用,每个NUMA节点有多少个内核?如果只有一个内核,那么CPU资源的争用将很容易解释为什么两个线程的速度会变慢,即使内存资源的争用更少。在这种情况下,让两个线程位于不同的节点上会使程序的CPU带宽增加一倍,即使单个缓存线会大量反弹……我的系统有2个NUMA节点,每个节点有6个内核。