c语言多线程访问同一块内存,多线程内存访问是否比单线程内存访问更快?

多线程内存访问是否比单线程内存访问更快?

假设我们使用的是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缓存怎么办?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值