여러 CPU / 코어가 동일한 RAM에 동시에 액세스 할 수 있습니까?


15

이것이 내가 생각할 것입니다 :

  1. 두 개의 코어 가 RAM 에서 동일한 주소에 액세스하려고 하면 다른 하나가 RAM에 액세스 할 때까지 기다려야 합니다. 두 번째로 각 코어가 동일한 주소에 액세스하려고 시도해도 여전히 RAM에 캐시되어있을 수 있으므로 해당 캐시에 동시에 액세스 할 수 있습니다 .

  2. 두 개의 코어 가 동일한 RAM의 다른 주소에 액세스하려고하면 다른 하나가 RAM에 액세스 할 때까지 기다려야 합니다.

다시 말해, RAM 집약적 프로그래밍 작업의 경우 멀티 프로세싱이 동일한 주소를 RAM 당 여러 번 코어 당 여러 번 읽는 것이 아니라면 많은 도움이되지 않는다고 생각합니다.

따라서 여러 CPU / 코어가 동일한 RAM에 동시에 액세스 할 수 있습니까, 아니면 내가 올바른 말입니까?


나는 당신이 말하는 하드웨어 수준에 대해 말할 수는 없지만, 사용법을 나눠서 다중 처리를 통해 램 집약적 작업을 도울 수 있다고 말할 수 있습니다. 즉, 처리해야 할 램에 500MB의 데이터가있는 경우 한 프로세스에 250MB의 데이터 / 램을 제공하고 다른 프로세스에 250mb를 제공 하면 처리량을 효과적으로 두 배로 늘릴 수 있습니다 (램 대역폭 제한을 견딜 수 없음). 하드웨어가이를 수행 할 수 있는지 여부와는 별도로 여러 프로세서가 동일한 램 주소에 액세스하는 것은 실제로 나쁜 생각이며 대부분의 다중 프로세스 코드는이를 피하려고 노력합니다.
Jimmy Hoffa

1
@JimmyHoffa 그러나 RAM 대역폭 제한은 그가 말하는 것입니다 (작업이 메모리에 묶여 있다고 가정하기 때문에).

@Jimmy 두 개의 프로세서가 동일한 RAM 주소에서 읽으려고해도 아무런 문제가 없습니다. 그들이 동시에 쓰려고하면 문제가 생길 것입니다.
Lost Hobbit

1
내가 사용했던 특정 멀티 코어 프로세서에서 코어는 로컬 캐시 이외의 것을 "알지"않았다. 공유 캐시와 동기화하는 데 필요한 작업은 지정된 수의 프로세서주기에서 투명하게 수행되었습니다. 프로그래머는 이것을 nop어셈블리 코드에 수동으로 추가 된 필요한 양을 고려할 의향이 있음
gnat

2
짧은 대답 : 시스템 버스 아키텍처, 캐시 일관성 프로토콜, DDR 컨트롤러의 포트 수 및 DDR 컨트롤러의 수에 따라 다릅니다. 긴 답변은 시스템 데이터 시트에 있습니다.
SK-logic

답변:


11

요약 : 메모리 액세스 만 있으면 단일 코어가 메모리 버스를 포화시킬 수 있습니다.

머신의 메모리 대역폭을 설정하면 단일 스레드 프로세스가 실제로이를 달성 할 수 있는지 여부와 그렇지 않은 경우 유효 대역폭 사용이 프로세서 수에 따라 어떻게 확장되는지 확인할 수 있습니다.


세부 사항은 사용중인 아키텍처에 따라 다릅니다. 현대 SMP 및 SDRAM과 같은 것을 가정하면 :

  1. 두 코어가 RAM에서 동일한 주소에 액세스하려고 시도한 경우 ...

    여러 가지 방법으로 갈 수 있습니다.

    • 그들은 동시에 읽고 싶어합니다.

      • 동일한 칩에있는 두 개의 코어는 아마도 어느 정도 레벨 (2 또는 3)에서 중간 캐시를 공유하므로 읽기는 한 번만 수행됩니다. 최신 아키텍처에서 각 코어는 캐시 라인이 준비 될 때까지 하나 이상의 파이프 라인에서 µ-ops를 계속 실행할 수 있습니다.
      • 서로 다른 칩에있는 두 개의 코어는 캐시를 공유하지 않지만 여전히 버스에 대한 액세스를 조정해야합니다. 이상적으로 칩을 읽지 않은 칩 은 단순히 응답을 스누핑합니다.
    • 둘 다 쓰고 싶을 경우 :

      • 동일한 칩에있는 두 개의 코어는 동일한 캐시에 쓰므로 RAM으로 한 번만 플러시하면됩니다. 실제로 메모리는 캐시 라인 당 RAM에서 읽고 쓸 수 있기 때문에 별개이지만 충분히 가까운 주소의 쓰기는 RAM에 대한 단일 쓰기로 통합 될 수 있습니다.

      • 서로 다른 칩에있는 두 개의 코어는 충돌이 있으며, 캐시 라인은 chip1에 의해 RAM에 다시 쓰여지고, chip2의 캐시에 페치되고, 수정 된 후 다시 써야합니다 (스누핑에 의해 쓰기 / 페치를 합칠 수 있는지 전혀 모름)

  2. 두 개의 코어가 다른 주소에 액세스하려고하면 ...

    A에 대한 단일 액세스의 CAS 지연 수단이 작업은 잠재적으로 버스가 유휴 상태 인 경우보다 (이상 혹은 조금 밖에) 더 이상을하지하는 인터리브 할 수 있습니다.


또 다른 목록 항목은 하나의 코어가 DMA 전송을 시작하는 동안 anpther 코어가 대상 영역을 찌르는 경우입니다.
ott--

7

따라서 여러 CPU / 코어가 동일한 RAM에 동시에 액세스 할 수 있습니까, 아니면 내가 올바른 말입니까?

각기 고유 한 기능 세트를 가진 다양한 머신 아키텍처가 있습니다. 다중 명령 단일 데이터에 대해 한 범주의 다중 처리 시스템을 MISD 라고 하며 이러한 시스템은 동시에 여러 프로세서에 동일한 데이터를 제공하도록 설계되었습니다. SIMD 아키텍처 (Single Instruction Multiple Data) 로 알려진 관련 컴퓨터 클래스 는 훨씬 일반적이며 동일한 메모리에 동시에 액세스 할 수 있지만 메모리에는 데이터 대신 명령어가 포함됩니다. MIMD와 SIMD에서 "access"는 읽기 액세스를 의미합니다. 두 장치가 동시에 같은 위치에 쓰려고하면 문제가 발생할 수 있습니다!


3

대부분의 답변은 소프트웨어 및 / 또는 하드웨어 모델 측면에서 접근하지만 가장 깨끗한 방법은 물리적 RAM 칩의 작동 방식을 고려하는 것입니다. (캐시는 프로세서와 메모리 사이에 위치하며 단순히 동일한 주소 버스를 사용하며, 그 동작은 프로세서에 대해 완전히 투명합니다.) RAM 칩에는 하나의 단일 주소 디코더가 있으며, 메모리 셀의 주소를 수신하여 도착합니다. 주소 버스 (및 유사하게 데이터 버스). 본 메모리는 "단일 프로세서 접근 방식"으로 구축된다. 즉, 하나의 프로세서는 하나의 버스를 통해 하나의 메모리 칩에 연결된다. 다시 말해, 이것은 "von Neumann 병목 현상"입니다. 왜냐하면 모든 단일 명령은 메모리를 한 번 이상 참조해야하기 때문입니다. 이 때문에 하나의 와이어 (또는 버스, 일명 버스)에는 한 번에 하나의 신호 만 존재할 수 있습니다. RAM 칩은 한번에 하나의 셀 어드레스를 수신 할 수있다. 두 개의 코어가 주소 버스에 동일한 주소를 지정할 수있을 때까지 두 개의 다른 버스 드라이버 (코어와 같은)에 의한 동시 버스 액세스는 물리적으로 불가능합니다. (동일한 경우 중복됩니다).

나머지는 소위 하드웨어 가속입니다. 코 히어 런스 버스, 캐시, SIMD 액세스 등은 실제 RAM 앞에 멋진 외관입니다. 언급 된 가속기는 주소 버스를 독점적으로 사용하기위한 싸움을 다룰 수 있으며 프로그래밍 모델은 귀하의 질문과 관련이 없습니다. 또한 동시 액세스는 추상화 "개인 주소 공간"에 위배됩니다.

따라서 귀하의 질문에 : 동일한 직접 또는 다른 주소로 동시 RAM 직접 액세스는 불가능합니다. 캐시를 사용하면이 사실을 다룰 수 있으며 경우에 따라 명백한 동시 액세스를 허용 할 수 있습니다. 캐시 수준 및 구성, 데이터의 공간적 및 시간적 지역성에 따라 다릅니다. 그렇습니다. 맞습니다. RAM 액세스가 향상되지 않은 멀티 코어 처리는 RAM 집약적 응용 프로그램에는별로 도움이되지 않습니다.

이해를 돕기 위해 : 직접 메모리 액세스의 작동 방식을 기억하십시오. CPU와 DMA 장치는 모두 버스에 주소를 넣을 수 있으므로 버스를 동시에 사용하지 못하도록 서로 배제해야합니다.


1

실제 RAM은 신경 쓰지 않고 가상 메모리프로세스 또는 스레드주소 공간 (동일한 프로세스의 모든 스레드는 공통 주소 공간을 공유 함)에 대해 더 신경 을 씁니다.

물론 멀티 코어 운영 체제 커널을 코딩하는 경우 RAM과 캐시 일관성에 관심이 많습니다.

대부분의 멀티 코어 프로세서에는 일정한 형식의 캐시 일관성 메커니즘이 있습니다. 세부 사항은 프로세서마다 다릅니다. 프로세서는 CPU 캐시를 사용하기 때문에 프로세서의 여러 코어가 동일한 메모리 위치에 동시에 액세스하는 것처럼 동작하는 경우가 있습니다.

C11 또는 C ++ 11 과 같은 최신 산업 언어 표준 에는 일부 (멀티 스레드 인식) 메모리 모델이 있습니다.


0

최신 CPU는 최대 데이터 전송 대역폭을 얻기 위해 외부 메모리 장치에 물리적으로 연결되어 있습니다. 이는 높은 전송 속도를 유지하는 데 필요한 신호 무결성 요구 사항 (추적 길이, 종료, 클럭 스큐 등) 때문입니다. 예를 들어, 다중 CPU 마더 보드에서 각 CPU에는 전용 DIMM 슬롯 세트가 있습니다. 어떤 소프트웨어 프로그래머가 생각하든, 하나의 CPU는 단순히 다른 CPU의 외부 메모리 데이터에 액세스 할 수 없습니다. OS 커널, 하이퍼 바이저, 데이터 플레인 코어 등의 시스템 메모리 관리 소프트웨어는 CPU 간 메모리 데이터 전송을 처리합니다.


1
이 게시물은 읽기 어렵습니다 (텍스트의 벽). 더 나은 형태로 편집 하시겠습니까 ?
gnat
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.