사업소개

병렬프로그램

과거와 달리 현재 멀티코어 시대에서는 프로세서 간의 협력을 최상으로 끌어내기 위해 소프트웨어 설계를 어떻게 하느냐가 무엇보다 중요시 되고 있으며, 이런 관심으로 인해 병렬컴퓨터 아키텍처를 효과적으로 활용해 성능과 처리속도의 향상을 가져 올 수 있는 병렬프로그래밍이 필수적인 요소가 되었습니다.

1. Thread 직접 활용
동시에 이루어 질 수 있는 업무를 운영체제 혹은 플랫폼이 제공하는 Thread를 직접적으로 활용하여 처리하는 방식으로 일련의 작업을 정의한 함수 혹은 클래스를 직접 생성한 Thread에게 수행하도록 하는 것 입니다.
2. Task 기반의 ThreadPool 활용
운영체제 혹은 플랫폼이 제공하는 Thread를 직접 생성하고 관리하는 것은 상당히 번거로운 작업이며, Thread를 생성하고 소멸시키는 작업은 비교적 큰 오버헤드가 발생한다. 따라서 미리 생성된 Thread들을 모아두고 재사용할 수 있는 ThreadPool을 사용함으로써 Thread 관리의 부담을 줄이고 효율을 높이는 방법이다. 또한 일련의 긴 처리를 한꺼번에 설계하기 않고 짧은 단위 업무의 Task 기반으로 분리함으로써 Thread의 운용성을 높이고, 프로그램의 확장성을 확보 할 수 있는 방법입니다.
3. 병렬 라이브러리
순차처리처럼 작성된 코드가 병렬 라이브러리에 의해 최적화된 Task로 나뉘어져 병렬적으로 실행되도록 하는 방식입니다. 명시적으로 병렬 처리되는 부분을 프로그래머가 직접 Task로 나누는 것이 아니라, 순차적으로 처리. 앞에 기술한 방법들은 전체적으로 동시에 실행되는 작업의 양을 늘리는 방법이라고 할 수 있지만, 이 방법은 한 작업의 수행속도를 높이는데 중점을 두는 방법이라 할 수 있다. 귀찮은 Thread관련 작업은 라이브러리가 대신해 주기 때문에, 한 문제를 병렬적으로 수행될 수 있도록 분리하는, 즉 병렬성을 얼마나 찾아내느냐가 프로그래밍에서 가장 중요한 요소가 됩니다.
Language

- OpenMP

- Intel TBB

- Clilk

- Microsoft PPL(Parallel Pattern Library)

- 닷넷의 TPL(Task Parallel Library)

4. GPGPU 프로그래밍
범용적인 CPU대신에 수백에서 수천 개의 단순 수치연산에 특화된 GPU를 활용하여 빠른 연산을 수행하도록 프로그래밍 하는 방식입니다. 보통 대량의 데이터에 대해 같은 연산을 수행하는 SIMD(Single Instruction Multiple Data) 형태의 작업에 대해 데이터를 적절한 크기로 나누고 이 데이터 덩어리를 GPU 코어에 할당하여 처리하도록 하는 방법이다. 한 작업의 처리속도를 높이는데 중점을 둔 방법이지만 CPU보다 GPU의 특성에 맞도록 코딩 해야 하기 때문에, CPU보다 덜 익숙한 GPU의 특성을 잘 이해해야 하며, 메인 메모리와 그래픽 메모리에 대한 최적화된 접근이 되도록 프로그래밍 해야 합니다.
Language

- CUDA

- OpenCL

- Intel ArBB

- C++ AMP

- Microsoft DirectCompute

CUDA란?

CUDA는 NVIDIA의 병렬 컴퓨팅 아키텍처로 뛰어난 GPU(graphics processing unit)를 기반으로 컴퓨팅 성능을 극적으로 향상시켜줍니다.

현재까지 CUDA 에서 이용할 수 있는 GPU는 수백만 개가 판매되었으며, 소프트웨어 개발자, 과학자, 연구자들은CUDA를 이용하여 이미지 및 동영상 처리, 컴퓨터 생명 공학, 유체 역학 시뮬레이션, CT 이미지 복원, 지진 분석, 레이 트레이싱 등 매우 다양한 범위의 작업을 수행하고 있습니다.

CUDA를 이용한 병렬 컴퓨팅

컴퓨팅은 CPU의 "중앙 처리" 개념에서 CPU와 GPU의 "코프로세싱(co-processing)" 개념으로 진화되었습니다. NVIDIA에서 개발한 CUDA 병렬 컴퓨팅 아키텍처는 컴퓨팅 패러다임의 획기적인 변화를 이끌었습니다. CUDA 병렬 컴퓨팅 아키텍처는 이제 애플리케이션 개발자들의 중요한 설치 기반인 GeForce, ION, Quadro, Tesla GPU 에 사용되고 있습니다.

CUDA는 과학 연구 분야에서 엄청난 호평 속에 적극적으로 도입되었습니다. 예를 들어, 6만 명이 넘는 전 세계 학계 및 제약회사의 연구원들이 신약 연구 개발 작업에 이용하고 있는 분자 동력학 시뮬레이션 프로그램 AMBER는 CUDA를 이용해 분석 기술을 한층 강화할 수 있게 되었습니다.

금융시장에서는 Numerix 및 CompatibL이 거래상대방 신용 리스크 분석 애플리케이션에 CUDA를 도입하여 18배 빠른 성능을 달성했습니다. Numerix는 400여 곳의 금융 기관에서 사용되고 있습니다.

CUDA 채택의 지표는 GPU 컴퓨팅을 위한 Tesla GPU의 램프(ramp)입니다. 현재 '포춘지 500대' 기업에서 사용하고 있는 GPU 클러스터의 수는 700개가 넘습니다. 사용하는 기업은 에너지 업계의 쉴럼버그(Schlumberger), 세브론(Chevron)에서, BNP 파리바와 같은 금융 산업에 이르기까지 다양합니다.

최근의 Microsoft Windows 7 과 Apple Snow Leopard의 출시에 맞춰 GPU 컴퓨팅은 그 영역을 확장하고 있습니다. 이 같은 새로운 운영 시스템에서, GPU는 그래픽 프로세서로서의 기능뿐만 아니라 모든 애플리케이션에서 사용 가능한 병렬 프로세서로서의 전반적인 기능도 구현합니다.

CUDA 병렬 컴퓨팅 플랫폼

CUDA® 병렬 컴퓨팅 플랫폼은 미세단위 혹은 대단위 데이터 익스프레스 및 태스크 병렬화를 가능하게 하는 몇 가지 간단한 C, C ++ 확장을 제공합니다.

프로그래머는 C, C++, Fortran 혹은 개방형 표준인 OpenACC directives와 같은 높은 수준의 언어를 통해 병렬화를 익스프레스 하는 것을 선택할 수 있습니다. CUDA 병렬 컴퓨팅 플랫폼은 현재 수천 개에 달하는 GPU 가속 애플리케이션 및 공식 발표 연구 논문과 함께 널리 배포되고 있습니다.