2013-06-13 3 views
6

특정 데이터에 대해 캐시를 우회하라는 지침이있는 프로세서가 있습니까? This question에는 SSE4.2 지침이 캐시를 우회하는 것으로 표시된 대답이 있습니다. 누군가가 저를 계몽 할 수 있습니까?캐시를 우회하라는 지시를받은 프로세서가 있습니까?

+1

을 내가 궁금 : 어떤 실제적인 응용 프로그램에 대한이 캐시를 우회? 마음에 오는 모든 것은 지시 타이밍의 예측 가능성을 향상시키는 것입니다. 다른 사람들이 있습니까? – wallyk

+1

내가 흔히 접하게되는 2 가지 사례는 서로 다른 코어에서 실행되는 스레드간에 시간에 민감한 데이터를 공유하고 UART IC와 같은 다른 하드웨어와 인터페이스하기 위해 메모리 매핑 레지스터에 쓰기입니다. –

+3

@wallyk : 일반적인 목적은 캐시 오염을 방지하는 것입니다 (예를 들어 많은 양의 데이터를 작성하고 "곧"읽는 것을 기대하지 않으며 캐시에서 푸시해야하는 데이터를 원하지 않는 경우). – Brendan

답변

1

특정 데이터의 정의에 따라 예. 프로세서는 일반적으로 캐시 할 수있는 메모리 영역과 캐시 할 수없는 영역을 정의하는 데 사용되는 캐시 제어 레지스터/테이블을 가지고 있습니다. 일반적으로 사용자 공간에서 실행되는 코드는 해당 테이블에 액세스 할 수 없습니다.

1

특정 데이터에 대해 캐시를 우회하라는 지침이있는 프로세서가 있습니까?

SuperH 제품군 (또는 SuperH-2 이상)은 캐시 메모리를 암시 적 및 명시 적으로 우회합니다. 이는 특별한 지시 사항이 아닌 메모리 주소 공간의 다른 영역을 사용하여 수행됩니다.
주소의 상위 3 비트를 001으로 설정하면 캐시를 통해 미러의 최상위 3 비트를 지우고 같은 주소의 미러에 액세스 할 수 있습니다. 그리고 메모리 매핑 I/O 레지스터와 같은 일부 영역은 절대로 캐시되지 않습니다.

6

일반적으로 캐시 정책은 MMU (Memory Management Unit)에서 제어합니다. 각 주소 범위에 대해 캐싱 정책이 결정됩니다. 이 테이블은 OS에서 관리하며 시스템 공간에서 사용할 수 있습니다. 캐시에있는 아키텍처에 대해 묻는 질문에 대한 사이드 바 대답으로는 일반적으로 캐시를 동기화/무효화/플러시 할 수있는 CPU 명령이 있습니다. 그러나 MMU 테이블과 마찬가지로이 명령은 시스템 공간에서만 사용할 수 있습니다.

+2

약간의 설명; x86에서 _single_ cacheline을 무효화하기위한 clflush 명령은 _not_ privileged입니다. 그리고 원래 포스터가 언급했듯이,'movnt' SSE 명령은 캐시 우회를 허용합니다. _stores_ - http://stackoverflow.com/questions/37070/what-is-the-meaning-of-non-temporal-memory-accesses 자세한 내용은 -in-x86을 참조하십시오. –

1

Altera Nios II 아키텍처에는 캐시를 우회하는로드/스토어에 대해 ldiostio의 특정 명령어가 2 개 있습니다. 이것은 메모리 매핑 IO에 사용됩니다.

http://www.csun.edu/~glaw/ee525/Lecture03Nios.pdf

의 Nios II는 일반적으로 알테라의 FPGA 보드과 사용되는 소프트 프로세서이다 그것은 또한 하드 ASIC 디바이스에 대한 라이센스를 할 수 있지만이 아키텍처

1

에 기초 상업적 CPU를 모르겠지만 SSE 캐시 바이 패스 저장 명령어는 곧 다시는 건드리지 않는 영역에 쓸 때 캐시를 오염시키지 않아야한다. 예 : 다시 사용될 데이터를 제거하지 않으려 고합니다.

또한 x86 구현은 일반적으로 캐시 라인의 어떤 부분에 쓰기가 발생하면 전체 캐시 라인에서 읽습니다. 캐시 라인의 이전 내용이 불필요하다면 이는 메모리 대역폭의 낭비입니다. (memcpymemset의 또는 예를 들어 dest ARG.) I 쓰기 결합 (movntq/movntdq) memcpy을 구현하는 효과 대이 라이트 - 백 (기본값) some old discussion 알았다. 다른 사람이 memcpy의 결과를 즉시 읽는다면 이것을 사용하는 것에주의하십시오.

스트리밍로드는 reading from USWC regions에 대해서만 작동하며, 보통 memcpy은 무시 무시하게 수행합니다. 스트리밍로드 (WB (쓰기 저장))는 현재 특별하지 않으며 일반적인 movdqa로드와 유사합니다. (즉, NT 힌트는 무시됩니다). Intel의 최적화 매뉴얼에는 오염을 줄이는 부하에 prefetchnta을 사용할 수 있다고합니다.이 읽기를 트리거하지 않고 (오히려 movnt으로 우회하는 것보다) 캐시에 쓰고 자 할 경우


는 IDK. 아마도 AVX512는 memcpy에 대해이 문제를 해결할 것입니다. 512b ZMM 레지스터가 64 바이트, 즉 전체 캐시 라인이기 때문일 수 있습니다. 아직 캐싱되지 않은 메모리에 대한 ZMM 레지스터의 64 바이트 정렬 저장 은 RAM을 먼저 읽지 않고 시스템의 다른 CPU 코어에 저장소가 즉시 표시되도록 구현할 수 있습니다. .

(. AVX-512Knight's Landing도) Skylake Xeon (되지 않은 다른 스카이 레이크 CPU가 될 것입니다의 대규모 병렬 높은 처리량 제온 파이는 가속기 일을 계산한다.)