Ser*_*tch 7 c++ optimization x86 multithreading cpu-cache
考虑N线程执行一些具有小结果值的异步任务,如double或int64_t.因此,8结果值可以适合单个CPU缓存行.N等于CPU核心数.
一方面,如果我只是分配一个N项目数组,每个a double或者int64_t,那么8 线程将共享一个CPU缓存行,这似乎效率低下.
另一方面,如果我为每个double/ 分配一个完整的缓存行int64_t,接收器线程将必须获取N缓存行,每个缓存行由不同的CPU核心(1除外)写入.
那么这种情况是否有效的解决方案?CPU是x86-64.C++中的解决方案是首选.
澄清1:线程启动/退出开销不大,因为使用了线程池.所以它主要是关键部分的同步.
澄清2:并行批次具有依赖性.主线程只能在收集并处理上一批次的结果后才能启动下一批并行计算.因为前一批次的结果用作下一批次的一些参数.
如果工作线程的访问/写入次数远远超过向头/主线程报告/读取的结果,则