Parallel Computing

aisle333·2024년 6월 4일

컴퓨터 공학

목록 보기
18/19

Parallel Computing

병렬 컴퓨팅은 여러 프로세서를 동시에 활용하여 컴퓨팅 성능을 크게 향상시키는 기술
단일 프로세서 시스템보다 훨씬 빠른 속도로 복잡한 문제를 해결할 수 있도록 합니다. 대규모 데이터 처리, 과학적 시뮬레이션, 인공지능, 머신 러닝 등 다양한 분야에 활용된다

병렬 컴퓨팅의 종류 (Flynn의 분류 방식, Flynn's Taxonomy)

SIMD (Single Instruction Multiple Data)

동일한 명령어로 여러 데이터를 동시에 처리.
예: 벡터 프로세서, Intel's SSE (Intel Streaming SIMD Extension), GPGPU (NVIDIA's CUDA)

MIMD (Multiple Instruction Multiple Data)

각 프로세서가 서로 다른 명령어를 수행하며 데이터를 처리.
예: 일반적인 멀티 프로세서 시스템

SPMD (Single Program Multiple Data):

여러 프로세서가 동일한 프로그램 코드를 실행하지만, 각 프로세서가 처리하는 데이터는 다름.
예: 분산 메모리 환경에서의 병렬 컴퓨팅

GPU (Graphics Processing Unit)

PC의 그래픽 성능을 좌우하는 그래픽 카드의 핵심 칩
1990년대 초기까지만 해도 그래픽 카드는 CPU의 연산 결과를 그림이나 글자 신호로 변환하여 모니터로 화면을 출력하는 어댑터로 인식됨.
1990년대 중반 이후부터 멀티디미어 콘텐츠(특히 게임)가 주목을 받으면서 CPU를 보조할 3D 그래픽 연산 전용의 프로세서 (=co-processor), 즉 GPU가 그래픽카드에 탑재되기 시작.

  • 신형 GPU일수록 보다 미세한 공정으로 제조되어 같은 면적에 집적되는 트랜지스터의 수가 늘어나는 추세.
  • 하나의 기판에 여러 개의 GPU를 동시에 탑재하여 성능을 높이는 멀티(Multi) GPU 환경이 도입되기 시작.
  • 현대의 GPU는 그 외에도 다양한 기능이 더해져서 동영상의 재생 품질 및 인코딩(변환) 속도를 향상시키는 nVIDIA의 퓨어비디오(PureVideo), AMD의 Avivo(Advance video in video out) 기술 등이 추가되고 있는 추세.
  • GPU의 강력한 병렬 연산 처리 기능을 일반 프로그래밍에 활용할 수 있도록 API가 제공되기 시작하면서 그래픽 및 디스플레이 작업 이외의 범용 작업에 사용이 늘어나면서 이를 위한 GPU인 GPGPU (General Purpose GPU)가 널리 사용되고 있음.

TPU(NPU의 하나라고 볼 수 있음)는 GPGPU보다 저렴하게 보다 많은 수를 장착한 시스템을 만들기 쉽게 한다.

단, colab등의 개발환경에서 1개의 디바이스로만 비교할 경우 GPGPU가 훨씬 고속으로 처리되는 게 일반적임 (여러 문서상에서 신경망 관련 연산에서 효율이 높게 설계구현되어있다고 하는데 2022.12 현재 colab에선 GPGPU가 더 빠름. 실제 가격은 훨씬 GPGPU가 비쌈.)

Tensor Processing Unit (TPU)

Google에서 커스텀식으로 개발한 ASIC(Application-Specific Integrated Circuit). Tensorflow로 구현된 application등을 효과적으로 학습시키고 처리하는 데 사용됨.

Dense vector and matrix 를 매우 빠르게 처리한다.

matrix operation이 주를 이루는 경우.
기본 training loop 내에 custom TensorFlw 작업이 없는 모델
몇 주 이상의 장기간 학습이 필요한 경우
초대형 모델

Cluster System

Cluster System 은 여러 대의 컴퓨터를 하나의 시스템처럼 동작 하게 하여 높은 성능과 가용성을 제공하는 parallel computing architecture
여러 대의 같은 OS가 설치된 독립적인 컴퓨터(노드)들과 동일한 파일 시스템을 고속의 LAN (Local Area Network)으로 연결 하여 하나의 통합된 컴퓨팅 환경을 만드는 것을 가르킴.

  • 병렬 처리를 통한 고성능: 각 노드는 독립적으로 작업을 수행하여 병렬 처리를 구현.
  • 밀접한 통합 : 노드들은 동일한 환경(OS등)을 공유하며, 긴밀하게 상호 작용.
  • 공유 저장소: 모든 노드가 동일한 파일 시스템에 접근(NFS)하여 데이터 일관성을 유지.
  • 높은 신뢰성 (=고가용성)): 하나의 노드가 실패해도 다른 노드가 이를 대신하여 작업을 계속할 수 있음.
  • 작업 스케줄링: 중앙 집중식 스케줄러가 있어 작업을 효율적으로 분배하여 효과적인 부하 분산이 가능함.
  • 고비용이며 고성능 네트워크와 일관된 하드웨어 요구.

Grid Computing System

지리적으로 분산된 여러 자원을 연결 하여 하나의 가상 슈퍼컴퓨터를 형성하는 병렬 컴퓨팅 시스템
Grid Computing System 은 자원들은 독립적으로 관리되며, 서로 다른 운영 체제와 하드웨어를 사용하는 게 일반적
다른 위치에 다른 OS가 설치된 독립적인 이기종 컴퓨터들과 다양한 자원들이 WAN (Wide Area Network)을 통해 연결 되어 하나의 통합된 컴퓨팅 환경을 만드는 것을 가르킴.

  • 분산 병렬 처리: 서로 다른 위치(Geographical Distribution)에 있는 자원을 활용하여 병렬로 작업을 수행.

  • 이기종(Heterogeneity) 환경: 다양한 하드웨어와 소프트웨어가 혼합되어 있음.

  • 자원 공유: 자원 소유자가 자원을 동적으로 할당하고, 사용자는 작업의 우선순위와 자원의 가용성에 따라 조정된 자원들을 사용할 수 있음.

  • 확장성: 자원을 필요에 따라 추가하거나 제거할 수 있어 매우 유연함.

  • 인터넷 기반: 주로 인터넷을 통해 연결되며, 전 세계적으로 분산된 컴퓨터를 활용.

  • 높은 확장성: 지리적으로 분산된 자원을 쉽게 추가 가능: 이는 상호운영성(interoperability)이 제공된다는 가정하에서임.

  • 비용 효율성: 기존의 유휴 자원을 활용하여 비용을 절감 가능.

  • 유연성: 다양한 하드웨어와 소프트웨어 조합을 활용 가능.

  • 복잡한 관리: 지리적으로 분산된 자원을 효율적으로 관리하는 것은 쉽지 않은 일임.

  • 네트워크 대기 시간: 인터넷을 통해 연결되므로 네트워크 지연을 피하기 어려움.

  • 보안 문제: 분산된 이기종 환경에서는 보안 관리가 매우 어려움.

Multi-processor System

멀티 프로세서 시스템은 단일 시스템 내에 여러 프로세서를 포함한 병렬 컴퓨팅 시스템을 가르킴.
일반적으로 각 프로세서는 여러 코어를 포함하고 있으며, 여러 코어를 이용한 병렬 처리가 가능함.
Multi-processor System 은 단일 운영 체제와 하드웨어를 공유하며, 고속의 system bus로 연결되어 있음.

  • 병렬 처리: 여러 프로세서와 코어가 동시에 작업을 수행하여 성능을 극대화.

  • 캐시 공유: 프로세서와 코어들 간에 L2 또는 L3 캐시를 공유하여 데이터 접근 속도를 높임.

  • 단일 시스템 통합: 모든 프로세서와 코어가 하나의 시스템에 통합되어 있

  • 고속의 system bus로 연결되어 있고 하드웨어와 OS를 공유함에 따라 연산시 요구되는 데이터 전송이 매우 빠름.

  • 소형화: 하나의 시스템에 여러 프로세서와 코어를 통합할 수 있어 공간 절약이 가능.

  • 확장성 한계: 물리적인 공간과 발열 문제로 인해 무한정 프로세서와 코어 수를 늘릴 수는 없음.

  • 프로그래밍 복잡성: 병렬 프로그래밍이 요구되므로 소프트웨어 개발이 복잡할 수 있음.

  • 열 관리: 여러 프로세서와 코어가 동시에 작동할 때 열이 많이 발생하여 효율적인 열 관리가 필요.

  • 비용: 멀티 프로세서 시스템은 단일 프로세서 시스템 대비 비용이 높으며 특히 고성능 멀티 프로세서 시스템에서 이 경향성은 더 심해짐.

GPGPU System

GPGPU 시스템은 그래픽 처리 장치(GPU)를 일반 목적의 병렬 컴퓨팅에 활용한 시스템
Multi-processor system 또는 cluster system를 기반으로 다수의 GPGPU를 포함시켜 구성
GPU는 수천 개의 작은 코어로 구성되어 있어 대규모 병렬 처리가 가능

  • 대규모 병렬 처리: GPU의 수많은 코어를 활용하여 동시에 수많은 작업을 병렬로 처리.

  • 고성능 연산: 특히 부동소수점 연산과 벡터 연산에서 뛰어난 성능을 발휘.

  • 데이터 집약적 작업: 머신 러닝, 데이터 분석, 시뮬레이션 등 대규모 데이터를 처리하는 작업에 적합.

  • 프로그래밍 모델: CUDA 등의 프레임워크를 통해 GPU 프로그래밍을 지원.

  • 비용 효율성: 높은 성능을 비교적 저렴한 가격에 제공.

  • 그래픽 렌더링뿐만 아니라 과학 계산, 머신 러닝 등 다양한 분야에서 활용 가능하지만 모든 유형의 작업에 대해 최적의 성능을 보장하지는 않음.

  • 프로그래밍 복잡성: GPU 프로그래밍은 CPU 프로그래밍보다 복잡함.

  • 메모리 대역폭: CPU와 GPU 간 데이터 전송 속도가 병목 현상을 일으킬 수 있음.

병렬 컴퓨팅을 위한 주요 프로그래밍 모델과 프레임워크

MPI (Message Passing Interface):

분산 메모리 환경에서 프로세서 간 통신을 위한 표준 프로그래밍 모델.

  • 분산 메모리 시스템에서 각 프로세서는 독립적인 메모리 공간을 가지며, 메시지를 통해 데이터를 교환.
  • 대규모 병렬 처리 작업에 적합.
  • 주로 과학 계산, 시뮬레이션 및 대규모 데이터 처리를 위해 사용됨.

OpenMP

공유 메모리 환경에서 멀티 프로세서 시스템 프로그래밍을 위한 표준 프로그래밍 모델.

  • 공유 메모리 시스템에서 여러 스레드를 생성하여 병렬 처리를 수행.
  • 기존의 순차 코드를 병렬 코드로 쉽게 변환할 수 있는 간단한 지시문을 제공.
  • 주로 멀티코어 프로세서 시스템에서 사용됨.

Hadoop

분산 데이터 처리를 위한 프레임워크로, 대규모 데이터 분석에 활용.

  • HDFS(Hadoop Distributed File System)를 사용하여 데이터를 분산 저장.
  • MapReduce 프로그래밍 모델을 사용하여 대규모 데이터 처리를 수행.
  • 대용량 데이터 분석, 데이터 웨어하우징, 로그 분석 등에 널리 사용됨.

Spark

Hadoop보다 빠르고 분산 데이터 처리 프레임워크로 유명함.

  • 인메모리 데이터 처리를 통해 높은 속도를 제공.
  • 다양한 프로그래밍 언어( Python, Java, Scala 등)를 지원.
  • 실시간 데이터 처리, 기계 학습, 그래프 처리 등 다양한 응용 분야에 사용됨.

CUDA (Compute Unified Device Architecture)

NVIDIA에서 개발한 GPU 병렬 컴퓨팅을 위한 프로그래밍 모델.

  • GPU의 수많은 코어를 활용하여 대규모 병렬 처리를 가능하게 함.
  • CUDA C/C++를 사용하여 GPU를 프로그래밍할 수 있음.
  • 주로 과학 계산, 머신 러닝, 딥러닝, 그래픽스 렌더링 등에 사용됨.
  • 높은 성능을 필요로 하는 계산 집약적 작업에 최적화되어 있음.

OpenCL (Open Computing Language)

이기종 시스템에서 CPU, GPU 및 기타 프로세서를 병렬로 프로그래밍하기 위한 표준 프레임워크.

  • 다양한 하드웨어 플랫폼에서 병렬 프로그래밍을 지원함.
  • 벤더 중립적인 표준으로, 여러 제조사의 하드웨어에서 동작.
  • 고성능 컴퓨팅, 이미지 및 비디오 처리, 금융 분석 등에 사용됨.

0개의 댓글