多线程内存访问是否比单线程内存访问更快?
假设我们使用的是C语言.一个简单的例子如下.如果我有一个巨大的数组A,我想将A复制到与B大小相同的数组B.使用多线程比单线程更快地进行内存复制吗?有多少线程适合进行这种内存操作?
编辑:
让我把问题缩小一点.首先,我们不考虑GPU案例.当我们进行GPU编程时,内存访问优化非常重要和有效.根据我的经验,我们总是需要小心内存操作.另一方面,当我们处理CPU时并非总是如此.另外,我们不要考虑SIMD指令,例如avx和sse.当程序具有太多的内存访问操作而不是大量的计算操作时,这些也将显示内存性能问题.假设我们使用1-2个CPU来运行x86架构.每个CPU都有多个内核和一个四通道内存接口.主内存是DDR4,因为它在今天很常见.
我的数组是一个双精度浮点数的数组,其大小类似于CPU的L3缓存大小,大约为50MB.现在,我有两种情况:1)通过执行逐元素复制或使用memcpy将此数组复制到具有相同大小的另一个数组. 2)将许多小阵列组合成这个巨大的阵列.两者都是实时操作,这意味着它们需要尽可能快地完成.多线程是否提供加速或下拉?在这种情况下影响内存操作性能的因素是什么?
有人说它主要依赖于DMA性能.我想是在我们做memcpy的时候.如果我们进行逐元素复制,首先会通过CPU缓存怎么办?