我正在 C/C++ 上实现一个算法来处理一些 vector ,我认为让它并行可能是个好主意,因为我正在使用多核 CPU。我有一些使用 GPGPU 的经验,错误的内存访问会破坏整个性能,我是否还需要考虑 CPU 内核之间的任何特殊访问布局?
谢谢
最佳答案
使用多处理器设置时,您可能会遇到许多与内存相关的问题,其中一些问题会使应用程序变慢。
你需要大致了解你的盒子上的缓存行大小并尝试两件事:
- 限制单个线程按紧密时间顺序访问的数据缓存行(尤其是您写入的缓存行)的数量。即,避免“弄脏”比您必须的更多的缓存行。
- 避免像瘟疫一样让两个单独的线程“同时”访问同一个数据缓存行,其中一个写入。
(以上两条规则也适用于数据页,如果你处理的是必须分页的大型数据结构。)
在可能的情况下,为每个线程设置单独的工作数据结构(尤其是堆),而不是共享数据。尤其要注意所有线程都更新的公共(public)计数器,并且(显然)避免使用锁和信号量,除非在绝对需要同步线程的关键时刻。
关于c++ - 多线程的内存注意事项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9145767/