레지스터는 매우 빠르고 매우 빨라야하며 많은 장소에서 동시에 액세스해야하기 때문에 레지스터가 매우 비쌉니다.
예를 들어 a = a + x; b = b + x; c = c + x; 당신은 모두 같은 레지스터를 읽고 싶어하는 세 가지 명령어가 있습니다. 따라서 레지스터는 단순한 메모리가 아닙니다. 프로세서에 있어야하는 모든 데이터 경로가 있으므로 x를 보유하는 레지스터의 동일한 데이터를 동시에 세 개의 명령으로 보낼 수 있습니다. 그리고 데이터는 많은 곳으로 갈 수 있습니다. 당신이 double a = x라고 쓰면; x가 정수인 경우 레지스터 x를 부동 소수점 장치로 보내는 데이터 경로가 있어야합니다. 또는 벡터 단위로. 등등.
그런 다음 데이터를 저장할 필요가있을뿐만 아니라 데이터를 사용할 수 있는지도 확인해야하는 문제가 있습니다. 만약 당신이 x = y + z; a = a + x; 누군가는 첫 번째 명령이 실행될 때 추가 결과가 저장 될 때까지 현재 x가 유효하지 않은 레지스터를 추적하고 실행중인 두 번째 추가를 중지해야합니다. 그것은 매우 비싸다.
그래서 약간의 메모리를 추가하는 것보다 레지스터를 만드는 것이 훨씬 더 많습니다. 그리고 그 댓가를 지불해야합니다. 레지스터는 프로세서의 속도에 매우 중요하므로 가장 비싸고 가장 빠른 기술로 프로세서를 구축 할 수 있습니다.
주소 지정을 고려하십시오. 그것들은 ALU에 가깝기 때문에, 레지스터 mux 선택을위한 최소 버스 너비가 있습니다. 이것은 명령 폭과 직접 관련이 있으며, 제한된 수의 레지스터 만 선택할 수 있습니다. 1024 개의 범용 레지스터가있는 경우 명령어에서 각 레지스터를 선택하기 위해 10 비트가 필요합니다. –
시계에 대해서도 생각해보십시오. 당신이 갖고있는 것의 크기가 클수록 클수록 느린 클록 주파수가 요구됩니다. 이것이 RAM이 CPU보다 낮은 클럭 주파수에서 실행되는 이유입니다. –
수요와 공급. 레지스터는 매우 부족하므로 매우 비쌉니다. L1 캐시는 부족하지만 레지스터는 아닙니다. L2가 더 풍부 해. RAM이 충분합니다. 디스크가 풍부합니다. S3은 무한합니다. 더 풍부하고 저렴하지만 액세스 속도는 느립니다. –