如果我有多个线程,每个线程都基于 union 只读数组进行一些计算,如果我为每个数组提供该数组的单独拷贝,会不会更快。例如,假设 X
是一个数组
0 和 1 之间的数字和线程 n 计算 sin(nX)
(entrywise)。我应该为每个线程创建 X
的深层拷贝吗?
当然我可以尝试一下,但我首先必须学习如何实现线程。我希望在 C++ 中执行此操作,以防万一。
最佳答案
一般来说,制作只读数据的每线程拷贝没有任何优势。每个 CPU 都已经在其缓存中保留了自己最近访问的内存拷贝,如果数据是只读的,则缓存永远不需要通过其他 CPU 的写操作而失效。
如果访问据称只读的数据实际上涉及隐藏的写入操作,例如在使用 shared_ptr
时更新引用计数,情况可能会有所不同。
关于c++ - 如果每个线程都有自己的只读数组拷贝,线程会更快吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53992422/