Cache Blocking

3739 단어 OperatingSystem

배경.


캐시 명중률을 높이는 중요한 방법은 블록링이다. 블록마다 데이터 블록을 계산하여 메모리 접근이 높은 메모리 국부적인 작은 이웃이 되도록 한다.
캐시에서 이 데이터를 사용하거나 다시 사용함으로써 우리는 메모리에 들어가는 수요를 줄였다. (메모리 대역폭의 압력을 줄였다.)
Blocking은 응용 프로그램의 메모리 대역폭 병목을 피하고 1-D, 2-D 또는 3-D 공간 데이터 구조에서 Blocking을 실행할 수 있다.
코드의 측면에서 Blocking은 일반적으로 순환 분할과 교환에 관련된다.

이루어지다


1-D Blocking


원시 코드
for (body1 = 0; body1 < NBODIES; body1 ++) {
   for (body2=0; body2 < NBODIES; body2++) {
     OUT[body1] += compute(body1, body2);
   }
}

만약 NBODIES가 매우 크다고 가정하면 바디2는 캐시에서 다시 사용하지 않고 메모리 대역폭의 제한을 받는다.
코드 수정
for (body2 = 0; body2 < NBODIES; body2 += BLOCK) {
   for (body1=0; body1 < NBODIES; body1 ++) {
      for (body22=0; body22 < BLOCK; body22 ++) {
         OUT[body1] += compute(body1, body2 + body22);
      }
   }
}

이 수정된 코드에서 데이터 (body 22) 가 보존되고 캐시에서 다시 사용되어 더 좋은 성능을 냅니다.

좋은 웹페이지 즐겨찾기