캐시 제어 명령

Cache control instruction

컴퓨팅에서 캐시 제어 지침프로그래머컴파일러가 제공하는 메모리 액세스 패턴의 예지를 이용하여 하드웨어 캐시의 성능을 향상시키기 위한 프로세서의 명령 스트림에 포함된 힌트다.[1] 그들은 작업 세트에 대한 더 나은 제어를 제공함으로써 캐시 오염을 줄이고, 대역폭 요구량을 줄이며, 대기 시간을 우회할 수 있다. 대부분의 캐시 제어 지침은 프로그램의 의미론에는 영향을 미치지 않지만, 일부에서는 영향을 미치지 않는다.

변형이 있는 몇 가지 그러한 지침은 ARM, MIPS, PowerPCx86과 같은 몇 가지 프로세서 명령 집합 아키텍처에서 지원된다.

프리페치

데이터 캐시 블록 터치라고도 하며, 그 효과는 주어진 주소와 연관된 캐시 라인의 로드를 요청하는 것이다. 이것은 에 의해 수행된다. PREFETCH x86 명령 집합의 명령. 일부 변형은 높은 수준의 캐시 계층을 무시하며, 이는 작업 세트에 보관하기 보다는 한 번 통과되는 데이터에 대해 '스트리밍' 컨텍스트에서 유용하다. 프리페치는 메모리 액세스 지연 시간을 완화하기 위해 시간적으로 충분히 앞서 발생해야 한다. 예를 들어, 루프가 선형적으로 메모리를 통과하는 경우). GNU 컴파일러 컬렉션intrinsic 함수 __builtin_prefetch 프로그래밍 언어 C 또는 C++에서 이것을 호출하는데 사용될 수 있다.

명령 프리페치

명령 캐시에 대한 프리페치의 변형.

데이터 캐시 블록 할당 0

이 힌트는 내용을 완전히 덮어쓰기 전에 캐시 라인을 준비하는 데 사용된다. 이 예에서 CPU는 메인 메모리에서 어떤 것도 로드할 필요가 없다. 의미 효과는 캐시 라인 크기 블록의 정렬된 memset과 0과 동일하지만, 운영은 사실상 자유롭다.

데이터 캐시 블록이 무효화

이 힌트는 캐시 라인의 내용을 메인 메모리에 커밋하지 않고 캐시 라인을 삭제하는 데 사용된다. 잘못된 결과가 나올 수 있기 때문에 주의가 필요하다. 다른 캐시 힌트와 달리 프로그램의 의미론은 크게 수정된다. 이것은 와 함께 사용된다. allocate zero 임시 데이터 관리용 이것은 불필요한 메인 메모리 대역폭과 캐시 오염을 절약한다.

데이터 캐시 블록 플러시

이 힌트는 캐시 라인의 즉각적인 제거를 요청하여 향후 할당을 위한 길을 열어준다. 데이터가 더 이상 작업 세트의 일부가 아님을 알 때 사용한다.

기타 힌트

일부 프로세서는 캐시 힌트를 암시하는 로드 스토어 명령의 변형을 지원한다. 예를 들면 다음과 같다. load last 데이터가 한 번만 사용됨을 시사하는 PowerPC 명령 집합에서, 즉, 해당 캐쉬 라인을 제거 대기열의 머리까지 밀어넣고, 여전히 직접 필요할 경우 계속 사용할 수 있도록 할 수 있다.

대안

자동 프리페치

최근 들어, 점점 더 진보된 인텔과 ARM의 애플리케이션 프로세서 설계가 재래식 언어로 작성된 코드(예: 자동 프리페치 수행)를 가속화하는 데 더 많은 트랜지스터를 투입함에 따라 캐시 제어 지침의 인기가 낮아지고 있다. 그러나 이 기법은 처리량과 지연 시간 트레이드오프가 다른 처리량 지향 프로세서에 유효할 수 있으며, 실행 단위에 더 많은 영역을 투입하는 것을 선호할 수 있다.

스크래치패드 메모리

일부 프로세서는 임시 저장소가 들어갈 수 있는 스크래치패드 메모리와 필요할 때 메인 메모리로 데이터를 전송하는 DMA(Direct Memory Access)를 지원한다. 이 접근방식은 Cell 프로세서와 일부 내장형 시스템에 의해 사용된다. 이는 (작업 세트가 명시적 전송에 의해 관리되기 때문에) 메모리 트래픽과 인접성에 대한 더 큰 통제를 허용하며, 다핵심 기계에서 값비싼 캐시 정합성이 필요하지 않다.

단점은 사용하기 위해 상당히 다른 프로그래밍 기법을 필요로 한다는 것이다. 프로그래머에게 큰 주소 공간의 균일한 뷰(캐시에 의해 시뮬레이션된 환상)를 제공하는 C, C++와 같은 전통적인 언어로 쓰여진 프로그램을 적응시키는 것은 매우 어렵다. 전통적인 마이크로프로세서는 레거시 코드를 더 쉽게 실행할 수 있는데, 이는 캐시 제어 지침에 의해 가속될 수 있는 반면, 스크래치패드 기반 기계는 지상에서부터 고른 기능까지 전용 코딩을 필요로 한다. 캐시 제어 지침은 특정 캐시 라인 크기로 한정되며, 실제로는 동일한 아키텍처 제품군의 프로세서 세대마다 다를 수 있다. 캐시는 예측성이 낮은 액세스 패턴(예: 텍스처 매핑 중)에서 읽기와 쓰기를 병합하는 데 도움이 될 수 있으며, 스크래치패드 DMA는 예측 가능한 '선형' 통과를 위해 알고리즘을 재작업해야 한다.

이러한 스크래치패드는 일반적으로 전통적인 프로그래밍 모델에서 사용하기 더 어렵지만, 데이터 흐름 모델(예: TensorFlow)이 더 적합할 수 있다.

벡터 가져오기

벡터 프로세서(예: 현대 그래픽 처리 장치(GPU) 및 Xeon Phi)는 대규모 병렬 처리를 사용하여 메모리 지연 시간(프리페치 작업 필요성 감소)을 해결한다. 많은 읽기 작업이 컴퓨팅 커널의 후속 호출에 대해 병렬로 발행된다. 실행 단위는 이미 나타난 과거의 요청 데이터에서 데이터를 작업하는 데 전념하는 동안, 계산은 미래 데이터를 기다리는 동안 보류될 수 있다. 이는 프로그래머가 적절한 프로그래밍 모델(계산 커널)과 연계하여 활용하기 쉽지만, 범용 프로그래밍에는 적용하기가 더 어렵다.

단점은 임시 상태의 많은 복사본이 처리 요소로컬 메모리에 보관되어 비행 중인 데이터를 대기할 수 있다는 것이다.

참조

  1. ^ "Power PC manual, see 1.10.3 Cache Control Instructions" (PDF).