고성능 선형대수 코드를 위한 LAW 도구
초록
본 논문은 Fortran 95의 고급 기능을 활용해 LAPACK·ScaLAPACK 호출을 추상화하는 LAW(Library for Linear Algebra) 라이브러리를 제안한다. 파생형, 연산자 오버로드, 선택적 인자, 조건부 컴파일 등을 이용해 단일 소스 코드만으로 순차, 공유‑메모리, 분산‑메모리 실행 모델에 매핑할 수 있다. Chebyshev 행렬 지수화 알고리즘을 사례로 적용해 생산성 향상과 코드 유지보수성을 입증한다.
상세 분석
LAW 라이브러리는 Fortran 95의 ad‑hoc polymorphism(다형성)과 파생형(derived‑type)을 핵심 설계 요소로 채택한다. 사용자 입장에서는 고수준 인터페이스인 matrix와 vector 파생형을 선언하고, 연산자(+, *, =)와 함수(dot_product, gemm)를 호출한다면 내부적으로는 LAPACK, ScaLAPACK, PBLAS 중 적절한 구현이 선택된다. 이 선택 메커니즘은 컴파일 시점에 #ifdef 형태의 조건부 컴파일 플래그와 링커 단계의 라이브러리 바인딩을 결합해 구현한다. 예를 들어, USE_LAW_SERIAL 플래그가 정의되면 순차 BLAS/LAPACK 루틴을, USE_LAW_MPI가 정의되면 ScaLAPACK/PBLAS 루틴을 자동으로 연결한다.
선택적 인자와 인터페이스 오버로드는 함수 시그니처를 간소화한다. solve(A, b, x, trans='N')와 같이 trans 인자를 생략하면 기본값이 적용돼 사용자는 물리적 의미에 집중할 수 있다. 또한, 연산자 오버로드를 통해 C = A * B와 같은 수식형 코드를 그대로 유지하면서 내부적으로는 DGEMM 혹은 PDGEMM 호출로 변환한다. 이는 코드 가독성을 크게 향상시키고, 기존 LAPACK 기반 코드를 최소 수정으로 LAW 기반으로 전환할 수 있게 한다.
조건부 컴파일은 플랫폼 독립성을 보장한다. Fortran 95 표준에 포함된 SELECT CASE와 MODULE 구조를 이용해 컴파일러가 지원하는 기능을 탐지하고, 지원되지 않는 경우 대체 구현을 제공한다. 이렇게 함으로써 최신 GPU 가속 라이브러리(예: cuBLAS)와도 향후 확장이 용이하도록 설계되었다.
성능 측면에서는 래퍼 호출 비용이 거의 무시할 수준임을 실험적으로 확인했다. 핵심 연산은 여전히 BLAS/LAPACK 수준에서 수행되며, LAW는 단순히 인자 전달과 타입 변환을 담당한다. 따라서 고성능 컴퓨팅 환경에서 추가 오버헤드가 발생하지 않는다.
마지막으로, 논문은 Chebyshev 행렬 지수화 알고리즘을 구현한 사례를 제시한다. Hermitian 행렬에 대한 고차 다항식 근사를 수행하는 이 알고리즘은 다중 스케일 반복이 필요해 복잡도가 높다. LAW를 사용하면 행렬‑벡터 곱(y = A * x)과 스칼라 연산을 동일한 인터페이스로 기술할 수 있어, 순차 버전과 MPI 기반 분산 버전을 동일 소스 코드로 컴파일한다. 실험 결과, 분산 버전에서 64코어까지 거의 선형 확장성을 보였으며, 코드 라인 수는 기존 LAPACK 기반 구현 대비 30 % 이상 감소했다.
이러한 설계 철학과 구현 결과는 과학·공학 분야에서 복잡한 선형대수 코드를 빠르게 프로토타이핑하고, 다양한 하드웨어 환경에 이식하는 데 큰 도움이 될 것으로 기대된다.