use*_*630 8 c memory multithreading
多线程内存访问是否比单线程内存访问更快?
假设我们使用的是C语言.一个简单的例子如下.如果我有一个巨大的数组A
,我想复制A
到B
相同大小的数组A
.使用多线程比单线程更快地进行内存复制吗?有多少线程适合进行这种内存操作?
编辑:让我把问题缩小.首先,我们不考虑GPU案例.当我们进行GPU编程时,内存访问优化非常重要和有效.根据我的经验,我们总是需要小心内存操作.另一方面,当我们处理CPU时并非总是如此.另外,我们不要考虑SIMD指令,例如avx和sse.当程序具有太多的内存访问操作而不是大量的计算操作时,这些也将显示内存性能问题.假设我们使用1-2个CPU来运行x86架构.每个CPU都有多个内核和一个四通道内存接口.主内存是DDR4,因为它在今天很常见.
我的数组是一个双精度浮点数的数组,其大小类似于CPU的L3缓存大小,大约为50MB.现在,我有两种情况:1)通过执行元素副本或使用memcpy将此数组复制到具有相同大小的另一个数组.2)将许多小阵列组合成这个巨大的阵列.两者都是实时操作,这意味着它们需要尽可能快地完成.多线程是否提供加速或下拉?在这种情况下影响内存操作性能的因素是什么?
有人说它主要依赖于DMA性能.我想是在我们做memcpy的时候.如果我们进行逐元素复制,首先会通过CPU缓存怎么办?
这取决于很多因素.一个因素是您使用的硬件.在现代PC硬件上,多线程很可能不会导致性能提升,因为CPU时间不是复制操作的限制因素.限制因素是存储器接口.CPU很可能使用DMA控制器进行复制,因此复制数据时CPU不会太忙.
多年来,CPU 性能大幅提升,简直呈指数级增长。RAM 性能无法跟上。它实际上使缓存变得更加重要。尤其是赛扬之后。
所以你可以增加或减少性能:
严重依赖于
Simply optimize the code for cache, then the quality of cpu will decide the performance.
Example:
FX8150 has weaker cores than a i7-4700:
it looks like AMD can share more finer-grained performance to threads while INTEL does give power to a single thread. (council assembly vs monarchy) Maybe thats why AMD is better at GPU and HBM.
If I had to stop speculation, I would care only for cache as it is not alterable in cpu while RAM can have many combinations on a motherboard.