GPU용 고성능 LU 분해를 위한 동등 이중벡터화 기법
본 논문은 밀집·희소 행렬에 대해 GPU 상에서 병렬 LU 분해를 수행하기 위한 새로운 알고리즘인 Equal bi‑Vectorized (EBV) 방법을 제안한다. 삼각 행렬을 먼저 이중 벡터화하고, 이후 벡터들을 동일하게 정규화함으로써 스레드 간 부하를 균등하게 배분한다. 실험 결과는 기존의 블록 기반 혹은 행‑열 분할 방식보다 높은 처리량을 보이며, 다중
초록
본 논문은 밀집·희소 행렬에 대해 GPU 상에서 병렬 LU 분해를 수행하기 위한 새로운 알고리즘인 Equal bi‑Vectorized (EBV) 방법을 제안한다. 삼각 행렬을 먼저 이중 벡터화하고, 이후 벡터들을 동일하게 정규화함으로써 스레드 간 부하를 균등하게 배분한다. 실험 결과는 기존의 블록 기반 혹은 행‑열 분할 방식보다 높은 처리량을 보이며, 다중 GPU 및 다른 병렬 프레임워크와도 호환 가능함을 입증한다.
상세 요약
EBV 알고리즘은 기존 GPU 기반 LU 분해에서 발생하는 스레드 불균형 문제를 근본적으로 해결하려는 시도로 볼 수 있다. 전통적인 방법은 행 또는 열 단위로 블록을 할당하고, 각 블록이 수행해야 할 연산량이 행렬 구조에 따라 크게 달라지는 경우가 많다. 특히 희소 행렬에서는 비대칭적인 비제로 패턴이 스레드 워크로드를 급격히 편향시켜 성능 저하를 초래한다. 논문은 이러한 문제를 ‘이중 벡터화(bi‑vectorizing)’라는 단계에서 접근한다. 구체적으로, L·U 분해 과정에서 생성되는 하위 삼각 행렬(L)과 상위 삼각 행렬(U)을 각각 두 개의 연속적인 벡터 스트림으로 변환한다. 이때 각 벡터는 메모리 연속성을 확보하도록 재배열되며, GPU의 워프(warp) 단위가 동시에 접근할 수 있도록 설계된다.
그 다음 단계인 ‘벡터 동등화(equalizing)’는 각 워프가 담당하는 연산량을 동일하게 맞추는 과정이다. 저자는 각 벡터의 길이와 비제로 원소 수를 사전에 분석하고, 워프당 할당할 원소 수를 동적으로 조정한다. 이를 위해 CUDA의 동적 파티셔닝(dynamic partitioning)과 원자적 연산을 활용해 워프 간 작업을 재분배한다. 결과적으로, 워프 내에서 발생하는 스레드 발산(thread divergence)과 메모리 접근 불균형이 크게 감소한다.
성능 평가에서는 dense 4096×4096 행렬과 여러 실세계 희소 행렬(예: CFD, 전자기 시뮬레이션)에서 기존 cuBLAS LU, MAGMA의 LU, 그리고 블록‑LU 기반 커스텀 커널과 비교하였다. EBV는 평균 1.8배~2.3배의 속도 향상을 보였으며, 특히 비대칭 희소 행렬에서 3배 이상 가속을 달성했다. 또한, 다중 GPU 환경에서 동일한 알고리즘을 적용했을 때, 통신 오버헤드를 최소화하기 위해 각 GPU가 독립적인 벡터 세트를 처리하도록 설계했으며, 확장성 테스트에서 4 GPU 구성에서 거의 선형에 가까운 스케일링을 확인했다.
하지만 몇 가지 한계점도 존재한다. 첫째, 이중 벡터화 과정에서 추가적인 메모리 복사와 재배열 비용이 발생한다. 논문에서는 이 비용이 전체 실행 시간의 5~8% 수준에 불과하다고 주장하지만, 메모리 대역폭이 제한된 구형 GPU에서는 오히려 성능 저하 요인이 될 수 있다. 둘째, 벡터 동등화 단계에서 사용된 동적 파티셔닝 로직은 복잡한 제어 흐름을 포함하므로, 컴파일러 최적화에 민감하다. 셋째, 현재 구현은 정방형 행렬에 최적화돼 있어, 비정방형 혹은 블록 구조가 명확히 정의된 행렬에 대해서는 추가적인 튜닝이 필요하다.
전반적으로 EBV는 GPU 기반 LU 분해의 워크로드 균형 문제를 새로운 관점에서 접근한 의미 있는 시도이며, 특히 대규모 희소 행렬을 다루는 과학·공학 시뮬레이션에서 실용적인 가치를 제공한다. 향후 연구에서는 메모리 재배열 비용을 최소화하는 인‑플레이스(in‑place) 벡터화 기법과, 다른 수치 해석(예: Cholesky, QR)에도 적용 가능한 일반화된 프레임워크 개발이 기대된다.
📜 논문 원문 (영문)
🚀 1TB 저장소에서 고화질 레이아웃을 불러오는 중입니다...