맨위로가기

병렬 알고리즘

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

병렬 알고리즘은 여러 개의 프로세서 또는 코어를 사용하여 동시에 여러 작업을 처리함으로써 계산 속도를 향상시키는 알고리즘이다. 병렬화 가능성에 따라 자명하게 병렬화 가능한 문제와 본질적으로 직렬적인 문제로 나뉘며, 문제의 규모가 커질수록 병렬 알고리즘은 비병렬 알고리즘보다 효율적이다. 하지만, 병렬 알고리즘은 프로세서 간의 통신 비용, 부하 분산 문제, 그리고 병렬 속도 저하 등의 문제점을 가지고 있다. 분산 알고리즘은 컴퓨터 클러스터와 같은 분산 환경에서 작동하도록 설계된 병렬 알고리즘의 일종이다. 병렬 알고리즘은 컴퓨터 클러스터, GPU, FPGA 등 다양한 하드웨어를 사용하여 구현할 수 있다.

더 읽어볼만한 페이지

  • 분산 알고리즘 - 콘텐츠 전송 네트워크
    콘텐츠 전송 네트워크(CDN)는 지리적으로 분산된 서버 네트워크를 이용하여 사용자에게 콘텐츠를 효율적으로 전송하는 시스템으로, 엣지 서버 캐싱, 데이터 전송 시간 단축, 대역폭 비용 절감, 가용성 향상 등의 이점을 제공하지만 보안 및 개인 정보 보호, 특정 업체 의존성 등의 과제도 존재한다.
  • 분산 알고리즘 - P2PTV
    P2PTV는 각 사용자가 비디오 스트림을 다운로드하고 업로드하여 대역폭에 기여하는 기술을 사용하며, 비트토렌트와 유사하게 작동하고, 서비스 품질 문제와 통제력 부족 등의 문제 해결을 위해 하이브리드 솔루션을 사용하기도 한다.
  • 병렬 컴퓨팅 - 슈퍼컴퓨터
    슈퍼컴퓨터는 일반 컴퓨터보다 훨씬 높은 성능을 가진 컴퓨터로, 복잡한 계산과 시뮬레이션을 수행하며, 프로세서, 메모리, 스토리지, 네트워크 등으로 구성되어 병렬 처리를 통해 높은 성능을 구현하고, 군사, 기상 예측, 과학 기술 분야, 인공지능 등 다양한 분야에서 활용되고 있다.
  • 병렬 컴퓨팅 - 컴퓨터 클러스터
    컴퓨터 클러스터는 여러 대의 상용 컴퓨터를 고속 네트워크로 연결하여 고성능 컴퓨팅 시스템을 구축하는 방식으로, 슈퍼컴퓨터를 포함한 다양한 분야에서 높은 가용성과 확장성을 제공하며, 클러스터 미들웨어를 통해 시스템 관리, 부하 분산, 통신 방식, 데이터 공유 등을 지원하고 노드 장애 관리를 위한 펜싱 기술을 활용한다.
병렬 알고리즘
기본 정보
병렬 처리
병렬 처리 개념도
정의하나 이상의 프로세서가 협력하여 문제를 해결하는 계산 방법
활용 분야과학
공학
상업
목표계산 속도 향상 및 대규모 문제 해결
관련 개념동시성
병행성
분산 컴퓨팅
다중 처리
역사
등장 배경컴퓨터 구조의 발전과 프로그래밍 기술의 발전
초기 연구1950년대부터 시작
발전1960년대: 배치 처리 시스템
1970년대: 병렬 처리 시스템
1980년대: 대규모 병렬 처리 시스템
1990년대 이후: 클러스터 컴퓨팅, 그리드 컴퓨팅
구조
공유 메모리 시스템모든 프로세서가 공유 메모리에 접근 가능
분산 메모리 시스템각 프로세서가 독립적인 메모리를 가짐, 프로세서 간 통신 필요
모델
데이터 병렬 모델동일한 연산을 여러 데이터에 동시에 적용
태스크 병렬 모델여러 태스크를 동시에 실행
파이프라인 모델작업을 여러 단계로 나누어 각 단계를 병렬로 처리
프로그래밍
병렬 프로그래밍 언어C
C++
포트란
자바
파이썬
병렬 프로그래밍 라이브러리MPI
OpenMP
CUDA
병렬 프로그래밍 모델메시지 전달
공유 메모리
데이터 병렬
장점 및 단점
장점계산 속도 향상
대규모 문제 해결 가능
시스템 확장성 향상
단점프로그래밍 복잡성 증가
디버깅 어려움
시스템 구축 비용 증가
성능 측정
가속화병렬 알고리즘 실행 시간과 순차 알고리즘 실행 시간의 비율
효율성프로세서 수에 대한 가속화 비율
확장성프로세서 수 증가에 따른 성능 향상 정도
예시
행렬 곱셈행렬의 각 행과 열을 병렬로 계산
정렬 알고리즘병합 정렬
퀵 정렬
기수 정렬
관련 주제
관련 주제고성능 컴퓨팅
분산 시스템
멀티코어 프로세서
GPU 컴퓨팅

2. 병렬화 가능성

알고리즘은 병렬화 가능성에 따라 쉽게 병렬화 가능한 것부터 완전히 병렬화 불가능한 것까지 다양하다. 또한, 주어진 문제는 더 병렬화가 가능하거나 덜 병렬화가 가능한 다양한 알고리즘을 수용할 수 있다.

어떤 문제들은 쉽게 분할될 수 있는데, 이러한 문제들을 ''자명하게 병렬화 가능한 문제''라고 한다. 반대로, 다음 단계를 효과적으로 수행하기 위해 이전 단계의 결과가 필요한 문제들을 '''본질적으로 직렬적인 문제'''라고 한다.

많은 경우, 어떤 작업의 효과적인 병렬 알고리즘을 개발하려면 순차 알고리즘 버전을 만드는 것과 비교하여 새로운 아이디어와 방법을 끌어들여야 한다.[4]

병렬 알고리즘은 문제의 규모가 커질수록 병렬이 아닌 알고리즘보다 훨씬 빠르게 문제를 풀 수 있다. 일반적으로 단일 프로세서의 극히 빠른 컴퓨터보다 다수의 느린 프로세서로 동등한 처리량을 실현하는 컴퓨터를 구축하는 것이 더 쉽다. 또한, 단일 프로세서의 성능에는 이론적인 한계가 있다. 병렬 알고리즘에는 병렬화할 수 없는 부분이 있으며, 병렬도를 높여도 성능이 향상되지 않는 지점이 존재한다 (암달의 법칙 참조). 그 지점을 넘어서 프로세서를 추가해도 처리량이 향상되지 않고, 오히려 오버헤드와 비용이 증대되는 결과가 된다.

순차 알고리즘의 계산량은 사용하는 영역(메모리)과 시간(프로세서 사이클)으로 측정한다. 병렬 알고리즘에서는 또 다른 관점으로, 프로세서 간의 통신 비용을 고려해야 한다. 병렬 프로세서의 통신에는 공유 메모리를 사용하는 방법과 메시지 패싱에 의한 방법이 있다.

공유 메모리 처리에서는 데이터의 락이 필요하게 되며, 오버헤드가 발생한다. 또한, 알고리즘의 일부가 순차화되어 버린다.

메시지 패싱 처리에서는 버스 상에서 메시지를 전송하는 오버헤드가 발생하고, 큐나 메시지 박스를 위한 메모리도 필요하며, 큐잉함으로써 메시지에 대기 시간이 발생한다. 크로스바 스위치와 같은 특수한 버스를 사용함으로써 프로세서 간의 통신 오버헤드를 줄일 수 있지만, 통신량은 개별 병렬 알고리즘에 따라 다르다.

또 하나, 병렬 알고리즘에는 부하 분산이 제대로 이루어지는가 하는 문제가 있다. 예를 들어, 어떤 범위의 숫자가 소수인지 여부를 조사하는 경우(이는 자명하게 병렬화 가능한 문제에 해당한다), 할당이 불공평하면 일부 프로세서가 일찍 처리를 끝내고 아무것도 하지 않는 상태가 된다.

병렬 알고리즘의 일종으로 분산 알고리즘이 있다. 분산 알고리즘은 컴퓨터 클러스터분산 컴퓨팅 환경에서 동작하도록 설계되어 있으며, 고전적인 병렬 알고리즘과는 다른 문제에 대처할 필요가 있다.

2. 1. 자명하게 병렬화 가능한 문제

어떤 문제들은 쉽게 여러 부분으로 분할될 수 있는데, 이러한 문제들을 ''자명하게 병렬화 가능한 문제''라고 한다. 예를 들어 루빅스 큐브를 풀거나, 주어진 해시를 생성하는 많은 알고리즘이 이에 해당한다.

예를 들어, 1부터 수백, 수천까지의 범위에 있는 숫자 각각이 소수인지 여부를 조사하는 경우, 각 프로세서에 부분 범위를 할당하면 되며, 최종적으로 결과 목록을 연결하면 된다.

2. 2. 본질적으로 직렬적인 문제

다음 단계를 효과적으로 수행하기 위해 이전 단계의 결과가 필요한 문제들을 '''본질적으로 직렬적인 문제'''라고 한다. 뉴턴 방법과 같은 반복적인 수치적 방법, 삼체 문제에 대한 반복적인 해법, 원주율 (π)을 계산하는 대부분의 알고리즘이 이에 해당한다.[3] 일부 순차 알고리즘은 자동 병렬화를 통해 병렬 알고리즘으로 변환될 수 있다.

3. 문제점

병렬 알고리즘은 여러 프로세서가 동시에 작업을 처리하여 속도를 높이는 장점이 있지만, 몇 가지 문제점을 안고 있다.


  • 순차적인 문제: 원주율 계산이나 뉴턴 방법, 다체 문제 해결, 깊이 우선 탐색과 같이 이전 결과를 알아야 다음 단계를 진행할 수 있는 문제들은 병렬화하기 어렵다.[1]
  • 프로세서 성능: 단일 프로세서의 성능에는 이론적인 한계가 있지만, 병렬 알고리즘도 병렬화할 수 없는 부분이 있어 성능 향상에 한계가 있을 수 있다. (암달의 법칙 참조)[1]
  • 계산량 측정: 순차 알고리즘은 메모리 사용량과 처리 시간으로 계산량을 측정하지만, 병렬 알고리즘에서는 프로세서 간 통신 비용도 고려해야 한다.[1]


분산 알고리즘컴퓨터 클러스터분산 컴퓨팅 환경에서 동작하도록 설계된 병렬 알고리즘의 일종으로, 고전적인 병렬 알고리즘과는 다른 문제들을 다룬다.[1]

3. 1. 통신

공유 메모리 처리 방식은 데이터 잠금이 필요하여 오버헤드가 발생하고, 알고리즘 일부가 순차적으로 처리된다.[1]

메시지 전달 처리 방식은 채널과 메시지 박스를 사용하지만, 버스 전송 오버헤드, 추가 메모리 필요, 메시지 지연 시간 등의 문제가 발생한다.[1] 크로스바 같은 특수 버스를 사용하여 통신 오버헤드를 줄일 수 있지만, 통신량은 병렬 알고리즘에 따라 달라진다.[1]

3. 2. 부하 분산

병렬 알고리즘에서 중요한 점 중 하나는 각 프로세서에 작업을 균등하게 분배하는 부하 분산이다. 즉, 입력 크기가 아닌 전체 작업량을 기준으로 균형을 맞춰야 한다. 예를 들어, 1부터 10만까지의 숫자가 소수인지 확인하는 작업을 여러 프로세서에 나누어 줄 때, 단순히 숫자의 범위를 균등하게 나누면 문제가 발생할 수 있다. 작은 숫자는 소수 판별이 더 쉽기 때문에, 작은 숫자를 할당받은 프로세서는 작업을 빨리 끝내고 다른 프로세서가 작업을 마칠 때까지 유휴 상태로 대기하게 된다.

일부 알고리즘은 작업을 쉽게 분할할 수 있다. 예를 들어, 1부터 수천까지의 숫자가 소수인지 확인하는 경우, 각 프로세서에 특정 범위의 숫자를 할당하고, 결과를 합치면 된다.

3. 3. 병렬 속도 저하

프로세서를 추가하여 얻는 이점보다 통신 오버헤드가 더 커지면 병렬 속도 저하가 발생한다.[1] 병렬 알고리즘에는 병렬화할 수 없는 부분이 존재하여, 병렬도를 높여도 성능이 향상되지 않는 지점이 있다 (암달의 법칙 참조).[1] 이 지점을 넘어서 프로세서를 추가하면 처리량이 향상되지 않고, 오히려 오버헤드와 비용만 늘어나는 결과가 나타난다.[1]

4. 분산 알고리즘

분산 알고리즘은 클러스터 컴퓨팅 및 분산 컴퓨팅 환경에서 작동하도록 설계된 알고리즘으로, "고전적인" 병렬 알고리즘의 범위를 넘어선 추가적인 문제들을 해결해야 한다. 예를 들어, 1부터 수백, 수천까지의 범위에 있는 숫자 각각이 소수인지 여부를 조사하는 경우, 각 프로세서에 부분 범위를 할당하면 되며, 최종적으로 결과 목록을 연결하면 된다.

일반적으로 단일 프로세서의 극히 빠른 컴퓨터보다 다수의 느린 프로세서로 동등한 처리량을 실현하는 컴퓨터를 구축하는 것이 더 쉽다. 또한, 단일 프로세서의 성능에는 이론적인 한계가 있다. 분산 알고리즘은 컴퓨터 클러스터분산 컴퓨팅 환경에서 동작하도록 설계되어 있으며, 고전적인 병렬 알고리즘과는 다른 문제에 대처할 필요가 있다.

5. 구현

분산 알고리즘은 컴퓨터 클러스터, GPU 및 메니코어 CPU, FPGA와 같은 하드웨어를 사용하여 구현할 수 있다.

5. 1. 컴퓨터 클러스터

여러 대의 컴퓨터 클러스터를 네트워크로 연결하여 하나의 시스템처럼 작동하도록 구성한 것이다.

5. 2. GPU 및 메니코어 CPU

그래픽 처리 장치(GPU)는 수천 개의 코어를 포함하여 병렬 처리에 특화되어 있다. NVIDIA Tesla K80은 4,992 코어를 가진다.[1] 메니코어 CPU는 수십 개 이상의 코어를 포함하는 CPU를 의미한다.

5. 3. FPGA

프로그래밍 가능한 논리 소자를 사용하여 특정 연산에 최적화된 하드웨어를 구성할 수 있다. 여러 개의 로직 요소를 병렬로 작동시켜 높은 성능을 얻을 수 있다. 알테라의 Stratix V는 최대 359,200개의 적응형 로직 모듈과 최대 3,926개의 가변 정밀도 DSP 블록을 갖추고 있으며, 이들은 병렬로 작동한다.

참조

[1] 웹사이트 Parallel Algorithms https://www.cs.cmu.e[...] School of Computer Science, [[Carnegie Mellon University]] 2015-07-27
[2] 웹사이트 Thinking in Parallel: Some Basic Data-Parallel Algorithms and Techniques, 104 pages http://users.umiacs.[...] Class notes of courses on parallel algorithms taught since 1992 at the University of Maryland, College Park, Tel Aviv University and the Technion 2009
[3] 서적 Automatic Parallelization For A Class Of Regular Computations https://books.google[...] World Scientific 1997-01-04
[4] 서적 The discrete math workbook: a companion manual using Python Springer Naturel 2020
[5] 웹인용 Parallel Algorithms https://www.cs.cmu.e[...] School of Computer Science, [[Carnegie Mellon University]] 2015-07-27
[6] 웹인용 Thinking in Parallel: Some Basic Data-Parallel Algorithms and Techniques, 104 pages http://users.umiacs.[...] Class notes of courses on parallel algorithms taught since 1992 at the University of Maryland, College Park, Tel Aviv University and the Technion 2009



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com