c++ - 多个 OpenMP 线程读取(不写入)共享变量的性能成本?

标签 c++ multithreading performance openmp

在 OpenMP(我使用的是 C++)中,如果您有一个被多个线程重复读取(而不是写入)的共享(甚至是全局)变量,是否会产生性能成本?我知道如果他们正在写入变量,那将是不正确的。我特别询问有关只读的问题 - 如果多个线程重复读取同一个变量,是否会有潜在的性能成本?

最佳答案

如果您只是阅读,那么就没有安全问题。一切都会好起来的。根据定义,您没有 Race Conditions .你不需要做任何锁定,所以没有 high-contention问题可能发生。您可以使用 Clang ThreadSanitizer 在运行时测试线程安全性.

另一方面,需要注意一些性能问题。尽量避免 false sharing通过让每个线程(或者最好是所有线程)一次访问内存中连续的一堆数据。这样,当 CPU 缓存加载数据时,就不需要每时每刻多次访问内存。与访问 CPU 缓存相比,访问内存被认为是非常昂贵的(至少慢数百倍)。

祝你好运!

关于c++ - 多个 OpenMP 线程读取(不写入)共享变量的性能成本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45536749/

相关文章:

multithreading - 超时后如何正确取消 LoadAsync

python - threading.Timer 是否在单独的线程中打开函数?

performance - 使用加特林将条件放入 HTTP 请求中

c++ - gcc(v4.1.2 cross-compiler)整数提升问题

c++ - 构造函数?或者是其他东西?

c++ - 我不小心调用了一个没有自己的类对象的成员函数。但这是如何工作的?

java - Akka actor 被另一个运行 CPU 密集型作业的 actor 阻止

python - 在 Python 脚本中的 Windows 中的 C++ 命令行编译

c# - 用于 .NET 的快速且内存高效的 ASCII 字符串类

performance - 如何测试应用程序的启动时间或性能