Concurrency DMA与CPU并发

Concurrency DMA与CPU并发,concurrency,cpu,hardware,dma,Concurrency,Cpu,Hardware,Dma,我想知道当设备的DMA控制器正在进行内存操作时,CPU可以处理/执行什么样的操作来提高并发级别?如果CPU缓存/寄存器为空,如何在不交错DMA的情况下提取另一条指令 Thx一般来说,在big1硬件上,当DMA正在进行时,CPU可以做或多或少的任何事情。通常,它只是在操作系统的控制下继续正常执行正在运行的进程或内核任务 关于你的问题: 。。。如果CPU缓存/寄存器为空,另一条指令如何运行 可以在不交错DMA的情况下提取[?] 据我所知,您正在询问如果CPU需要访问内存会发生什么情况。通常,CPU经

我想知道当设备的DMA控制器正在进行内存操作时,CPU可以处理/执行什么样的操作来提高并发级别?如果CPU缓存/寄存器为空,如何在不交错DMA的情况下提取另一条指令

Thx

一般来说,在big1硬件上,当DMA正在进行时,CPU可以做或多或少的任何事情。通常,它只是在操作系统的控制下继续正常执行正在运行的进程或内核任务

关于你的问题:

。。。如果CPU缓存/寄存器为空,另一条指令如何运行 可以在不交错DMA的情况下提取[?]

据我所知,您正在询问如果CPU需要访问内存会发生什么情况。通常,CPU经常访问内存,而不仅仅是在“寄存器或缓存为空”的情况下。当DMA正在进行时,此活动可以或多或少正常进行2。内存总线通常已经由多个设备共享,包括多个支持DMA的设备、PCI卡、多核或多个CPU。承包商负责接受并满足所有这些要求,包括在双方之间进行仲裁

因此,当DMA和CPU都访问内存时,可能会出现某种类型的“交错”,这是正确的,正如当两个内核(甚至在同一内核上运行的两个逻辑线程)访问内存时可能会出现这种情况一样。它在实践中的工作方式取决于DRAM的组织方式、内存控制器的工作方式(以及存在的数量)和许多其他细节,但一般来说,您希望现代内存系统具有高度并行性—能够支持多个访问流,并且通常接近RAM施加的带宽限制


1如今,这几乎意味着任何比嵌入式微控制器更大的东西。例如,即使是移动CPU也符合要求


2通常情况下,我的意思是使用正常的机制,您可以期望内存访问正常工作,但性能不会受到影响。CPU的内存访问将与DMA访问(以及其他CPU、PCI设备(如视频卡等)的其他访问)竞争,速度可能会较慢,但在合理的硬件上,它肯定不必等到DMA完成

有什么特别的建筑吗?并非所有的CPU和DMA都是相等的。可能太宽了。虽然DMA和CPU内存访问是交错/管理的,但可能会造成明显的影响。编写良好的算法可以完全饱和内存总线带宽,并且是“I/O限制”的。如果DMA发生,那么您的算法就会变慢,因为DMA传输必须通过同一条总线!我经历过这一切,我感到非常自豪!谢谢你提供的详细信息。我真的不太清楚“分享”这件事。内存控制器一定在做一些疯狂的事情。而且@bazza,一定很难达到可以测试差异的程度。恭喜@巴扎-当然!我不是有意要暗示别的。基本上,到DRAM的路径和DRAM本身是一个共享资源,并且该资源的DMA使用不是免费的。也就是说DMA通常不会锁定总线或任何东西,所以访问内存仍然是可能的。大多数算法对内存带宽不是特别敏感,而是对延迟非常敏感,一个好的控制器通常会以合理的方式满足并发请求。在较弱的硬件上,一切都可能不同。也许DMA传输垄断了总线,或者内存控制器无法处理并发请求等等。@BeeOnRope,哦,我没有这样读过,我只是想补充一下你的优秀答案:)事实上,大多数算法都没有达到这一步,这是英特尔在广泛的通用计算环境中非常成功地判断可接受性能的一点。事实上,一个更小的CPU和一个更紧的晶体管预算可能会被设计成你所描述的那样。