현대 하드웨어 가속기는 특수 명령어와 긴밀하게 관리되는 메모리 계층 구조를 결합하여 높은 성능을 달성합니다. 이러한 명령어들은 피연산자(operands)에 엄격한 레이아웃 요구사항을 부과합니다: 텐서 조각이 어디에 위치해야 하는지, 어떻게 구성되어야 하는지, 그리고 병렬 유닛들이 어떻게 접근해야 하는지를 말입니다. 이러한 명령어 가시적 레이아웃(instruction-visible layout)은 커널 성능에 매우 중요하며, 명령어가 올바르게 실행되는지 여부와 발생하는 데이터 이동량을 결정하기 때문입니다. 그러나 기존 컴파일러들은 레이아웃 요구사항을 수작업으로 작성된 프로그램과 로컬 스케줄링 규칙 전반에 걸쳐 분산시키거나, 단일 대상(target) 클래스에 특화된 레이아웃 표현 및 변환 기능을 제공합니다. 두 접근 방식 모두 동일한 추상화 격차를 노출합니다: 즉, 백엔드 전반에 걸친 명령어 레이아웃 요구사항을 위한 통합 모델의 부재입니다.
본 논문은 Arknife라는 재대상화 컴파일러를 제시하며, 이는 명령어 가시적 레이아웃을 일급(first-class) 명령어 의미론으로 취급합니다. 핵심 아이디어는 제약 기반 레이아웃 대수학(constraint-based layout algebra)입니다: 텐서 레이아웃은 논리적 축(logical axes)을 병렬 레벨과 메모리 공간에 걸쳐 있는 하드웨어 축(hardware axes)에 매핑합니다. 명령어 피연산자는 레이아웃 요구사항을 선언하고, 대상에서 제공하는 복구 메커니즘(repairs)이 충돌을 해결합니다. 그런 다음 레이아웃은 프로그램 전반에 걸쳐 전역적으로 해결됩니다. ISA(Instruction Set Architecture)별 레이아웃 사실들은 컴파일러 내부에 하드코딩되는 것이 아니라 대상 측의 명령어 설명을 통해 제공됩니다. 재대상화 과정에서는 새로운 대상을 정의하고 그 피연산자 요구사항을 지정하는 동시에, 기존의 레이아웃 대수학 및 솔버를 재사용합니다.
우리는 x86 CPU, Hexagon NPU, 그리고 NVIDIA A100 GPU 전반에 걸쳐 Arknife를 평가했습니다. Arknife는 A100에서 cuBLAS와 일치하며, x86 및 Hexagon에서는 각각 2.17배, 3.78배, 그리고 재대상화 컴파일러 MISAAL과 비교했을 때 5.08배, 4.53배의 성능 향상을 보였습니다.