고성능 선형대수 자동 생성기 Linnea
초록
Linnea는 고수준 선형대수 식을 입력받아 BLAS·LAPACK 커널 호출 시퀀스로 변환하는 자동 코드 생성기로, 수식 재작성과 그래프 탐색을 통해 연산량을 최소화하고 25개의 실험 사례에서 기존 Matlab, Julia, Eigen, Armadillo 대비 최대 10배 이상의 속도 향상을 달성한다.
상세 분석
Linnea는 고수준 선형대수 식을 입력으로 받아 BLAS·LAPACK 커널 호출 시퀀스로 변환하는 자동 코드 생성기이다. 기존 Matlab, Julia, Eigen 등은 사용자가 수식을 그대로 입력하면 내부적으로 단순 매핑을 수행해 최적화가 부족한 경우가 많다. Linnea는 입력 식을 문법(그림 1)으로 파싱하고, 행렬에 대칭, SPD, 삼각 등 속성을 명시할 수 있게 한다. 핵심은 대수적 재작성 규칙과 패턴 매칭을 이용해 식을 여러 형태로 변형하고, 각 형태에서 사용 가능한 커널을 탐색한다. 탐색 과정은 파생 그래프를 구축하며, 노드는 현재 남은 식을, 간선은 적용된 커널과 그 비용을 저장한다. 폭우선 탐색(BFS)으로 그래프를 확장하고, 일정 수의 단말 노드가 모이면 비용 함수(플롭·메모리·스레드 등) 기반 최단 경로를 선택해 최적 프로그램을 도출한다. 재작성 단계에서는 분배법칙, 결합법칙, 전치·역연산 교환 등 수학적 정리를 적용해 연산량을 감소시킨다. 또한 동일 부분식이 여러 경로에서 생성될 경우, 그래프 병합을 통해 중복을 제거한다(그림 5). 구현은 Python으로 작성됐으며, 현재 실수 연산과 멀티스레드 BLAS만 지원한다. 출력은 Julia 코드를 생성하는데, 이는 저수준 BLAS·LAPACK 래퍼와 고수준 언어의 장점을 동시에 제공한다. 실험에서는 25개의 실제 응용 문제에 대해 Linnea가 Matlab, Julia, Eigen, Armadillo보다 일관되게 빠른 결과를 보였으며, 최고 10배 이상의 속도 향상을 기록했다. 코드 생성 시간도 수분 수준으로 인간 전문가보다 훨씬 짧았다. 한계점으로는 복소수 지원 부재, 속성 추론 자동화 부족, 매우 큰 식에 대한 그래프 폭발 위험 등이 있다. 향후 작업으로는 자동 속성 추론, GPU 커널 통합, 동등 포화(EQ)와 같은 보다 강력한 탐색 기법 도입이 제시된다.
댓글 및 학술 토론
Loading comments...
의견 남기기