본문 바로가기
논문

GCN 아키텍쳐 상에서의 OpenCL을 이용한 GPGPU 성능향상 기법 연구

by Lizardee 2023. 8. 22.
초록

현재 프로그램이 운용되는 시스템은 기존의 싱글코어 및 멀티코어 환경을 넘어서 매니코어, 부가 프로세스 및 이기종 환경까지 그 영역이 확장되고 있는 중이다. 하지만 기존 연구의 경우 NVIDIA 벤더에서 나온 아키텍쳐 및 CUDA로의 병렬화가 주로 이루어졌고, AMD에서 나온 범용 GPU 아키텍쳐인 GCN 아키텍쳐에 대한 성능향상에 관한 연구는 제한적으로 이루어졌다.
 
이런 점을 고려해 본 논문에서는 GCN 아키텍쳐의 GPGPU 환경인 OpenCL 내에서의 성능향상 기법에 대해 연구하고, 실질적인 성능 향상을 보였다.
구체적으로, 행렬 곱셈과 컨볼루션을 적용한 GPGPU 프로그램을 본 논문에서 제시한 성능향상 기법을 통해 최대 30% 이상의 실행시간을 감소시켰으며, 커널 이용률 또한 40% 이상 높였다.
 


1. 서론

현재 컴퓨터 구조의 발전 방향은 기존의 싱글 코어, 멀티 코어, 매니 코어를 넘어 점점 더 이기종 환경으로 발전하고 있다. 이러한 이기종 환경에서는 기존 컴퓨터의 연산을 담당해왔던 CPU 외에 특수한 목적을 위해 설계된 DSP(Digital Signal Processor), 또는 FPGA(Field Programmable Gate Array), 특히 GPU(Graphics Processing Units)를 이용하는 프로그램의 기반이 확장되었다.
기존의 CPU 코어만의 연산으로는 시간이 오래 걸리거나 처리할 수 없었던 다양한 물체들의 상호작용을 다루는 입자 시뮬레이션이나 인공지능과 같은 영역을 GPU와 같은 가속기가 처리할 수 있게 됨에 따라, 프로그램 개발 방향은 점점 더 GPU 환경으로 옮겨가고 있는 중이다.
기존의 CPU를 기반으로 설계된 프로그램은 근본적으로 구조가 다른 GPU 디바이스 상에서도 동일한 성능으로 실행된다는 보장이 없기 때문에, GPGPU(General-Purpose Graphics Processing Unit) 환경에서의 성능향상에 관한 연구가 현재 진행중이다.
 
 

2. GCN(Graphic Core Next) 아키텍쳐

2.1 GCN 아키텍쳐 구조
AMD에서 개발항 GCN 아키텍쳐는 2011년 출시한 GPU의 마이크로 아키텍쳐와 명령어 집합을 통칭한다. 
주요 특징은 다음과 같다.

  • Compute Units(CU)
    : GCN 아키텍쳐 내 처리를 담당하는 프로세스
  • Wavefront
    : GCN GPU 내 하나의 엑티브 하드웨어 쓰레드
  • SIMD Vector Unit
    : 각 코어(CU) 안의 SIMD 벡터 유닛

 
2.2 메모리 구성

OpenCL의 메모리 구조는 추상적으로 정의되어 있다. 캐시 일관성 적용이 구조적으로 힘든 GPU의 경우 소프트웨어 관리 캐시를 제공하며, 개발자에게 메모리 공간의 매핑을 맡긴다.

  • 글로벌 메모리
    : GPU 안에서 일반 시스템 RAM과 같은 역할을 하는 메모리
  • 상수 메모리
    : 읽기 전용 데이터
  • 로컬 메모리
    : 연산 디바이스 내에서(GCN 디바이스의 경우 CU) 유일한 공간을 가지는 스크래치패드 메모리
  • 프라이빗 메모리
    : 작업 그룹 내 하나의 작업 아이템이 독점적으로 소유하고 있는 메모리

 
2.3 커널 동작
OpenCL 호스트 함수는 호스트와 커널 사이의 연결에 대한 동작, 커널의 세부사항을 설정하며, 커널 설정에 따라 타겟 디바이스 내부의 동작 또한 변화한다. 변화의 대상에는 작업 아이템 및 작업 그룹의 위치 등이 있으며, 이러한 동작은 다른 작업 그룹과의 통신, 동기화 등에 영향을 끼친다.OpenCL 내에서 커널 인스턴스(또는 작업 아이템)는 전체 실행공간을 구성하고 있다. 프로그램이 커널 영역으로 접근하면 OpenCL 문맥(Context) 안에서 정의된 작업 풀(pool)인 큐 객체(queue object)가 함수를 호출해 큐 안의 작업들을 처리한다. 이때 실행 공간은 1, 2, 최대 3차원으로 정의된다. 실행 공간 내에서 처리되는 작업들은 각각의 하드웨어 유닛에서 서로 독립적으로 동작한다. 독립적으로 실행되는 작업 아이템은 SIMD 레인 개수에 비례해 하나의 작업 그룹을 이루며, 작업 그룹의 실행은 CU 안에서 이뤄진다. 
 
 

3. 성능향상 기법

본 장에서는 GCN 아키텍처 구조를 분석하고 그에 따른 성능 향상 기법을 제안한다.
이를 위해 커널의 성능에 직접적으로 연관된 두 가지 요소, LDS 이용과 커널 동작을 분석하고, 그에 따른 성능 향상 기법을 제시한다.
 
3.1 LDS(Local Data Share) 적재
LDS(로컬 메모리)는 글로벌 메모리에 비해 최대 10배 더 빠른 대역폭을 가지며, 실제 어플리케이션에서 약 3배 이상의 속도로 CU와 통신한다. 또한 LDS 내의 데이터는 재사용이 가능하다는 장점이 있다. LDS는 주로 CU에 의한 복잡한 계산을 필요로 하는 데이터를 적재하며, 같은 작업그룹 내의 데이터 공유에 쓰인다. 
 
커널이 동작하는 CU 내 LDS는 명시적으로는 분리되어 있지만, 실제 SIMD 레인에서 다수의 CU와 같은 메모리 공간을 차지하기 때문에, LDS 사용에 대한 제한은 상대적으로 적다. 이러한 점을 고려할 때, 직접적으로 조작할 수 있는 LDS의 크기는 식 (1)과 같다.

위 식에서 LMS(Local Memory Size)는 가용 로컬 메모리 사이즈를 나타내고, Ncv와 SIZElds는 각각 CU의 개수와 디바이스 내 LDS의 크기를 나타낸다.처리가 요구되는 전체 메모리에 대해서 식 (1)만큼의 데이터를 LDS에 할당할 경우, GCN 아키텍쳐 내에서의 테스크는 CU 내에서 해당 크기만큼의 처리 데이터에 대한 저지연 접근을 보장받는다. 이를 통해 GPGPU 어플리케이션은 글로벌 메모리와 직접적으로 통신하는 대신 글로벌 메모리의 데이터를 LMS 크기만큼의 LDS에 복사, 더 낮은 지연시간으로 커널과의 상호작용이 가능하다.
 
 
3.2 작업그룹 조정
커널 이용률은 CU와 PE의 이용률과 높은 상관관계를 가진다.OpenCL은 커널 동작에 대해 상세한 가이드라인을 제시하는 대신, 작업 차원의 수(1, 2, 또는 3)와 지역 작업 그룹 분할로 이를 대신하였다. GCN 아키텍쳐에서 이러한 역할을 하는 요소는 웨이브프론트로, 커널 이용률은 웨이브프론트의 동작과 깊은 상관관계를 가지고 있다.
 
웨이브프론트의 이용률은 전역 작업그룹과 지역 작업그룹의 크기 분할로 결정된다. 따라서 커널의 성능향상을 위해서는 작업 그룹 및 작업 아이템의 개수를 명시적으로 지정해줘야 한다.
 
GCN 디바이스 내 웨이브프론트는 모두 2의 승수 개의 작업 아이템으로 구성되어 있다. 하나의 웨이브프론트는 SIMD 레인을 기준으로 실행되기 때문에, 2의 승수만큼의 작업 아이틈이 작업 그룹을 이룰 때 높은 SIMD 이용률을 보인다. 작업 그룹을 웨이브프론트 크기에 맞추면, 최적의 작업그룹의 크기는 32의 배수(32, 64, 128, 192, 256)로 나타낼 수 있으며, 이는 작업 아이템과의 상호작용이 얼마나 필요한가에 따라 의존적이다. 
 
 

4. 성능 분석

본 장에서는 제안한 성능향상 기법을 기존의 병렬 알고리즘 프로그램에 적용, 정량적으로 얼마만큼의 성능향상이 있는지를 확인한다.
 
4.2 행렬 곱셈

병렬화된 행렬 프로그램에 대한 기존 코드와 성능향상 기법을 적용한 코드의 커널 이용률을 비교한 표

 
4.3 이미지 컨볼루션(convolution)

커널 이용률

 
 

5. 결론

본 논문은 이기종 환경 내에서 동작하는 프로그램에 대한 GPU, 그 중에서도 GCN 아키텍쳐 성능향상 기법에 대해 다뤘다.
이를 위해 GCN 아키텍쳐에 대한 특징을 파악하고, 제3장에서 앞장에서 연구한 GCN  아키텍쳐의 특징을 토대로 한 GCN 아키텍쳐 기반 GPGPU 성능향상 기법을 제안하였다.
제4장에서는 제안한 최적화 기법을 토대로 두 가지 프로그램에 대한 최적화를 진행하고, 향상된 성능을 정량적으로 보임과 함께 본 연구에서 제안한 GCN 아키텍쳐 기반 GPU 성능향상 기법에 대한 타당성을 입증하였다. 이를 통해 범용 병렬 컴퓨팅 프레임워크인 OpenCL과 GCN 아키텍쳐의 관계에 대해 살펴보았고, GCN 아키텍쳐 기반 GPU의 GPGPU 최적화 기법을 제시하였다.
 
 
 
 
https://www.dbpia.co.kr/journal/articleDetail?nodeId=NODE07370609 

GCN 아키텍쳐 상에서의 OpenCL을 이용한 GPGPU 성능향상 기법 연구 | DBpia

우동희, 김윤호 | 한국전자거래학회지 | 2018.02

www.dbpia.co.kr