2017-12-18 40 views
-1

캐시 미스가 발생하면 데이터가 메인 메모리에서 직접 등록되도록 이동되거나 데이터가 먼저 캐시로 이동 한 다음 등록하려면? 레지스터를 메인 메모리와 직접 연결하는 방법이 있습니까?캐시 미스가 발생하면 데이터가 직접 등록으로 이동되거나 캐시로 이동 한 다음 등록하려면?

+0

"메인 메모리에서 직접 등록하려면 이동했습니다."라고 말하면 실제로 "메인 메모리에서 직접 등록하고 캐시에 복사했습니다"라는 의미입니까? 그렇지 않으면 캐시는 무엇입니까? 그리고 캐시를 우회하면 일반적으로 프로그램이 느려집니다 (직접 메모리 액세스가 캐시보다 느려짐). 그리고 왜 캐시를 우회하려고하는지 * 자세히 설명해주십시오. 해결할 실제 문제는 무엇입니까? 유스 케이스 란 무엇입니까? –

+0

http://idownvotedbecau.se/beingunresponsive –

+0

@Someprogrammerdude I는 회로에서 데이터를 캐시에 저장하는 것과 동시에 레지스터에 저장한다는 의미입니까?나는 데이터가 캐시 (LLC, L2, L1)에 저장 될 것이라는 것을 알고 있지만 데이터를 캐시에 두는 것과 레지스터에 데이터를 넣는 것 사이에 순서가 있는지 신경 쓰고있다. – peasantspring

답변

2

캐시 라인이 외부 캐시에서 도착한 후 L1로드 사용 대기 시간을 기다려야하는지 캐시 요청 누락 여부를 묻는 것입니다. 즉, 라인이 L1에 기록 될 때까지 대기 한 다음, 정상적으로로드를 다시 시도한다.

고성능 CPU가 그런 식으로 작동하지 않는다는 것이 거의 확실합니다. L2 작업 대기 시간은 많은 작업 부하에서 중요하며로드를 다시 시작해야하는 시점을 알기 위해 들어오는 캐시 라인을 추적하는로드 버퍼가 필요합니다. 따라서 데이터를 캐시에 쓰는 것과 동시에 데이터를 가져옵니다. TLB 검사는 외부 캐시로 전송할 실제 주소를 생성하는 과정에서 이미 수행되었습니다.

대부분의 실제 CPU는 기다리는 단어/바이트가 도착하자마자 파이프 라인을 다시 시작할 수 있도록 조기 재시작 설계를 사용하므로 나머지 캐시 라인은 "백그라운드에서"전송됩니다.

캐시 라인의 중간에있는 단어에 대한 수요 미스가 그 단어를 먼저받을 수 있도록 추가 최적화가 중요합니다. 즉, 필요한 단어로 시작하여 캐시 라인을 보내도록 요청합니다. 필자는 현대의 DDR DRAM이 주 메모리에서 읽을 때이를 지원하며 지정된 64 비트 청크에서 64 바이트 버스트를 시작한다고 생각합니다. 나는 100 % 확신 할 수없는 현대의 CPU가 이것을 사용한다. out-of-order 실행이 같은 행에 대해 여러 개의 미해결 미스를 허용하면 아마 더 복잡해질 것입니다.

조기 재시작 및 중요 단어 우선에 대한 설명은 which is optimal a bigger block cache size or a smaller one?을 참조하십시오.


메인 메모리와 레지스터를 연결하는 직접적인 방법이 있나요?

"직접"이란 의미에 따라 다릅니다. 최신 고성능 CPU에는 2-3 코어의 캐시와 자체 버퍼링 기능이있는 메모리 컨트롤러가있어 여러 코어에 대한 메모리 액세스를 중재 할 수 있습니다. 그래서 아니, 할 수 없습니다.

특수한 캐시 우회로드 및 저장 명령어를 사용하여 간단한 단일 코어 CPU를 설계한다면 확실하게하십시오. 또는 조기 재시작을 "직접"이라고 생각하면 예가 이미 발생합니다.

저장소의 경우 x86 및 일부 다른 아키텍처에는 캐시 우회 저장이 있지만 x86의 MOVNT 명령은 레지스터를 메모리에 직접 연결하지 않습니다. 상점은 가득 차면 플러시되는 라인 채우기 버퍼에 들어가므로 쓰기 결합이 생깁니다.

캐싱 할 수없는 메모리 영역도 있습니다. 캐싱 할 수없는 메모리에 대한로드 또는 저장소는 구조적으로 "직접"이지만 실제 마이크로 아키텍처에서는 L1D가 사용하는 것과 동일한 메커니즘을 통해로드/저장 실행 단위의 메모리 계층 구조를 계속 통과합니다 메모리 컨트롤러와 대화하십시오.

+0

대단히 감사합니다! – peasantspring

관련 문제