使用多核是否需要pthread_setaffinity_np? 我在一个运行Android 4.1.2的双核ARM7上运行了一个多线程的C++应用程序(ForeSoFT.org的Table生成器''霍夫曼),它带有一个Linux 3.0.8内核。编译是使用linuxonandroid在Ubuntu12.04上使用GCC4.6.3进行的

使用多核是否需要pthread_setaffinity_np? 我在一个运行Android 4.1.2的双核ARM7上运行了一个多线程的C++应用程序(ForeSoFT.org的Table生成器''霍夫曼),它带有一个Linux 3.0.8内核。编译是使用linuxonandroid在Ubuntu12.04上使用GCC4.6.3进行的,android,linux,multithreading,c++11,pthreads,Android,Linux,Multithreading,C++11,Pthreads,我一直在尝试使用pthread_setaffinity_np()将不同的线程强制到不同的内核上。我不想这么做,但似乎我必须这么做 在一个小时的过程中,我使用不同的东西组合,测量了双线程基准测试的以下运行时间: 使用pthread_setaffinity_np():10.818、10.803、10.814、11.077、11.013、10.952秒 没有pthread_setaffinity_np():20.366,19.263,19.539,16.764,19.365,19.661,19.330

我一直在尝试使用pthread_setaffinity_np()将不同的线程强制到不同的内核上。我不想这么做,但似乎我必须这么做

在一个小时的过程中,我使用不同的东西组合,测量了双线程基准测试的以下运行时间:

使用pthread_setaffinity_np():10.818、10.803、10.814、11.077、11.013、10.952秒

没有pthread_setaffinity_np():20.366,19.263,19.539,16.764,19.365,19.661,19.330秒

似乎非标准的GNU pthread_setaffinity_np()是让我的C++11程序实际将其线程放到不同内核上所必需的。”top'确认我的两个内核中有一个处于空闲状态,否则


是这样吗?有人能提供更好的解决方案吗?

可能相关:afaik:所有在一个内核上运行的都意味着他们有一个默认的afinity掩码,只允许一个内核,这听起来很奇怪。由于NUMA限制,在多个内核上运行公共数据集会降低吞吐量。如果每个线程的内存数据集在很大程度上是唯一的,那么pthread_setaffinity_np将按照您想象的方式工作。线程在多个内核上旋转,所有线程都在同一个物理相邻内存(如同一页)的块上工作,可能根本不能很好地执行。@zapl:我检查了默认的关联掩码。它是'3',因此两个核心都已启用。