본문 바로가기
Tech Insights

CUDA 프로그래밍 - 병렬 처리란? (1)

by Kudos IT Daily 2024. 2. 24.
반응형

 

 

CUDA 프로그래밍 - 병렬 처리란? (1)

 

목차

  • 병렬 처리 개요
  • 동시성 vs 병렬성
  • 병렬 처리 하드웨어 분류
  • 마치며

 

지난 포스팅에서 GPU(Graphic Processing Unit), GPGPU(General Purpose GPU)의 개념과 특징에 대해 알아봤습니다. 해당 내용이 궁금하신 분들은 이전 포스팅을 참고해주세요. 오늘 포스팅에서는 병렬 처리에 대해 다뤄보도록 하겠습니다.

 

 

CUDA 프로그래밍 - GPGPU? GPU 프로그래밍

CUDA 프로그래밍 - GPGPU? GPU 프로그래밍 목차 CUDA? GPGPU, GPU 프로그래밍 CPU와 GPU 마치며 안녕하세요, 이번 포스팅을 시작으로 CUDA 프로그래밍에 대한 글을 작성하고자 합니다. 'CUDA 프로그래밍' 포스

kudositdaily.tistory.com

 

 

병렬 처리 개요

GPU가 CPU보다 높은 성능을 보이는 이유 중 하나는 CPU에 비해 많은 수의 연산 코어를 가진 대규모 병렬 처리(parallel processing) 장치이기 때문입니다. GPU 프로그래밍은 병렬 처리를 전제로 하기 때문에 병렬 처리의 개념을 명확하게 이해하는 것이 중요합니다.

 

병렬 처리는 데이터나 작업을 여러 개의 연산 자원이 동시에 처리하는 것을 말합니다. 여러 연산 자원을 활용해서 처리 속도를 향상시키고 대량의 데이터 처리나 복잡한 연산을 효율적으로 수행할 수 있습니다. 병렬처리는 데이터를 분할하여 각 처리 장치가 동시에 다른 데이터를 처리하도록 함으로써 작업을 동시에 수행합니다. 따라서, 게임, 빅데이터, 인공지능 등 대규모 데이터 세트를 처리하거나 고성능 컴퓨팅이 요구되는 작업에 유용합니다.

 

 

동시성 vs 병렬성

병렬 처리 개념에 대해 설명하기 전, 혼동하기 쉬운 동시성(concurrency), 병렬성(parallelism) 차이에 대해 짚고 가도록 하겠습니다. 병렬 처리 개념을 이해하기 전에 두 개념의 차이점을 이해하는 것은 효율적인 프로그램 설계와 시스템 구축에 중요합니다.

 

병렬성은 실제로 여러 작업이 동시에 실행되는 것을 의미합니다. 병렬성은 여러 CPU 코어나 프로세서를 사용하여 다양한 작업이나 데이터의 다른 부분을 동시에 처리하는 과정을 나타냅니다. 예를 들어, 이미지 프로세싱에서 하나의 큰 이미지를 여러 개의 작은 부분으로 나누어 각 부분을 동시에 다른 CPU 코어에서 처리하면, 전체 이미지를 처리하는 데 소요되는 시간을 크게 줄일 수 있습니다.

 

동시성은 단일 연산 처리 장치에서 여러 작업이 번갈아 실행되어 동시에 수행되는 것처럼 보이게 하는 처리 방식입니다. 실제로 한 시점에 하나의 작업만 처리되지만, 작업을 빠르게 전환(context switching)함으로써 여러 작업이 동시에 진행되는 것처럼 보입니다. 동시성의 핵심은 자원을 효율적으로 사용하면서 응답성을 높이는 것입니다. 주로 단일 CPU 코어에서 여러 스레드나 프로세스를 관리할 때 사용됩니다.

 

병렬성(Parallelism) vs 동시성(Concurrecny)

 

 

병렬 처리 하드웨어 분류

병렬 처리를 수행하는 하드웨어의 종류에는 멀티코어 CPU, GPU 등이 있습니다. 각 병렬 처리 하드웨어는 자신만의 아키텍처를 가지고, 아키텍처의 특성에 따라 병렬 처리 방법 및 알고리즘이 달라집니다. 효율적인 GPU 병렬 처리 알고리즘을 설계하고 구현하기 위해 GPU 아키텍처의 특징을 이해해야 합니다.

 

 

플린의 병렬 처리 하드웨어 분류

 

 

위 그림은 Michael J. Flynn이 1966에 제안한 컴퓨터 아키텍처 구분법(Flynn's taxanomy)을 나타내는 그림입니다. 플린의 분류법은 컴퓨팅 하드웨어를 두 가지 기준을 통해 네 종류로 분류합니다. 기준은 '데이터에 대해 한 번에 수행하는 명령어(instruction) 개수'와 '명령어 혹은 명령어들이 수행되는 데이터 개수'입니다.

 

1. SISD(Single Instruction-Single Data)

단일명령-단일데이터(SISD)는 하나의 명령어를 하나의 데이터에 대해 수행하는 가장 간단한 구조입니다. 단일 코어 CPU와 같이 하나의 코어를 가지는 직렬 처리 연산 장치가 SISD에 속합니다.

 

2. MISD(Multiple Instruction-Single Data)

복수명령-단일데이터(MISD)는 여러 개의 명령어를 하나의 데이터에 동시에 수행하는 구조입니다. 즉, 각 연산 처리 장치는 동일한 데이터에 대해 서로 다른 명령을 동시에 실행합니다. 개념적으로는 고장 허용 시스템(fault-tolerant system)과 같은 애플리케이션에서 유용할 수 있지만, 실제 상용화, 기술 구현에 한계가 있습니다.

 

3. SIMD(Single Instruction-Multiple Data)

단일명령-복수데이터(SIMD)는 하나의 동일한 명령어를 여러 개의 데이터에 수행하는 구조입니다. SIMD 구조의 병렬 처리 하드웨어는 데이터 배열 연산이 적용된다는 의미에서 벡터 프로세스(vector processor), 배열 프로세서(array processor)라고도 합니다. SIMD 구조 연산 장치의 대표적 예가 바로 GPU 입니다. 일부 CPU는 SIMD 유닛을 가지고 있기도 한데, CPU 사양에서 얘기하는 MMX, SSE, AVX, Neon 등이 이러한 SIMD 유닛을 의미합니다.

 

 

SIMD 구조 하드웨어의 예(NVIDIA, 인텔)

 

 

4. MIMD(Multiple Instruction-Multiple Data)

복수명령-복수데이터(MIMD)는 여러 개의 명령을 여러 데이터에 수행하는 구조입니다. 명령어와 데이터는 1:1로 연결되고, 다수의 SISD가 하나의 칩 안에 들어 있는 구조라고 생각하면 됩니다. 아래 그림의 인텔 i9 CPU는 대표적인 멀티코어 CPU 입니다. 최근 멀티코어 CPU들은 적게는 수 개에서 많게는 수십개의 연산 코어를 가지고 있습니다.

 

MIMD 구조 병렬 처리 하드웨어 (인텔 i9 CPU)

 

 

멀티코어 CPU는 여러 독립된 프로세스로 구성되어 자신만의 제어 유닛과 문맥(context)를 가집니다. MIMD는 여러 연산 유닛으로 구성되어 여러 스레드가 병렬로 동시에 작업을 수행합니다. MIMD 기반 병렬 처리는 각 스레드에 독립된 작업들을 분배하는 경우가 많으며, 이러한 병렬 처리 기법을 태스크 수준 병렬화(task-level parallelism)라고 부릅니다.

 

 

마치며

본격적인 CUDA 프로그래밍 설명에 앞서 병렬 처리에 대한 간단한 개념과 병렬 처리 하드웨어 분류에 대해 소개해 드렸습니다. 이번 포스팅에서 설명드리지 못한 병렬 처리의 내용은 다음 포스팅에 이어서 소개해 드릴 수 있도록 하겠습니다.

 

오늘 포스팅도 도움이 되셨기를 바라면서 글 마치도록 하겠습니다. 고맙습니다.

 

 

Reference

1. CUDA 기반 GPU 병렬 처리 프로그래밍 - 기초부터 성능 최적화 전략까지

반응형