在 OpenMP(我使用的是 C++)中,如果您有一个被多个线程重复读取(而不是写入)的共享(甚至是全局)变量,是否会产生性能成本?我知道如果他们正在写入变量,那将是不正确的。我特别询问有关只读的问题 - 如果多个线程重复读取同一个变量,是否会有潜在的性能成本?
最佳答案
如果您只是阅读,那么就没有安全问题。一切都会好起来的。根据定义,您没有 Race Conditions .你不需要做任何锁定,所以没有 high-contention问题可能发生。您可以使用 Clang ThreadSanitizer 在运行时测试线程安全性.
另一方面,需要注意一些性能问题。尽量避免 false sharing通过让每个线程(或者最好是所有线程)一次访问内存中连续的一堆数据。这样,当 CPU 缓存加载数据时,就不需要每时每刻多次访问内存。与访问 CPU 缓存相比,访问内存被认为是非常昂贵的(至少慢数百倍)。
祝你好运!
关于c++ - 多个 OpenMP 线程读取(不写入)共享变量的性能成本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45536749/