内存之间不能够直接复制是受限于什么?

42 个回复
BigCarrot
大萝卜1号 2015-10-21

http://ieeexplore.ieee.org/xpl/login.jsp?tp=&arnumber=6005465&url=http%3A%2F%2Fieeexplore.ieee.org%2Fxpls%2Fabs_all.jsp%3Farnumber%3D6005465

【 在 IvanLee (IvanLee) 的大作中提到: 】

: 本人不是搞体系结构的,想问一下这个问题。

: 内存之间无法直接复制数据,是因为没有这个必要,还是说做起来比较难?

: 专门领域有没有这种系统,能够通过在Memory controler中增强功能实现吗?

: ...................

IvanLee
IvanLee 2015-10-21

哈哈,怎么感觉你的回答很冲,希望不是我之前的措辞不合适导致的。

不过我确实没有考虑清楚,只考虑了硬件层面的第二种。多谢回答!

【 在 Aquamarine 的大作中提到: 】

: 你去看看BSD或者Linux内核,看看内存管理的部分,可好?

: 然后再看看glibc里面memcpy的实现代码。

: 最后才是硬件层面的,memA->cacheA->cpuA->cacheA->some-bus->cacheB-

: ...................

IvanLee
IvanLee 2015-10-21

多谢!我去看看。

不过网络处理还是有一些不一样吧!比如RDMA就可以做到DMA来控制外部的数据直接到内存,而不需要CPU。

【 在 yswzing 的大作中提到: 】

: memory controller一般不称作DMA。DMA指无需CPU参与即可访问DDR的机制。

: memcpy需要考虑cache,不能在memory controller层次解决,可以通过DMAC解决,但是只有memcpy任务粒度较大时,才有价值。

: LZ可参考 intel I/O accelerating technology,有wikipedia介绍,专用于网络处理的。

IvanLee
IvanLee 2015-10-21

这个我也考虑过,不过一时手头没有相关的资料,后续倒是可以了解一下。

【 在 hehu 的大作中提到: 】

: 想想CPU和GPU怎么传递数据。

IvanLee
IvanLee 2015-10-21

多谢!恰好是我需要的。

【 在 BigCarrot 的大作中提到: 】

: http://ieeexplore.ieee.org/xpl/login.jsp?tp=&arnumber=6005465&url=http%3A%2F%2Fieeexplore.ieee.org%2Fxpls%2Fabs_all.jsp%3Farnumber%3D6005465

mephistoxp
Mephisto the Great 2015-10-22

谢谢分析,我再思考思考

【 在 zkr 的大作中提到: 】

: 可以。

: 总线结构:

: CPU(M) --+-- IDE (S)

: ...................

csky007
csky007 2015-10-23

个人意见:先了解下内存拷贝的原理的吧!如果是cpu去拷贝,那跟总线的带宽有关,总线带宽又跟你的整体性能设计有关,如果是DMA拷贝,也跟DMA的带宽相关,总之一句话在性能跟成本之间平衡吧!如果一味追求内存拷贝的速度也是没有问题的,带来的cost会很大。

beepbug
按一下会响的虫 2016-03-21

最早的解决方法是通道。大型机时代就出现了的。

【 在 IvanLee 的大作中提到: 】

: 本人不是搞体系结构的,想问一下这个问题。

: 内存之间无法直接复制数据,是因为没有这个必要,还是说做起来比较难?

: 专门领域有没有这种系统,能够通过在Memory controler中增强功能实现吗?

IvanLee
IvanLee 2016-03-21

现在还用吗?

【 在 beepbug 的大作中提到: 】

: 最早的解决方法是通道。大型机时代就出现了的。

beepbug
按一下会响的虫 2016-03-22

微型机有DMA。

【 在 IvanLee 的大作中提到: 】

: 现在还用吗?

IvanLee
IvanLee 2016-03-22

DMA搞不定内存之间的吧!

【 在 beepbug 的大作中提到: 】

: 微型机有DMA。

beepbug
按一下会响的虫 2016-03-23

我搞错了。

那GPU呢?

【 在 IvanLee 的大作中提到: 】

: DMA搞不定内存之间的吧!

fastwind0
快风 2016-03-23

为啥不行?

【 在 IvanLee (IvanLee) 的大作中提到: 】

: DMA搞不定内存之间的吧!

shubao
书包 2016-03-24

见过powervr的早期硬件源码,可以让cpu直接管理它的虚拟地址映射,然后gpu的存储控制就可以访问cpu的进程虚拟地址了。   写到这好像明白为什么gpu不支持多进程的渲染了,,,,

【 在 beepbug 的大作中提到: 】

: 我搞错了。

: 那GPU呢?

shubao
书包 2016-03-24

搭车问两个硬件相关的数据读写及效率问题:

pcie从设备可以dma写大块数据到内存。这个过程是不是只要在pcie从设备被cpu识别出来后,cpu进程告诉pcie一个连续的虚拟地址空间对应哪几块物理地址空间就可以了?页地址的多齐啥的由从设备的dma自动处理?

如果是usb设备,是不是只能由CPU主动发起块数据的读写操作,那这样读写效率就完全由cpu中dma的效率决定了读写效率,如果dma不能跨虚拟页地址,那cpu每读一页就来个内核态去控制dma?

【 在 IvanLee 的大作中提到: 】

: 本人不是搞体系结构的,想问一下这个问题。

: 内存之间无法直接复制数据,是因为没有这个必要,还是说做起来比较难?

: 专门领域有没有这种系统,能够通过在Memory controler中增强功能实现吗?

beepbug
按一下会响的虫 2016-03-25

标题是直接嘛。

【 在 shubao 的大作中提到: 】

: 见过powervr的早期硬件源码,可以让cpu直接管理它的虚拟地址映射,然后gpu的存储控制就可以访问cpu的进程虚拟地址了。   写到这好像明白为什么gpu不支持多进程的渲染了,,,,

TERMINALL
TERMINAL 2016-03-25

意义何在? 并没有什么乱用。

就好比你说为什么磁盘不能自己从一个扇区复制到另外一个扇区一样。

【 在 IvanLee (IvanLee) 的大作中提到: 】

: 本人不是搞体系结构的,想问一下这个问题。

: 内存之间无法直接复制数据,是因为没有这个必要,还是说做起来比较难?

: 专门领域有没有这种系统,能够通过在Memory controler中增强功能实现吗?

InfraMargin
赢了马竞 2016-03-25

读读micro 2013 的 rowclone

【 在 IvanLee (IvanLee) 的大作中提到: 】

: 本人不是搞体系结构的,想问一下这个问题。

: 内存之间无法直接复制数据,是因为没有这个必要,还是说做起来比较难?

: 专门领域有没有这种系统,能够通过在Memory controler中增强功能实现吗?

IvanLee
IvanLee 2016-03-25

多谢!这个文章确实不错。

可以看出在folk, checkpoint这种场景下效率提升还是可以的,

也许对in-memory分布式系统的fault-tolerance可以提供新的设计思路

【 在 InfraMargin 的大作中提到: 】

: 读读micro 2013 的 rowclone

fastwind0
快风 2016-03-25

为了支持opencl?

【 在 shubao (书包) 的大作中提到: 】

: 见过powervr的早期硬件源码,可以让cpu直接管理它的虚拟地址映射,然后gpu的存储控制就可以访问cpu的进程虚拟地址了。   写到这好像明白为什么gpu不支持多进程的渲染了,,,,