• 검색 결과가 없습니다.

일반논문5. GPGPU 기초 및 응용 사례_수정

N/A
N/A
Protected

Academic year: 2021

Share "일반논문5. GPGPU 기초 및 응용 사례_수정"

Copied!
8
0
0

로드 중.... (전체 텍스트 보기)

전체 글

(1)

GPGPU 기초 및 응용 사례

장한용, 한정현 (고려대학교 정보통신대학)

1. 서론

컴퓨터 그래픽스 분야는 지난 수십년 동안 빠른 발전을 이루어 왔다. 그 배경으로는 영 화, 게임 산업에서의 수요 증가와 함께 그래픽스 하드웨어의 급속한 발전을 들 수 있다. 통 상 Graphics Processing Unit(GPU)으로 알려진 그래픽스 하드웨어는 성능 대비 낮은 가격 대를 유지하여 PC 보급률이 매우 높으며, 최근에는 고성능 계산 (High Performance Computing) 시스템에도 이용되고 있다.

이러한 그래픽스 하드웨어의 빠른 연산 능력을 이용하여 기존 컴퓨터 및 공학 분야에서 다루던 복잡한 문제들을 빠르게 처리하는 연구가 활발히 진행되고 있다. 이 연구는 GPU를 이용하여 문제를 해결하려는 시도로, GPGPU(General Purpose GPU 혹은 General-Purpose Computation on GPU)로 불린다. 본 논문은 GPGPU의 개요 및 실제 활 용 사례를 소개하고, 앞으로의 발전 가능성을 제시한다.

본 논문의 구성은 다음과 같다. 2절은 GPGPU에 대하여 소개하고, 3절은 GPU 프로그래 밍의 기초를 설명한다. 4절에서는 저자들이 수행한 GPGPU 적용 사례를 상세히 기술한다.

5절에서는 GPGPU 프로그래밍 언어로 주목받고 있는 CUDA에 대해 간략히 소개하고, 6절 에서 본 논문을 맺는다.

2. GPGPU 소개 2.1 연산 성능

[그림1] GPU와 CPU의 부동소수점 연산 성능

GPU는 기본적으로 렌더링(Rendering)을 위해 개발되었는데, 렌더링 연산은 병렬처리에 적합하다. 이는 GPU가 CPU에 비해 상대적으로 작은 프로세서를 다수 갖추고 있기 때문이 다. 최신 GPU는 100개 이상의 코어를 장착하고 있다. GPU의 이러한 병렬적 특징은 GPU 코어의 설계 및 제작을 용이하게 하고, CPU에 비해 우월한 계산 성능을 구현할 수 있게 한 다.

[그림1]에 도시된 것처럼 GPU는 매년 약 2배의 성능 향상을 이루고 있어, 같은 기간

매년 약 1.4배의 성능 향상을 보이는 CPU의 발전 속도를 앞지르고 있다. 뿐만 아니라

NVIDIA GeForce 8800 GTX의 경우, 504 GFLOPS (초당 부동소수점 연산 수) 연산능력

을 가지고 57.6 GB/s의 메모리 대역폭을 제공하면서도 2008년 5월 현재 $190 정도의 가

격으로 판매되고 있다. 반면, 최신 CPU 중 하나인 Intel Core2 Extreme(QX6850)은 96

GFLOPS 연산 능력에 21GB/s의 메모리 대역폭을 제공하지만 가격은 $1000 정도로 책정되

어 있다. 이처럼 가격 대비 연산 능력에서 GPU는 CPU에 비해 압도적인 우위를 점하고 있

으며 이 격차는 당분간 더욱 크게 벌어질 것이다.

(2)

(a) GeForce 6800 구조 (b) GeForce 8800 구조 [그림2] 그래픽스 카드 구조 (출처 NVIDIA

1)

)

2.2 프로그래밍 편의성

1998년경 판매되던 초기 GPU는 렌더링 전담 하드웨어로서, 사용자가 프로그래밍을 할 수 없는 블랙박스의 형태로 제공되었다. 이를 통상 고정 파이프라인 (fixed pipeline) 하드 웨어라 칭한다. 그런데, 보다 다양한 렌더링 효과 구현을 목표로, 2002년 이후 NVIDIA GeForceFX 제품군과 ATI의 Radeon 9700 제품을 시작으로 GPU는 ‘프로그래밍’ 기능을 제공하기 시작했다. [그림2]-(a)는 GeForce 6800의 파이프라인을 보여준다. 입력 데이터 는 정점 처리(vertex processing)와 프래그먼트 처리(fragment processing) 단계를 거치게 되고, 사용자는 정점 및 프래그먼트 처리 프로그램을 작성할 수 있다. 이런 구조를 프로그 래밍 가능한 파이프라인(programmable pipeline)이라고 부른다.

2007년 이후 출시된 GeForce 8 제품군과 ATI Radeon HD 2000 제품군부터는 기하 처리 (geometry processing) 단계가 추가되어 다각형 메쉬를 변화시키고 그 결과를 저장할 수도 있게 되어 더욱 다양한 프로그래밍 기능을 제공한다.

또한, 정점, 기하, 프래그먼트 처리 단계가 동일한 프로세서에 의해 처리되는 통합 쉐이 더 (unified shader) 환경이 구축되었다. ([그림2]-(b) 참조.) 이와 같은 변화에 따라 그래 픽스 카드는 ‘스트리밍 프로세서’로 간주될 수 있게 되었고, 그래픽스 파이프라인을 이해하 지 못하는 개발자도 GPU를 이용하여 다양한 프로그램을 제작할 수 있게 되었다.

1) NVIDIA Corporation http://www.nvidia.com

2.3 GPGPU 연구 최신 경향

GPGPU에 대한 관심이 증가하면서 현재 GPGPU.org라는 개발자 커뮤니티가 활발히 운 영되고 있다. 국제 학회로는 '그래픽스 하드웨어'

2)

에서 GPU를 폭넓게 다루고 있으며, 새롭 게 SHARCNET

3)

, GPGPU

4)

, CIGPU

5)

와 같은 학술대회들이 등장하고 있다. GPU 프로그래 밍에 관련된 책은 GPU Gems 시리즈, ShaderX 시리즈가 있다. 현재까지 선형대수 및 수치 해석 관련 다양한 수학 알고리즘은 물론, 유한요소법 등의 물리 알고리즘, 천문학 및 화학 시뮬레이션 기법, photon mapping과 ray tracing과 같은 렌더링 기법, 데이터 정렬 및 데 이터베이스 관련 기법 등 다양한 연구들이 진행되고 있다.

2) Graphics Hardware Workshop, http://www.graphicshardware.org/

3) Symposium on GPU and CELL Computing, http://www.sharcnet.ca/events/ssgc2008/

4) Workshop on General Purpose Processing on Graphics Processing Units, http://www.ece.neu.edu/GPGPU/

5) Computational Intelligence on Consumer Games and Graphics Hardware,

http://www.cs.ucl.ac.uk/staff/W.Langdon/cigpu/

(3)

3. GPU 프로그래밍 기초

GPGPU에는 크게 두 가지 구현 기법이 있다. 그래픽스 렌더링 파이프라인을 따르는 개발 방식과 그래픽스 파이프라인을 고려하지 않고 GPU를 스트리밍 프로세서로 보는 방식이다.

기존의 GPGPU 기법들은 대부분 전자의 방식을 따랐다. 입력 데이터가 정점, 기하, 프래그 먼트 쉐이더를 거치면서 가공되는 방식이다. 이 경우, 각 단계마다 프로그래밍 제약사항이 있기 때문에 그래픽스 파이프라인에 대한 이해가 필수적이다.

후자의 경우는 2007년 이후 통합 쉐이더를 이용하여 데이터를 가공하게 되면서 가능하게 된 방식이다. 이 방식은 그래픽스 파이프라인을 모르는 개발자도 사용할 수 있다는 장점이 있기 때문에 최근 여러 연구 영역에서 활발히 사용되고 있다. 한편, 후자 방식을 지원하는 대표적인 프로그래밍 언어인 CUDA에 대하여 5절에서 기술할 것이다.

3.1 그래픽스 파이프라인

[그림3] 그래픽스 파이프라인

오늘날의 모든 그래픽스 하드웨어는 그래픽스 파이프라인이라 불리는 구조로 설계된다.

파이프라인은 병렬처리를 통해 높은 성능향상을 이룰 수 있도록 제작되었다. 그래픽스 파이 프라인은 여러 단계로 나뉘는데 [그림3]은 현대의 그래픽스 파이프라인을 도식화한 것이다.

파이프라인의 입력은 정점 데이터과 인덱스 데이터로 구성된 스트림이다. 이 데이터는 일단 정점 쉐이더로 입력된다. 정점 쉐이더는 정점의 정보를 수정하는데, 일반적으로 월드 공간에 위치한 정점을 화면공간으로 변화시키는 작업을 한다. 다음으로 변환된 정점 정보는

인덱스 정보와 결합하여 삼각형 데이터 형태로 기하 쉐이더로 입력된다. 기하 쉐이더는 삼 각형 정보를 변형하거나 새롭게 삼각형을 추가 및 삭제할 수 있다. 기하 쉐이더를 거친 데 이터는 래스터라이징 단계를 거치면서 예비 픽셀에 해당되는 프래그먼트들로 변환되고, 픽 셀 쉐이더는 이러한 프래그먼트마다 빛 계산 등을 하게 된다. 마지막으로 프래그먼트 깊이 검사 등을 통해 렌더타겟 텍스쳐(주로 화면)에 그려진다. 각 단계 중 프로그래밍이 가능한 부분은 정점 쉐이더, 기하 쉐이더, 픽셀 쉐이더이다. 각 쉐이더마다 입력 및 출력 값이 다르 기 때문에 이러한 특성을 감안하여 프로그래밍을 해야 한다. 보다 자세한 정보는 Microsoft 의 Direct3D10 문서를 참고하라[1].

3.2 흐름 제어

GPU 프로그래밍에서 높은 성능을 내기 위해서는 효과적인 흐름제어(flow control)가 필 수적이다. SIMD (single instruction multiple data) 구조인 GPU는 동적 루프와 분기에 적 합하지 않다. SIMD 구조에서 모든 활성화된 프로세서는 동시에 같은 일을 수행하기 때문이 다. 예를 들어, 10개의 프로세서 중 9개의 프로세서가 작업을 마쳤다 하더라도 하나의 프로 세서가 복잡한 코드로 분기 되었다면 10개의 프로세서는 모두 복잡한 분기 코드를 수행한 다. 결국 성능 저하가 일어나게 된다. 이를 극복하기 위해서는 최대한 분기문을 사용하지 않는 코드를 사용해야 한다. 만약 분기문을 작성해야 하는 경우 대다수의 프로세서들이 같 은 분기 상태를 가지도록 프로그래밍 해야 성능 저하를 피할 수 있다. 또한, 정적 루프의 경우는 반복문의 추가 부하를 줄이기 위해 코드를 모두 펼치는 것이 도움이 된다.

3.3 데이터 전송

CPU 메모리와 GPU 메모리 사이의 데이터 전송 대역폭은 작고 지연 속도는 매우 높다.

그러므로 CPU와 GPU 간 데이터 교환은 최소화되어야 한다. 기존 AGP x8 버스에 비해 PCI-Express 버스는 두 배 빠른 약 4 Gbyte/s의 전송 속도를 지원하지만, 80 Gbyte/s의 대역폭을 지원하는 최근 GPU 메모리와 연산 능력을 고려하면 GPU 상의 연산보다 메모리 전송 단계에서 병목현상이 발생하는 경우를 쉽게 발견할 수 있다.

메모리 대역폭은 무어의 법칙만큼 빠르게 발전하지 않기 때문에 사용자가 프로그램을 설

계할 때 메모리 전송을 최소화하는 노력이 필수적이다. GPGPU 영역에서는 이런 데이터 전

송량을 최소화하기 위하여 스트림 압축 (stream reduction) 기법이 제안 되었다[4]. 이 방

식은 연산결과 중 의미가 있는 데이터만 모아서 읽어 들이는 방식으로, 최근 하드웨어를 이

용하면 기하 쉐이더에서 스트림 출력 (stream out) 기능을 이용해 필요한 데이터를 선별

출력할 수 있다.

(4)

4. GPGPU 프로그래밍 사례

이 절에서는 저자들의 GPGPU 구현 사례인 ‘충돌검사’에 대해 소개한다. (이 내용은 참 고문헌 [5]에 발표되었다.) 게임 등의 응용에서 충돌검사는 실시간 시뮬레이션에서 병목현 상을 야기하는 주된 요인으로 알려져 있다. 삼각형 메쉬로 구성된 물체들 간의 충돌검사를 위해서는

O

(

n2

)의 복잡도를 가지는 알고리즘을 수행해야 한다. 이를 효율적으로 수행하기 위한 기법으로 경계공간 계층기법 (BVH: Bounding Volume Hierarchy) 등을 이용하며 알 고리즘 복잡도를

O

(

n

log

n

)으로 낮추는 알고리즘이 개발되었지만, 실시간 충돌검사는 여전히 부담스러운 작업이다. 반면 충돌 검사는 물체를 구성하는 많은 삼각형들이 모두 삼각형 교 차 검사라는 동일한 검사 과정을 수행하며 이 연산은 각각 삼각형마다 독립적으로 수행되므 로 병렬처리에 적합하다. 게다가 GPU의 렌더링 과정에서 물체의 표면을 빠르게 다룰 수 있 고 이 장점은 물체 표면의 충돌을 다루는 문제에도 응용 될 수 있다.

4.1 충돌검사 개괄

충돌검사 방법은 물체 공간 충돌검사기법과 이미지 공간 충돌검사 기법으로 나눌 수 있 다. 물체 공간 충돌검사 기법의 대표적인 예로는 BVH 기법으로 물체의 계층구조를 구성하 는 알고리즘이 있다. 이 기법은 삼각형 단위의 정확한 충돌 점을 구할 수 있는 장점이 있 다. 반면 이미지 공간 충돌검사 기법은 물체를 렌더링한 결과 이미지를 이용하여 충돌검사 를 수행한다. 이 기법은 물체의 변형에 상관없이 빠른 시간에 충돌을 찾아내는 장점이 있 다. 저자는 이 두 기법의 장점을 모두 사용하여 삼각형 단위의 충돌 점을 빠른 시간에 찾아 내는 기법을 제안한다.

[그림4] 알고리즘 흐름도

[그림4]는 저자가 고안한 충돌검사 기법의 흐름도이다. 이 충돌 검사는 GPU와 CPU를 모두 사용하는데 GPU는 충돌가능집합(Potentially Colliding Set: PCS)들을 계산하고, 실제 메쉬 삼각형 간 충돌검사는 CPU에서 수행한다. 즉, GPU는 이미지 공간 충돌 검사를 통해 PCS를 빠르게 구하고 CPU를 통한 물체 공간 충돌검사를 통해 삼각형 단위의 충돌 정보를 찾아낸다. 충돌검사 순서는 [그림4]에 나타나듯이 먼저 CPU가 축 정렬 경계상자 충돌 검 사(AABB overlap test)를 통해 충돌지점이 발생할 가능성이 있는 지점(ROI: region of interest)을 구하여 GPU로 넘겨준다. GPU는 표면정보 저장(surface buffering)을 수행하고 그 정보를 이용하여 PCS 계산(PCS computation)한 뒤 계산한 PCS 정보를 CPU에게 넘겨 준다. CPU는 GPU로부터 받은 PCS 정보를 이용하여 삼각형 충돌검사를 수행하고, 충돌점 이 발견되면 충돌을 해소하는 방향으로 힘을 주어 두 물체가 충돌하지 않도록 시뮬레이션한 다. 제안된 알고리즘에서 CPU는 고전적인 축 정렬 경계상자 충돌검사와 삼각형 교차 테스

트를 수행하므로 다음 두 절에서는 GPU가 수행하는 ‘표면정보 저장’ 및 ‘PCS 계산’ 단계를 기술한다.

4.2 표면정보 저장

렌더링을 통해 물체의 표면을 저장하는 것은 충돌 검사뿐만 아니라 물체의 반투명렌더링 을 위해서도 사용된다. 때문에 일찍이 렌더링 영역에서 물체의 표면을 저장하는 방법으로

depth peeling

기법이 Everitt에 의해 제안되었다[2]. 이 방법은 물체의 표면을 한 면씩 저 장하기 때문에 정해진 시점에서 보았을 때

n

개의 프래그먼트를 저장하기 위해서는

n

번의 렌더링이 필요했다. 한편, DirectX10이 공개되면서 A-buffer[3]라는 기법이 Bavoil에 의해 제안되었다. A-buffer는 DirectX10에서 제공되는 MSAA stencil buffer(Multi-sample anti-aliasing stencil buffer)를 이용하여 한 번의 렌더링으로 최대 8개의 프래그먼트를 저 장할 수 있는 텍스쳐이다.

[그림5] 표면 저장을 위한 렌더링 횟수: depth peeling 4회, A-buffer 1회

[그림5]를 이용하면 depth peeling과 A-buffer 기법의 성능 차이를 쉽게 알 수 있다.

기존의 depth peeling은 시각방향이 그림과 같을 때 모든 표면 정보를 저장하기 위해 4번

의 렌더링이 필요하다. 반면 A-buffer는 최대 8새 프래그먼트를 한번에 저장하므로 위 그

림의 4개 프래그먼트는 1번의 렌더링으로 모두 저장 할 수 있다.

(5)

[그림6] A-buffer를 이용한 물체 표면정보 저장

[그림6]의 예를 보자. 표면정보 저장 단계에서는 직교투영기법으로 물체를 렌더링한다.

[그림6]-(a)와 같이 두 물체

O1

O2

가 충돌하고 있을때 CPU는 축 정렬 경계상자 충돌검 사를 통해서 충돌 가능성이 있는 영역을 계산해 난다. 그 결과는 [그림6]-(b)와 같다. 이 결과는 GPU로 넘겨지며 GPU는 이 ROI 영역만안에 있는

O1

O2

의 표면을 A-buffer에 렌더링 한다. [그림6]-(c)는 물체

O1

을 A-buffer에 렌더링 한 결과 이다. ROI내에 있는 표 면만 프래그먼트를 생성하며 그것들은 한번의 렌더링으로 A-buffer에 모두 저장된다. [그 림6]-(d)는 물체

O2

를 A-buffer에 렌더링 한 결과이다. 이 때 생성된

O2

의 프래그먼트들은 A-buffer에 누적되어 이전에 저장되어 있는

O1

의 프래그먼트와 함께 저장된다. 이 때 저장 된 프래그먼트들은 각각의 깊이 값과 프래그먼트가 속한 삼각형의 ID를 저장하고 있다. 이 것은 GPU의 shader를 이용하여 쉽게 구현 할 수 있다.

4.3 PCS 계산

[그림7] 생성된 PCSs

이 단계에서는 A-buffer에 저장된 프래그먼트들의 depth값을 비교하여 PCS를 생성한 다. 임의의 두 프래그먼트의 깊이 값 차이가 사용자가 정의한 임계치보다 가까운 경우 두 프래그먼트의 삼각형 ID는 하나의 PCS로 정해진다. [그림7]은 이전 단계에서 구한 프래그 먼트들의 깊이 값을 비교하였을 때 PCS가 생성되는 픽셀과 생성되지 않는 픽셀을 보여주고 있다.

렌더링을 통해 구한 PCS 정보는 렌더타겟텍스쳐(render target texture)에 쓰여지게 된 다. 그러므로 PCS 정보가 담긴 렌더타겟텍스쳐는 CPU로 전송되고 CPU는 텍스쳐에서 PCS 정보를 읽어 삼각형 교차테스트를 수행한다. GPU와 CPU간의 데이터전송 대역폭은 렌더타겟텍스쳐 데이터를 빠르게 전송하기에 충분히 넓지 않다. 때문에 데이터 전송량을 최 소화 하는 과정이 필요하다. 이 때 우리는 PCS 가 렌더타겟텍스쳐 크기에 매우 듬성 듬성 산재해 있다는 사실에 주목한다. 즉, 렌더타겟텍스쳐의 텍셀 중 PCS 정보를 담고 있는 부 분만 CPU로 전송하는 방식으로 전송해야 할 데이터 량을 줄인다. 이렇게 렌더타겟텍스쳐에 서 특정 영역만 모으는 과정을

stream reduction

이라고 한다. 이 과정은 DirectX9 플랫폼 에서는 매우 부하가 큰 기법이었으나 DirectX10에서는 기하 셰이더(geometry shader)를 이용하여 하드웨어에서 빠르게 처리할 수 있다.

4.4 성능

A-buffer를 이용한 충돌검사의 장점은 몇 번의 렌더링만으로 PCS들을 구할 수 있고,

CPU는 복잡한 삼각형 간 충돌검사 횟수를 대폭 줄일 수 있다는 데에 있다. 한편, 이 방식

은 PCS들을 구하는 과정이 단순하기 때문에 기존의

경계공간 계층기법 등에서 다루기 힘들 었던 변형체 간 충돌검사도 쉽게 수행할 수 있다. 반면에 이 기법은 A-buffer의 크기에 따 라 정밀도가 변화하며 충돌점을 발견하지 못할 수 있다는 단점이 있다. 때문에 게임과 같이 정확성보다는 속도를 우선시하는 응용에 적합하다.

(6)

[그림8] 변형체 간 충돌검사

(a) 전체 충돌검사 시간 (b) 삼각형 간 충돌검사 시간 [그림9] 충돌검사 성능

[그림8]은 충돌검사 수행 작업환경이다. 검사환경은 2.4 GHz Intel Core2 CPU(2GB memory)를 갖춘 환경에 NVIDIA GeForce 8800GTS GPU를 장착 하였다. CPU와 GPU간 데이터 통신은 PCI-Express 1.1을 통하여 이루어진다. 검사 장면은 총 5만6천여개의 삼각 형으로 구성된 약 80개의 물체가 서로 충돌하는데, 모든 물체는 변형한다. A-buffer를 이 용한 충돌검사 기법은 기존 변형체 충돌검사 기법인 CULLIDE[6]에 비하여 동일한 검사 환경에서 월등히 빠른 속도를 보여주었다. [그림9]는 두 알고리즘의 성능을 비교한 것이다.

[그림9]-(a)는 총 알고리즘 수행시간을 비교한 것이고 [그림9]-(b)는 삼각형 간 교차검사

시간을 비교한 것이다. A-buffer를 이용한 충돌 검사 기법이 PCS 계산 시간을 획기적으로

줄여주기 때문에, CPU에서의 삼각형 간 교차검사 시간이 많이 단축되는 것을 확인할 수 있

다. [그림8]의 실험환경에서 A-buffer를 이용한 충돌검사 결과의 정확도는 약 70%이며

CULLIDE의 정확도는 약 95%이다. 즉, A-buffer 기반 알고리즘이 빠른 속도, 그리고 상대

적으로 낮은 정밀도를 보이고 있다.

(7)

5. CUDA 5.1 CUDA 개론

[그림10] CUDA와 C로 구현한 배열 덧셈

최근 그래픽스 하드웨어는 통합 쉐이더를 제공하여 GPU를 일반 스트리밍 프로세서로 사 용할 수 있게 해주었다. 이 결과 다음 세 가지 측면에서 GPU의 활용 가능성은 더욱 증대되 었다.

- GPU 프로그래밍을 위해 그래픽스 파이프라인과 API를 이해해야 한다는 부담을 덜어주 었다.

- 기존의 그래픽스 파이프라인을 따를 경우 입출력 제한이 있어서 데이터를 모으고 분산 하는데 많은 제약이 있었다. 그러나 차세대 그래픽 하드웨어에서는 GPU가 데이터를 자유롭 게 읽고 쓸 수 있다.

- GPU 메모리를 효율적으로 관리하여 CPU와 GPU간 데이터 전송을 최소화 할 수 있게 하였고 전송 부하도 줄일 수 있게 되었다.

이런 장점을 활용하기 위하여 NVIDIA에서 제시한 프로그래밍 언어가 CUDA6) (compute unified device architecture)이다. CUDA는 WindowXP, Linux, Max OS와 같은 다양한 작업환경을 지원하고 있으며 문법이 C와 유사하기 때문에 쉽게 익힐 수 있다. [그림10]은 CUDA를 이용하여 배열을 더하는 코드를 작성한 것으로, 프로그래머에게 매우 익숙한 함수 선언과 구조들을 볼 수 있다. 때문에 CUDA는 C의 작은 확장으로 이해될 수 있다. CUDA

6) NVIDIA에서 운영하는 http://www.nvidia.com/object/cuda_home.html 에서 다운 받을 수 있으며 다른 개발 자들과 의견을 나눌 수 있다.

로 작성한 함수도 메인 함수를 가지고 있으며 외부에서 선언된 함수들을 호출한다.

CUDA를 이용한 많은 연구들이 많이 발표되고 있다. 분자시뮬레이션에 적용한 사례7), 천 문학 시뮬레이션에 적용한 사례8), 비디오 인코딩에 적용한 사례9) 등과 같은 다양한 성과가 발표되고 있다. 이들 기법은 CPU에서 수행한 알고리즘에 비해 적게는 수 배, 많게는 수백 배의 성능 향상을 보여준다. NVIDIA는 MATLAB 라이브러리 및 선형대수 연산 라이브러리 등 다양한 수학 라이브러리를 제공하고 있어서 다양한 연구에 CUDA를 활용할 수 있다.

5.2 CUDA를 이용한 충돌검사

2008년 6월 CUDA 2.0 beta 버전이 배포되었다. 이 버전은 기존에 지원하지 못 하던 VISTA 운영체제를 지원한다. 현재 CUDA는 DirectX9의 텍스쳐를 바로 접근 할 수 있는 기능을 제공하고 있으며 이 기능을 확대해 나가고 있고 DirectX10에도 적용할 예정이다. 만약 CUDA가 DirecX10의 정점버퍼, 인덱스버퍼, 그리고 렌더타 겟 텍스쳐 등을 접근 할 수 있는 방법을 제공한다면 4절에서 설명한 DirectX10 기 반 충돌검사 기법을 CUDA를 이용하여 가속 할 수 있게 된다.

[그림11] 수정된 충돌검사 알고리즘

[그림11]은 CUDA가 DirectX10과의 호환성을 지원할 경우 가능하게 될 수정된 충돌검 사 알고리즘의 순서도이다. 현재 까지는 CUDA가 DirectX10과 완벽히 호환되지 않으므로 이 5.2 절의 내용은 미래 연구 내용에 해당한다. 저자가 제안한 충돌검사 기법은 PCS 정보 를 GPU에서 계산하여 GPU 메모리에 저장한다. CUDA는 DirectX10 texture를 직접 접근 하여 PCS 정보와 물체의 기하정보를 읽어 들여 삼각형 충돌검사를 GPU상에서 수행한다.

충돌 결과 발견된 충돌점들(CPts: colliding points)은 CPU로 전송되며 CPU는 이 정보를 받아서 충돌 반응 시뮬레이션을 할 수 있다. 수정된 알고리즘은 PCS에 비해 상대적으로 적 은 데이터인 CPts를 CPU로 전송하므로 CPU와 GPU간 데이터 송신 속도를 개선할 수 있 으며 삼각형 충돌검사를 병렬로 처리하므로 검사 속도를 높일 수 있다. 최근 연구 결과에 따르면 CUDA로 구현된 삼각형 충돌검사 기법과 고전적인 CPU기반 삼각형 충돌검사 기법 은 약 10배의 성능차이를 보인다[7].

7) MDGPU package, http://www.amolf.nl/~vanmeel/mdgpu/about.html 8) CUNBODY-1 library, http://progrape.jp/cs/

9) GPU-Accelerated Dirac Video Codec, http://www.cs.rug.nl/~wladimir/sc-cuda/

(8)

6. 결론

병렬 처리에 기반한 GPU는 CPU에 비해 월등한 성능을 보여주고 있으며, 무어의 법칙 을 뛰어넘는 성능향상 속도를 유지하고 있다. 따라서 그래픽스 분야는 물론 다양한 컴퓨 터 및 공학 분야에서 속도 개선의 목적으로 사용되고 있다. 또한 통합 쉐이더의 등장으로 인해 그래픽스에 대한 이해 없이도 GPU를 사용할 수 있게 되었고, NVIDIA CUDA 등과 같이 GPU 프로그래밍을 편리하고 효율적으로 수행할 수 있는 언어도 제공되고 있다. 이 런 기술적 특성에 따라 GPU를 이용하여 제작된 병렬처리 알고리즘은 기존 CPU 기반 알 고리즘에 비해 탁월한 성능향상을 보여준다. 향후 더 많은 분야에서 다양한 알고리즘들이 병렬처리방식에 맞도록 제작될 것으로 기대한다.

참고문헌

[1] David Blythe, The Direct3D 10 system,

ACM Transcntion on Graphics

, 25, 3, pp724-734, 2006.

[2] Everitt, C, Interactive order-independent transparency,

NVIDIA corporation technical report

, 2001.

[3] Myers, K., Bavoil, L, Stencil routed A-buffer,

ACM SIGGRAPH 2007 Sketches

, 2007.

[4] Horn D., Stream reduction operations for GPGPU applications,

GPU Gems 2

, chap. 36, pp.

573-589, Addison Wesley, 2005

[5] Han-Young Jang and JungHyun Han, Fast Collision Detection using A-Buffer,

The Visual Computer

, 2008 (to appear)

[6] Govindaraju, N.K., Redon, S., Lin, M.C., Manocha, D., CULLIDE: interactive collision detection between complex models in large environments using graphics hardware,

In proceedings of the ACM SIGGRAPH/EUROGRAPHICS conference on Graphics hardware

, pp. 25-32, 2003 [7] 이연희, 김영준, CUDA를 이용한 가상 객체들간의 병렬 충돌 검사 알고리즘,

한국 HCI 2008

, 2008

국문주제어

GPU, GPGPU, 병렬처리, CUDA

영문주제어

GPU, GPGPU, parallel processing, CUDA

국문초록

본 논문은 GPU 및 GPU 프로그래밍의 기초를 소개하고, 이를 활용한 실례를 기술한다. GPU는 병 렬처리 프로세서로 CPU에 비해 가격대비 높은 성능을 보여주고 있다. 현재 GPU는 DirectX10과 CUDA를 통해 CPU 만큼 쉽고 효율적으로 프로그래밍 될 수 있다. 이 논문에서는 최신 GPU 프로그 래밍을 게임 분야에 응용한 예로 A-buffer를 이용한 충돌검사 기법을 설명한다. 실험 결과 이 기법은 기존의 CPU 기반 충돌검사 기법에 비해 탁월한 속도 향상을 보이며 변형하는 물체에서도 적용 될 수 있어 고품질 3D 게임에 사용될 수 있다.

영문초록

This paper presents the fundamentals of GPU and its programming. GPUs are parallel

processors and show pretty efficient performances than CPUs. DirectX10 and CUDA have

made GPUs more useful tools for many application areas. This paper describes a collision

detection method using A-buffer in the context of real-time game. The experimental results

show that the GPU-based algorithms bring superior performances to the traditional

CPU-based algorithms, and can be applied in high-quality 3D games.

참조

관련 문서

윈도우즈 API 응용 프로그램: C 언어로 작성, 60줄 이상의 Hello 응용(복잡) 응용 프레임워크(MFC, pclaf). MFC 응용 프로그램: C++ 언어로 작성, MFC 구조 복잡, 10줄

• 불가리아의 소피아 대학교 한국어과는 이미 설립되어 있으나, 벨리코 떠르노보 대학교 한국어 과정이 운영중이고 바르나 자유대학교에도 한국어과가 생길 예정.

Often models uncertainty about specific pa- rameters is reflected as uncertainty in specific entries of the state space matrices A, B, C, D.. Let p = (p 1 , ..., p n )

F F Fi i ig g g.. 56℃ 이었으나 열싸이클링 수가 증가함에 따라 M s 및 M f 온도는 각각 2-3℃ 저하하는 것을 알 수 있었으며 heatfl ow 는 약간 감소하는 경향을 나타냈다.그러나 M

Dissolutionprofiles of fluconazolesolid dispersion (SD) prepared by solvent method using various ratios of fluconazole/copovidone K- 28at pH1.2

6 ㎛ 범위로 나타났다.방연석 입자를 피복하고 있는 세포외중합체물질에 대하여 EDS분석 을 실시한 결과 Mg,Al ,Si ,P,S,K 및 Pb등이 검출되었다.무수히 많은 육각형의

Full genome cloning and nucleotide sequence analysis of hepatitis C virus from sera of chronic hepatitis patients in Korea. Detection of hepatitis C virus RNA

1) Ruchholtz S, Pehle B, Lewan U, Lefering R, M?ller N, Oberbeck R, The emergency room transfusion score(ETS) : prediction of blood transfusion requirement