어제 저는 현재 x86 CPU가 메모리에 액세스하려고 할 때 속도 차이가 있다고 생각했습니다. 일반적으로 RAM은 일부 새로운 Intel CPU의 경우 1333MHz에서 작동합니다. 그러나 CPU 자체는 약 3.2GHz에서 작동합니다.
따라서 CPU가 메모리에 액세스하려면 주소를 주소 버스로, 데이터를 데이터 버스로 ( 전자 쓰기를 원한다고 가정 ) 설정하면 CPU는 메모리에 대한 추가 시간을 기다려야합니까, 아니면 일부가 있습니까? 대기 시간을 처리하는 CPU 빠른 컨트롤러와 CPU가 더 많은 작업을 수행 할 수 있습니까?
답변
CPU가 메모리에 액세스하고자 할 때, 주소를 주소 버스로, 데이터를 데이터 버스로 (쓰기를 원한다고 말하십시오) 이제 CPU가 메모리를 위해 여분의 시간을 기다려야합니까
Ulrich Drepper의 악명 높은 기억 기사에서 …
쓰기 작업의 경우 CPU가 값이 메모리에 안전하게 저장 될 때까지 기다릴 필요는 없습니다. 다음 명령어의 실행이 값이 메모리에 저장된 것처럼 동일한 효과를 나타내는 한 CPU가 바로 가기를 수행하지 못하게하는 것은 없습니다. 다음 명령을 일찍 실행할 수 있습니다. 더 이상 일반 레지스터에서 사용할 수없는 값을 보유 할 수있는 섀도우 레지스터를 사용하면 불완전한 쓰기 작업에 저장 될 값을 변경할 수도 있습니다.
편집 :
분명히 읽기의 경우, 모든 베팅이 해제되어 있습니다. 데이터를 조작하기 전에 데이터를 읽을 때까지 기다려야한다고 확신합니다. 메인 메모리에 액세스하는 경우.
답변
대부분의 CPU에서 소량의 고속 캐시 메모리는 CPU와 메인 메모리 사이에 있으며 CPU가 현재 작업중인 코드와 데이터를 유지하고 훨씬 느린 메인 메모리 (또는 다음 레벨의 캐시)에서 사전에 읽기를 시도합니다. ).
답변
CPU가 메모리를위한 추가 시간을 기다려야 하는가?
그렇습니다. 사실, 설명하는 문제는 현재 하드웨어를 설계 할 때 CPU 및 시스템 설계자가 겪는 가장 큰 과제 중 하나입니다. .
이것이 모든 최신 CPU에 CPU 캐시 가있는 이유이기도 하지만 문제를 완화 할 수만 있습니다.
또는 대기 시간을 처리하는 CPU 고속 컨트롤러와 CPU가 더 많은 oparations를 할 수 있습니까?
일반적으로 이것은 CPU가 RAM에서 데이터를 기다리는 경우 일반적으로 데이터 없이는 진행할 수 없으므로 불가능합니다. 하이퍼 스레딩과 같은 기술을 사용하면 CPU 가 대기하는 동안 다른 소프트웨어 스레드를 실행하도록 전환 할 수 있지만 실행중인 소프트웨어의 지원이 필요합니다 (스레드를 사용해야 함).
경우에 따라 CPU는 비 순차적 실행 및 추론 적 실행 과 같은 “트릭”을 사용하여 메모리를 기다리는 동안 유용한 작업을 수행 할 수 있지만 항상 가능한 것은 아닙니다. Andy와 harrymc의 답변도 이것을 설명합니다.
이러한 문제에 대한 광범위한 논의를 위해 훌륭한 논문이 있습니다.
Ulrich Drepper의 모든 프로그래머가 메모리 에 대해 알아야 할 사항
답변
CPU가 RAM을 기다려야하는 경우 (오늘의 CPU 속도에 CPU 다이의 L2 / L3 캐시 포함) CPU가 기다려야합니다. 처리 속도가 느려집니다 (100 % CPU에서 실행되는 스레드가 대부분의주기를 RAM에서 대기하는 데 소비 할 수 있음).
그렇기 때문에 캐시 라인이 교차 될 때 메모리의 데이터 레이아웃을 고려하면 엄격한 데이터 처리 코드의 성능에 큰 영향을 줄 수 있습니다.
(의견 수정 : 최신 DDR3 RAM은 1333을 훨씬 뛰어 넘고 1600은 일반적이며 오버 클로킹을 고려하지 않고 더 빠르게 사용할 수 있습니다.)
답변
대기 시간을 처리하는 CPU 고속 컨트롤러와 CPU가 더 많은 작업을 수행 할 수있는 컨트롤러가 있습니까?
예. 그러나 멀티 코어 컴퓨터가 필요하며 CPU를 사용하는 스레드가 두 개 이상 있어야합니다.
이것이 운영 체제 스케줄러가 코어간에 가능한 고르게 스레드를 분배하려고하는 이유와 코어 간 대기를 피하기 위해 각 코어에 자체 캐시 메모리가있는 이유입니다.
실제로 멀티 코어 컴퓨터를 구입할 때는 메모리 캐시의 크기, 특히 컴퓨터 모델에 청구 된 금액이 모든 코어의 총 캐시인지에주의를 기울여야합니다. 실제로 각 코어는 전체의 분수.
답변
“… 쓰고 싶다고하자. CPU가 메모리를 확보하기 위해 추가 시간을 기다려야합니까, 아니면 대기 시간을 처리하는 CPU 고속 컨트롤러 나 CPU가 더 많은 작업을 수행 할 수 있습니까?”
예, 고성능 CPU에는 캐시와 버스 인터페이스 장치 및 쓰기 버퍼가 있으므로 CPU가 STORE를 수행 한 후 나머지 CPU (대부분의 경우)는 캐시 및 버스 동안 즉시 명령을 계속 처리 할 수 있습니다. 인터페이스 장치 및 쓰기 버퍼 핸들을 통해 해당 데이터를 주 메모리로 보냅니다.
일부 CPU는 LOAD 명령의 우선 순위를 지정하므로 해당 STORE 명령 바로 다음에 LOAD 명령이 오는 경우 CPU는 데이터를 RAM에 저장하기 전에 RAM에서 요청 된 데이터를로드합니다.