Cache Blocking
배경.
캐시 명중률을 높이는 중요한 방법은 블록링이다. 블록마다 데이터 블록을 계산하여 메모리 접근이 높은 메모리 국부적인 작은 이웃이 되도록 한다.
캐시에서 이 데이터를 사용하거나 다시 사용함으로써 우리는 메모리에 들어가는 수요를 줄였다. (메모리 대역폭의 압력을 줄였다.)
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) 가 보존되고 캐시에서 다시 사용되어 더 좋은 성능을 냅니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
ros launch 파일 작성 과 노드 시작 순서 제어1. 저 는 파 라 메 터 를 읽 는 코드 세 션 을 ros: init (argc, argv, "node name") 에 두 었 습 니 다. 그 다음 에 변수 형식 을 정의 한 다음 에 ros: param: get ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.