c++ - 多线程的内存注意事项

标签 c++ multithreading performance memory cpu

我正在 C/C++ 上实现一个算法来处理一些 vector ,我认为让它并行可能是个好主意,因为我正在使用多核 CPU。我有一些使用 GPGPU 的经验,错误的内存访问会破坏整个性能,我是否还需要考虑 CPU 内核之间的任何特殊访问布局?

谢谢

最佳答案

使用多处理器设置时,您可能会遇到许多与内存相关的问题,其中一些问题会使应用程序变慢。

你需要大致了解你的盒子上的缓存行大小并尝试两件事:

  1. 限制单个线程按紧密时间顺序访问的数据缓存行(尤其是您写入的缓存行)的数量。即,避免“弄脏”比您必须的更多的缓存行。
  2. 避免像瘟疫一样让两个单独的线程“同时”访问同一个数据缓存行,其中一个写入。

(以上两条规则也适用于数据页,如果你处理的是必须分页的大型数据结构。)

在可能的情况下,为每个线程设置单独的工作数据结构(尤其是堆),而不是共享数据。尤其要注意所有线程都更新的公共(public)计数器,并且(显然)避免使用锁和信号量,除非在绝对需要同步线程的关键时刻。

关于c++ - 多线程的内存注意事项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9145767/

相关文章:

ios - 为各种函数创建一个数组线程安全 - iOS

python - 清除Python中的线程?

multithreading - 使用多线程时我必须在哪里取消定义队列

python - 如何使用 cdist 或 tensorflow 加速最近点比较?

c# - 向 Canvas 添加许多 UIElement 时如何保持 UI 响应?

c++ - 使用 STL 时出现段错误

c++ - 在结构中的数字常量之前预期的 â,â 或 â...â

c++ - C++ 中堆栈溢出和段错误的危险

c++ - 以编程方式使 QToolButton 与 Qt Designer 中的相同

javascript - 提高 Highcharts 折线图的性能