我在运行Android 4.1.2和Linux 3.0.8内核的双核ARM7上运行多线程C ++应用程序(freesoft.org的tablebase生成器'hoffman')。使用linuxonandroid在Ubuntu 12.04上使用gcc 4.6.3进行编译。
我一直在尝试使用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程序实际将其线程放到不同的核心上。 “顶部”确认我的两个核心中的一个正处于空闲状态。
这是对的吗?任何人都可以提供更好的解决方案吗?