캐시 프리페치

Cache prefetching

캐시 프리페치는 컴퓨터 프로세서가 실제로 필요하기 전에 명령 또는 데이터를 느린 메모리의 원래 저장소에서 더 빠른 로컬 메모리로 가져와 실행 성능을 높이기 위해 사용하는 기술입니다(따라서 '프리페치'[1]라는 용어).대부분의 최신 컴퓨터 프로세서는 고속 로컬 캐시 메모리를 갖추고 있으며, 이 캐시 메모리에는 데이터가 필요할 때까지 프리페치된 데이터가 저장됩니다.프리페치 조작의 소스는, 통상은 메인 메모리입니다.이러한 설계로 인해 캐시 메모리에 액세스하는 것이 보통 메인 메모리에 액세스하는 것보다 훨씬 빠르기 때문에 데이터를 프리페치한 다음 캐시에서 액세스하는 것이 보통 메인 메모리에서 직접 액세스하는 것보다 훨씬 더 빠릅니다.프리페치는 논블로킹캐시 제어 명령으로 실행할 수 있습니다.

데이터 대 명령 캐시 프리페치

캐시 프리페치는 데이터 또는 명령을 캐시로 가져올 수 있습니다.

  • 데이터 프리페치는 데이터가 필요하기 전에 데이터를 가져옵니다.데이터 액세스 패턴은 명령 패턴보다 규칙성이 낮기 때문에 일반적으로 정확한 데이터 프리페치가 명령 프리페치보다 더 어렵습니다.
  • 명령 프리페치는 명령을 실행하기 전에 명령을 가져옵니다.어떤 형태로든 명령 프리페치를 사용한 최초의 메인스트림 마이크로프로세서는 인텔 8086 (6바이트)과 모토로라 68000 (4바이트)입니다.최근에는 모든 고성능 프로세서가 프리페치 기술을 사용하고 있습니다.

하드웨어와 소프트웨어 캐시 프리페치

캐시 프리페치는 하드웨어 또는 [2]소프트웨어로 실행할 수 있습니다.

  • 하드웨어 기반 프리페치는 일반적으로 실행 프로그램이 요구하는 명령 또는 데이터의 스트림을 감시하고 이 스트림을 기반으로 프로그램이 필요로 하는 다음 몇 가지 요소를 인식하여 프로세서의 [3]캐시에 프리페치하는 전용 하드웨어 메커니즘을 프로세서에 사용함으로써 이루어집니다.
  • 소프트웨어 베이스의 프리페치는, 통상,[4] 컴파일러가 코드를 분석해, 컴파일중에 프로그램에 추가의 「프리페치」명령을 삽입하는 것으로 실현됩니다.

하드웨어 프리페치 방법

스트림 버퍼

  • 스트림 버퍼는 Alan Jay [1]Smith가 제안한 "One Block Lookahead (OBL) scheme" 개념에 따라 개발되었습니다.
  • 스트림 버퍼는 가장 일반적인 하드웨어 기반 프리페치 기술 중 하나입니다.이 기술은 1990년에[5] Norman Jouppi에 의해 처음 제안되었고 그 이후로 [6][7][8]이 방법의 많은 변형들이 개발되었다.기본 개념은 캐시 미스 주소 k\ k k\ k의 개별 버퍼로 가져오는 것입니다.이 버퍼는 스트림버퍼라고 불리며 캐시와는 별개입니다.프리페치된 블록과 관련된 주소가 프로세서 상에서 실행되는 프로그램에 의해 생성된 요구 주소와 일치할 경우 프로세서는 스트림버퍼로부터의 데이터/명령어를 소비합니다.다음 그림은 이 설정을 나타내고 있습니다.
A typical stream buffer setup as originally proposed
[5] Norman Jouppi가 1990년에 처음 제안한 전형적인 스트림 버퍼 설정
  • 프리페치 메커니즘은 메모리 블록(예를 들어 A)에서 누락이 검출될 때마다 스트림을 할당하여 누락된 블록에서 후속 블록의 프리페치를 시작합니다.스트림 버퍼가 4개의 블록을 유지할 수 있는 경우 A+1, A+2, A+3, A+4를 프리페치하여 할당된 스트림버퍼에 저장합니다.프로세서가 다음에 A+1을 소비하는 경우 스트림 버퍼에서 프로세서의 캐시로 "업" 이동해야 합니다.스트림 버퍼의 첫 번째 엔트리는 A+2 등입니다.이러한 연속 블록의 프리페치 패턴을 시퀀셜 프리페치라고 합니다.주로 인접 로케이션을 프리페치할 때 사용됩니다.예를 들어, 명령어를 프리페치할 때 사용합니다.
  • 이 메커니즘은 이러한 '스트림버퍼'를 여러 개 추가하여 확장할 수 있습니다.이러한 '스트림버퍼'는 각각 별도의 프리페치스트림을 [9]유지합니다.새로운 미스마다 새로운 스트림버퍼가 할당되어 위에서 설명한 것과 같은 방법으로 동작합니다.
  • 스트림 버퍼의 이상적인 깊이는 다양한 벤치마크에[5] 대한 실험 대상이며 [10]관련된 나머지 마이크로 아키텍처에 따라 달라집니다.

경사 프리페치

이런 유형의 프리페치는 메모리 액세스 주소 간의 델타를 모니터링하고 메모리 액세스 내에서 패턴을 찾습니다.

규칙적인 진보

이 패턴에서는 \ s[2][11] 주소의 에 대해 연속적인 메모리 액세스가 이루어집니다.이 경우 프리페처는 s를 계산하고 이를 사용하여 프리페치를 위한 메모리 주소를 계산합니다.: ss가 4일 경우 프리페치되는 주소는 A+4가 됩니다.

불규칙한 진보

이 경우 연속되는 메모리액세스의 주소간의 델타는 가변적이지만, 패턴을 따릅니다.일부 프리페처 설계는[8][12][13] 이 속성을 이용하여 향후 액세스를 예측하고 프리페치를 수행합니다.

시간적 프리페치

이 클래스의 프리페처는 시간이 [14][15]지남에 따라 반복되는 메모리액세스 스트림을 찾습니다예를 들어 이 메모리액세스 스트림에서는 N, A, B, C, E, G, H, A, B, C, I, J, K, A, B, C, L, M, N, O, A, B, C, …, 스트림 A, B, C, …가 시간이 지남에 따라 반복됩니다.다른 설계 변형은 보다 효율적이고 성능 좋은 [16][17]구현을 제공하기 위해 노력했습니다.

콜라보레이션 프리페치

컴퓨터 애플리케이션은 다양한 액세스 패턴을 생성합니다.이러한 애플리케이션의 실행에 사용되는 프로세서와 메모리 서브시스템 아키텍처는, 이러한 애플리케이션이 생성하는 메모리 액세스 패턴을 한층 더 명확하게 합니다.그러므로 프리페치 방식의 효과와 효율은 종종 애플리케이션 및 이를 [18]실행하기 위해 사용되는 아키텍처에 좌우된다.최근의 연구는[19][20] 더 나은 프리페치 적용 범위와 정확도를 위해 여러 프리페치 방식을 시너지 효과를 낼 수 있는 협업 메커니즘을 구축하는 데 초점을 맞추고 있다.

소프트웨어 프리페치 방법

컴파일러 다이렉트 프리페치

컴파일러 다이렉트 프리페치는 반복 횟수가 많은 루프 내에서 널리 사용됩니다.이 기술에서 컴파일러는 미래의 캐시 미스를 예측하고 명령의 미스 패널티와 실행 시간에 기초하여 프리페치 명령을 삽입합니다.

이러한 프리페치는 비블로킹 메모리 동작입니다.즉, 이러한 메모리 액세스는 실제 메모리 액세스를 방해하지 않습니다.프로세서의 상태를 바꾸거나 페이지 장애를 일으키지는 않습니다.

소프트웨어 프리페치의 주요 장점 중 하나는 강제 캐시 누락 [2]횟수를 줄일 수 있다는 것입니다.

다음 예시는 캐시 성능을 향상시키기 위해 코드에 프리페치 명령을 추가하는 방법을 보여 줍니다.

다음과 같이 for 루프를 검토합니다.

위해서 (인트 i=0; i< >1024; i++) {     어레이1[i] = 2 * 어레이1[i]; } 

반복할 때마다 어레이 "array1"의 i 요소에th 액세스한다.따라서 다음과 같이 "프리페치" 명령을 삽입하여 향후 반복하여 액세스할 요소를 프리페치할 수 있습니다.

위해서 (인트 i=0; i< >1024; i++) {     프리페치 (어레이1 [i + k]);     어레이1[i] = 2 * 어레이1[i]; } 

여기서 프리페치 스트라이드(\ k 캐시 미스 패널티와 for 루프의 1회 반복 실행에 걸리는 시간의 2가지 요인에 의존합니다.예를 들어, 루프를 1회 반복하는 데 7사이클이 걸리고 캐시 미스 패널티가 49사이클인 k= / 7 {\ k=/7=이 있어야 합니다. 즉, 7개의 요소를 미리 추출해야 합니다.첫 번째 반복에서는 i가 0이 되기 때문에 7번째 요소를 프리페치합니다.이제 이 배열에서는 처음 7개의 액세스(i=0->6)가 여전히 누락됩니다(array1의 각 요소가 별도의 캐시 라인에 있다는 단순화된 가정 하에).

하드웨어와 소프트웨어의 프리페치 비교

  • 소프트웨어 프리페치에는 프로그래머 또는 컴파일러의 개입이 필요한 반면 하드웨어 프리페치에는 [2]특별한 하드웨어 메커니즘이 필요합니다.
  • 소프트웨어 프리페치는 프로그래머가 프리페치 명령을 핸드코딩해야 하기 때문에 정기적인 어레이 액세스가 있는 루프에서만 잘 동작하는 반면 하드웨어 프리페처는 실행 [2]프로그램의 동작을 기반으로 동적으로 동작합니다.
  • 또한 하드웨어 프리페치는 소프트웨어 [21]프리페치에 비해 CPU 오버헤드가 적습니다.

캐시 프리페치 메트릭

캐시 프리페치를[2] 판단하기 위한 세 가지 주요 지표가 있습니다.

범위

커버리지란 프리페치(prefetching)로 인해 제거되는 전체 미스(miss)의 비율입니다.

누락 수

Misses (+ (통해 되지 않음 {\

정확성.

정확도는 유용한 총 프리페치의 비율입니다. 즉, 프로그램에서 실제로 실행된 총 프리페치에 대한 메모리 주소 수의 비율을 참조했습니다.

정확도가 완벽하다는 것은 실수가 없다는 것을 의미할 수 있지만, 이는 사실이 아닙니다.프리페치된 블록이 캐시에 직접 배치되면 프리페치 자체가 새로운 누락이 발생할 수 있습니다.프리페치 없이 확인할 수 있는 총 미스 수의 극히 일부이지만, 이는 0이 아닌 미스 수입니다.

적시성

적시성의 질적 정의는 블록이 실제로 참조되는 경우와 비교하여 얼마나 일찍 사전 추출되는지를 나타냅니다.적시에 대해 자세히 설명하는 예는 다음과 같습니다.

각 반복 실행에는 3 사이클이 걸리고 '프리페치' 조작에는 12 사이클이 걸리는 for 루프를 고려합니다.즉, 프리페치된 데이터를 유용하게 사용하려면 사용 전에 프리페치/ 4({ )의 반복을 시작해야 적시성을 유지할 수 있습니다.

「 」를 참조해 주세요.

레퍼런스

  1. ^ a b Smith, Alan Jay (1982-09-01). "Cache Memories". ACM Comput. Surv. 14 (3): 473–530. doi:10.1145/356887.356892. ISSN 0360-0300. S2CID 6023466.
  2. ^ a b c d e f Solihin, Yan (2016). Fundamentals of parallel multicore architecture. Boca Raton, FL: CRC Press, Taylor & Francis Group. p. 163. ISBN 978-1482211184.
  3. ^ Baer, Jean-Loup; Chen, Tien-Fu (1991-01-01). An Effective On-chip Preloading Scheme to Reduce Data Access Penalty. 1991 ACM/IEEE Conference on Supercomputing. Albuquerque, NM, USA: ACM. pp. 176–186. CiteSeerX 10.1.1.642.703. doi:10.1145/125826.125932. ISBN 978-0897914598.
  4. ^ Kennedy, Porterfield, Allan (1989-01-01). Software methods for improvement of cache performance on supercomputer applications (Thesis). Rice University. hdl:1911/19069.
  5. ^ a b c Jouppi, Norman P. (1990). "Improving direct-mapped cache performance by the addition of a small fully-associative cache and prefetch buffers". Proceedings of the 17th annual international symposium on Computer Architecture - ISCA '90. New York, New York, USA: ACM Press. pp. 364–373. CiteSeerX 10.1.1.37.6114. doi:10.1145/325164.325162. ISBN 0-89791-366-3.
  6. ^ Chen, Tien-Fu; Baer, Jean-Loup (1995-05-01). "Effective hardware-based data prefetching for high-performance processors". IEEE Transactions on Computers. 44 (5): 609–623. doi:10.1109/12.381947. ISSN 0018-9340. S2CID 1450745.
  7. ^ Palacharla, S.; Kessler, R. E. (1994-01-01). Evaluating Stream Buffers As a Secondary Cache Replacement. 21st Annual International Symposium on Computer Architecture. Chicago, IL, USA: IEEE Computer Society Press. pp. 24–33. CiteSeerX 10.1.1.92.3031. doi:10.1109/ISCA.1994.288164. ISBN 978-0818655104.
  8. ^ a b Grannaes, Marius; Jahre, Magnus; Natvig, Lasse (2011). "Storage Efficient Hardware Prefetching using Delta-Correlating Prediction Tables". Journal of Instruction-Level Parallelism (13): 1–16. CiteSeerX 10.1.1.229.3483.
  9. ^ Ishii, Yasuo; Inaba, Mary; Hiraki, Kei (2009-06-08). "Access map pattern matching for data cache prefetch". Proceedings of the 23rd International Conference on Supercomputing. ICS '09. New York, NY, USA: Association for Computing Machinery. pp. 499–500. doi:10.1145/1542275.1542349. ISBN 978-1-60558-498-0. S2CID 37841036.
  10. ^ Srinath, Santhosh; Mutlu, Onur; Kim, Hyesoon; Patt, Yale N. (February 2007). Feedback Directed Prefetching: Improving the Performance and Bandwidth-Efficiency of Hardware Prefetchers. 2007 IEEE 13th International Symposium on High Performance Computer Architecture. pp. 63–74. doi:10.1109/HPCA.2007.346185. ISBN 978-1-4244-0804-7. S2CID 6909725.
  11. ^ Kondguli, Sushant; Huang, Michael (November 2017). T2: A Highly Accurate and Energy Efficient Stride Prefetcher. 2017 IEEE International Conference on Computer Design (ICCD). pp. 373–376. doi:10.1109/ICCD.2017.64. ISBN 978-1-5386-2254-4. S2CID 11055312.
  12. ^ Shevgoor, Manjunath; Koladiya, Sahil; Balasubramonian, Rajeev; Wilkerson, Chris; Pugsley, Seth H; Chishti, Zeshan (December 2015). Efficiently prefetching complex address patterns. 2015 48th Annual IEEE/ACM International Symposium on Microarchitecture (MICRO). pp. 141–152. doi:10.1145/2830772.2830793. ISBN 9781450340342. S2CID 15294463.
  13. ^ Kim, Jinchun; Pugsley, Seth H.; Gratz, Paul V.; Reddy, A.L. Narasimha; Wilkerson, Chris; Chishti, Zeshan (October 2016). Path confidence based lookahead prefetching. 2016 49th Annual IEEE/ACM International Symposium on Microarchitecture (MICRO). pp. 1–12. doi:10.1109/MICRO.2016.7783763. ISBN 978-1-5090-3508-3. S2CID 1097472.
  14. ^ Joseph, Doug; Grunwald, Dirk (1997-05-01). "Prefetching using Markov predictors". Proceedings of the 24th Annual International Symposium on Computer Architecture. ISCA '97. New York, NY, USA: Association for Computing Machinery. pp. 252–263. doi:10.1145/264107.264207. ISBN 978-0-89791-901-2. S2CID 434419.
  15. ^ Collins, J.; Sair, S.; Calder, B.; Tullsen, D.M. (November 2002). Pointer cache assisted prefetching. 35th Annual IEEE/ACM International Symposium on Microarchitecture, 2002. (MICRO-35). Proceedings. pp. 62–73. doi:10.1109/MICRO.2002.1176239. ISBN 0-7695-1859-1. S2CID 5608519.
  16. ^ Jain, Akanksha; Lin, Calvin (2013-12-07). "Linearizing irregular memory accesses for improved correlated prefetching". Proceedings of the 46th Annual IEEE/ACM International Symposium on Microarchitecture. MICRO-46. New York, NY, USA: Association for Computing Machinery. pp. 247–259. doi:10.1145/2540708.2540730. ISBN 978-1-4503-2638-4. S2CID 196831.
  17. ^ "Making Temporal Prefetchers Practical: The MISB Prefetcher - Research Articles - Arm Research - Arm Community". community.arm.com. Retrieved 2022-03-16.
  18. ^ Kim, Jinchun; Teran, Elvira; Gratz, Paul V.; Jiménez, Daniel A.; Pugsley, Seth H.; Wilkerson, Chris (2017-05-12). "Kill the Program Counter: Reconstructing Program Behavior in the Processor Cache Hierarchy". ACM SIGPLAN Notices. 52 (4): 737–749. doi:10.1145/3093336.3037701. ISSN 0362-1340.
  19. ^ Kondguli, Sushant; Huang, Michael (2018-06-02). "Division of labor: a more effective approach to prefetching". Proceedings of the 45th Annual International Symposium on Computer Architecture. ISCA '18. Los Angeles, California: IEEE Press. pp. 83–95. doi:10.1109/ISCA.2018.00018. ISBN 978-1-5386-5984-7. S2CID 50777324.
  20. ^ Pakalapati, Samuel; Panda, Biswabandan (May 2020). Bouquet of Instruction Pointers: Instruction Pointer Classifier-based Spatial Hardware Prefetching. 2020 ACM/IEEE 47th Annual International Symposium on Computer Architecture (ISCA). pp. 118–131. doi:10.1109/ISCA45697.2020.00021. ISBN 978-1-7281-4661-4. S2CID 218683672.
  21. ^ Callahan, David; Kennedy, Ken; Porterfield, Allan (1991-01-01). Software Prefetching. Fourth International Conference on Architectural Support for Programming Languages and Operating Systems. Santa Clara, CA, USA: ACM. pp. 40–52. doi:10.1145/106972.106979. ISBN 978-0897913805.