2017-01-28 1 views
1

장치의 DMA 컨트롤러가 메모리 작업을 진행하는 동안 CPU가 처리/수행 할 수있는 작업의 종류가 궁금하여 동시성 수준을 높이겠습니까? 는 CPU 캐시/레지스터가 비어있는 경우에, 다른 명령이 진행 DMA를 인터리빙없이 인출 할 수있는 방법을DMA 및 CPU 동시성 On

들으 그것은 일반적으로 큰 1 하드웨어, CPU는 잠시 더 많거나 적은 무엇이든 할 수

+0

특정 아키텍처를 염두에두고 있습니까? 모든 CPU와 DMA가 동등한 것은 아닙니다. 너무 광범위 할 수도 있습니다. –

답변

1

DMA가 진행 중입니다. 일반적으로 OS의 제어하에 실행중인 프로세스 나 커널 태스크를 정상적으로 실행하면됩니다.

대하여 [?]

... [A] ND는 CPU 캐시/레지스터가 비어있는 경우, 어떻게 다른 명령 진행에 DMA 인터리빙없이 반입 할 수

As를 CPU가 메모리에 액세스해야하는 경우 어떻게되는지 묻습니다. 일반적으로 CPU는 일반적으로 "레지스터 또는 캐시가 비어있을 때"뿐만 아니라 DMA가 진행 중일 때이 활동을 다소 정상적으로 진행할 수 있습니다(). 메모리 버스는 이미 일반적으로 여러 DMA 지원 장치, PCI 카드, 다중 코어 또는 다중 CPU를 포함하여 여러 장치에서 공유됩니다. memory controller은 이러한 모든 질문을 수락하고 이행하는 책임이 있으며 그 사이에는 중재가 포함됩니다.

따라서 DMA와 CPU가 메모리에 액세스 할 때 두 가지 코어 (또는 동일한 코어에서 실행되는 두 개의 논리적 스레드)가 메모리에 액세스 할 때 발생하는 것과 같은 "인터리브"유형이있을 수 있습니다. 실제로 어떻게 작동하는지는 DRAM의 구성 방법, 메모리 컨트롤러의 작동 방식 및 기타 많은 세부 사항에 달려 있지만, 일반적으로 현대 메모리 시스템은 여러 병렬 스트림을 유지할 수 있어야합니다. RAM에 의해 부과 된 대역폭 제한에 접근하고 종종 접근합니다.


1 거의 임베디드 마이크로 컨트롤러보다 큰 것을 의미 요즘. 예를 들어 심지어 모바일 CPU도 자격을 얻습니다.

2는 일반적으로으로 나는 정상적인 메커니즘을 사용하고 에 메모리 액세스를 기대할 수 있지만, 성능이 영향을받지 않습니다하지 의미한다. CPU에 의한 메모리 액세스는 DMA 액세스 (그리고 다른 CPU, 비디오 카드와 같은 PCI 장치 등의 다른 액세스)와 경쟁하게 될 것이며 속도는 느려질 것입니다. 그러나 합리적인 하드웨어에서는 확실히 기다릴 필요가 없습니다. DMA가 끝납니다!

+1

DMA 및 CPU 메모리 액세스가 인터리브/관리되는 동안 눈에 띄는 효과가 발생할 수 있습니다. 잘 쓰여진 알고리즘은 메모리 버스 대역폭을 완전히 포화시킬 수 있으며 "I/O bound"입니다. DMA가 발생하면 알고리즘은 속도를 줄입니다. 왜냐하면 DMA 전송이 동일한 버스를 통해 압축되어야하기 때문입니다! 나는 이것이 일어 났으며, 매우 자랑스러워했다! – bazza

+1

자세한 정보 주셔서 감사합니다. 나는 정말로 그 "공유하는"일을 아주 잘 몰랐습니다. 메모리 컨트롤러는 실제로 어떤 미친 짓을해야합니다. 그리고 @bazza, 당신이 그 diff를 테스트 할 수있는 지점에 도달하는 것도 어려워야합니다. 축하해! – zgulser

+1

@bazza - 확실히! 나는 다른 의미를 내포하지 않았다. 기본적으로 DRAM 및 Dram 자체의 경로는 공유 리소스이며 해당 리소스의 DMA 사용은 무료가 아닙니다.그것은 DMA가 보통 버스 또는 아무것도 잠그지 않기 때문에 메모리에 대한 액세스가 여전히 가능하다고 말했습니다. * 대부분의 알고리즘은 메모리 대역폭에 민감하지 않고 대기 시간에 민감합니다. 일반적으로 좋은 컨트롤러는 합리적인 방법으로 동시 요청을 처리합니다. – BeeOnRope