처리-메모리(Processing-in-Memory, PIM)는 특히 낮은 국소성(locality)을 갖는 데이터 집약적 애플리케이션을 효율적으로 처리하기 위해, 연산 유닛을 메모리 근처 또는 메모리 내부에 배치함으로써 메모리 병목을 극복하고자 활발히 연구되어 왔다. 우리는 PIM 계산을 한 번의 DRAM 명령으로 몇 개의 뱅크가 수행하는지에 따라 in-DRAM PIM을 뱅크-당(per-bank) 및 전체-뱅크(all-bank)로 분류할 수 있다. 뱅크-당 PIM은 한 번의 PIM 실행에서 단 하나의 뱅크만 동작하여 낮은 성능을 제공하지만, 표준 DRAM 인터페이스를 보존하고 PIM 실행 중 비-PIM 요청을 처리한다. 반면 전체-뱅크 PIM은 모든 뱅크를 동작시켜 높은 성능을 달성하나, 열 및 전력 소모와 같은 설계상의 문제를 수반한다. 우리는 표준 JEDEC DRAM 인터페이스를 보존하면서 이상적인 전체-뱅크 PIM 성능을 달성하기 위해 메모리-연산 분리(decoupling) 실행을 제안하며, 즉 뱅크-당 실행을 수행하는 방식으로 상용 플랫폼에 쉽게 적응할 수 있다. PIM 실행은 메모리 단계와 연산 단계의 두 단계로 나눈다. 메모리 단계에서는 한 뱅크에서 뱅크 전용(bank-private) 피연산자를 읽어 PIM 엔진의 레지스터에 뱅크별로 저장한다. 연산 단계에서는 PIM 엔진을 메모리 어레이에서 분리하고, 표준 읽기/쓰기 명령을 사용하여 뱅크 공유(bank-shared) 피연산자를 브로드캐스트(broadcast)함으로써 모든 뱅크가 동시에 연산을 수행하도록 하여, 전체-뱅크 PIM의 연산 처리량을 달성한다. 연산 단계의 확장, 즉 전체-뱅크 실행 기회를 최대화하기 위해, 뱅크 전용 및 뱅크 공유 피연산자를 식별하기 위한 컴파일러 분석 및 코드 생성 기법을 도입한다. 우리는 이 분리된 PIM에서 Level-2/3 BLAS, 멀티 배치(multi-batch) LSTM 기반 Seq2Seq 모델, 그리고 BERT의 성능을 상용 컴퓨팅 플랫폼과 비교하였다. Level-3 BLAS에서 CPU, GPU, 및 뱅크-당 PIM 대비 각각 75.8배, 1.2배, 4.7배의 속도 향상을 달성했으며, 이상적인 전체-뱅크 PIM 성능의 최대 91.4%까지 도달하였다. 또한, 우리의 분리된 PIM은 GPU 및 뱅크-당 PIM보다 각각 72.0%, 78.4% 적은 전력을 소모했지만, 이상적인 전체-뱅크 PIM보다 7.4% 더 많았다.
*본 초록은 AI를 통해 원문을 번역한 내용입니다. 정확한 내용은 하기 원문에서 확인해주세요.