맨위로가기

병렬 컴퓨팅

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

1. 개요

병렬 컴퓨팅은 여러 개의 계산을 동시에 수행하여 작업 처리 속도를 높이는 기술이다. 역사는 1950년대 초로 거슬러 올라가며, 초기에는 특수 설계된 컴퓨터 아키텍처가 등장했다. 암달의 법칙과 구스타프슨의 법칙은 병렬 처리의 성능 향상 한계를 설명한다. 병렬 처리는 비트 수준, 명령어 수준, 데이터 수준, 태스크 수준으로 분류되며, 하드웨어는 공유 메모리, 분산 메모리, CPU 캐시, 상호 연결 네트워크 등을 사용한다. 플린의 분류학은 병렬 컴퓨터를 SISD, SIMD, MISD, MIMD로 구분하며, 멀티코어 프로세서, 대칭형 멀티프로세싱, 분산 컴퓨팅 등 다양한 형태의 병렬 컴퓨터가 존재한다. 소프트웨어 측면에서는 프로그래밍 언어, 라이브러리, API, 병렬 프로그래밍 모델이 개발되었으며, 자동 병렬화, 응용 프로그램 체크포인팅 기술이 활용된다. 하지만 병렬 컴퓨팅은 통신 및 동기화 오버헤드, 프로그램의 병렬화 가능 정도에 따른 성능 차이, 병렬화에 따른 오버헤드 발생 등의 한계를 가진다.

더 읽어볼만한 페이지

  • 분산 컴퓨팅 - 클라우드 컴퓨팅
    클라우드 컴퓨팅은 인터넷을 통해 컴퓨팅 자원을 서비스 형태로 제공하는 모델로, 다양한 서비스 및 배치 모델을 가지며 비용 효율성과 확장성을 제공하지만 보안 및 의존성 문제도 존재하며 지속적으로 발전하고 있다.
  • 분산 컴퓨팅 - 그리드 컴퓨팅
    그리드 컴퓨팅은 지리적으로 분산된 컴퓨터 자원을 연결하여 가상 슈퍼컴퓨터를 구축하는 기술이며, 유휴 자원을 활용하고 과학 연구 등 다양한 분야에 활용된다.
  • 병렬 컴퓨팅 - 슈퍼컴퓨터
    슈퍼컴퓨터는 일반 컴퓨터보다 훨씬 높은 성능을 가진 컴퓨터로, 복잡한 계산과 시뮬레이션을 수행하며, 프로세서, 메모리, 스토리지, 네트워크 등으로 구성되어 병렬 처리를 통해 높은 성능을 구현하고, 군사, 기상 예측, 과학 기술 분야, 인공지능 등 다양한 분야에서 활용되고 있다.
  • 병렬 컴퓨팅 - 컴퓨터 클러스터
    컴퓨터 클러스터는 여러 대의 상용 컴퓨터를 고속 네트워크로 연결하여 고성능 컴퓨팅 시스템을 구축하는 방식으로, 슈퍼컴퓨터를 포함한 다양한 분야에서 높은 가용성과 확장성을 제공하며, 클러스터 미들웨어를 통해 시스템 관리, 부하 분산, 통신 방식, 데이터 공유 등을 지원하고 노드 장애 관리를 위한 펜싱 기술을 활용한다.
병렬 컴퓨팅
일반 정보
다른 이름병렬 처리
유형컴퓨팅
특징
동시성여러 계산이 동시에 수행됨
자원 활용여러 개의 처리 요소를 사용하여 문제 해결
적용 분야수치 시뮬레이션
인공지능
데이터 분석
하드웨어 아키텍처
병렬 처리 유형다중 코어 프로세서
다중 프로세서
클러스터
MPP (대규모 병렬 프로세서)
GPU (그래픽 처리 장치)
FPGA (필드 프로그래머블 게이트 어레이)
프로그래밍 모델
병렬 프로그래밍 모델공유 메모리 (예: OpenMP)
분산 메모리 (예: MPI)
데이터 병렬 프로그래밍
장점
성능 향상계산 속도 증가 및 처리량 향상
확장성더 많은 자원을 추가하여 문제 해결 가능
복잡한 문제 해결대규모 및 복잡한 문제 해결 가능
단점
복잡성프로그래밍 및 디버깅의 어려움
비용추가 하드웨어 및 소프트웨어 비용 발생 가능
통신 오버헤드프로세스 간 통신으로 인한 성능 저하 가능
병렬화 수준
비트 수준 병렬화가장 낮은 수준의 병렬 처리
명령어 수준 병렬화단일 프로세서 내에서 명령어 실행 속도 향상
데이터 수준 병렬화동일한 연산을 여러 데이터에 동시에 적용
작업 수준 병렬화독립적인 작업을 동시에 실행

2. 역사

thumbnail


루이지 페데리코 메나브레아가 쓴 찰스 배비지의 해석 기관에 대한 기록은 진정한 (MIMD) 병렬 처리 개념의 기원이다.[71][72][73] 1950년대와 1960년대에 IBM과 버로스 등에서 병렬 처리를 위한 초기 컴퓨터들이 개발되었다.

1958년, 스탠리 길(Ferranti)은 병렬 프로그래밍, 분기 및 대기의 필요성을 논의했고,[77] IBM 연구원 존 코크와 다니엘 슬롯닉은 수치 계산에서 병렬 처리 사용을 처음 논의했다.[78]

1962년, 버로스(Burroughs Corporation)는 크로스바 스위치를 통해 최대 16개 메모리 모듈에 접근하는 4개 프로세서 컴퓨터 D825를 출시했다.[79] 1967년, 암달과 슬로트닉은 미국 정보 처리 학회 컨퍼런스에서 병렬 처리 타당성 논쟁을 벌였고,[78] 이 논쟁에서 암달의 법칙이 만들어졌다.

1969년, 허니웰(Honeywell)은 최대 8개 프로세서를 병렬 실행할 수 있는 대칭형 멀티프로세서 시스템인 최초의 Multics 시스템을 도입했다.[78] 1970년대 카네기 멜론 대학교의 멀티 프로세서 프로젝트 C.mmp는 소수 이상의 프로세서를 갖춘 최초의 멀티 프로세서 중 하나였다.

1970년대에는 멀티 프로세서 시스템과 SIMD 병렬 컴퓨터가 등장했다. 초기 SIMD 병렬 컴퓨터는 프로세서 제어 장치의 전파 지연을 여러 명령어에 분산시키는 것이 목적이었다.[80] 1964년, 슬로트닉은 로렌스 리버모어 국립 연구소의 대규모 병렬 컴퓨터 구축을 제안했고,[78] 미국 공군 지원으로 ILLIAC IV가 만들어졌다.[78] ILLIAC IV는 11년 동안 프로젝트 1/4만 완료되고 비용은 원래 추정치의 4배가 들어 "가장 악명 높은 슈퍼컴퓨터"로 불렸다.[81] 1976년 첫 실제 응용 프로그램 실행 당시, Cray-1 같은 기존 상용 슈퍼컴퓨터보다 성능이 낮았다.

1980년대 이후, 클럭 속도 향상 한계와 전력 소비 문제로 멀티 코어 프로세서가 주류가 되면서 병렬 컴퓨팅은 중요해졌다. 칩 전력소모량(P)은 P = C × V2 × F 공식에 따라 주파수(F)를 높이면 전력 사용량이 늘어난다.[136] 인텔은 2004년 5월 테자스와 제이호크 개발을 중단했는데,[137] 이는 주파수 척도에 의한 컴퓨터 구조 패러다임이 끝남을 의미한다. 무어의 법칙은 유효하며, 추가 트랜지스터는 추가 병렬 컴퓨팅에 쓰인다.

한국에서는 1980년대부터 슈퍼컴퓨터 개발이 시작되어, 1993년 한국과학기술정보연구원(KISTI)에서 슈퍼컴퓨터 1호기를 도입하였다. 이후 지속적인 투자를 통해 슈퍼컴퓨터 성능을 향상시켜 왔으며, 2018년에는 슈퍼컴퓨터 5호기 누리온을 도입하여 세계적인 수준의 컴퓨팅 성능을 확보하였다.

2. 1. 암달의 법칙과 구스타프슨의 법칙

암달의 법칙은 프로그램에서 병렬화할 수 없는 부분(순차적인 부분)이 전체적인 병렬 처리 성능 향상을 제한한다는 법칙이다. 진 암달이 1960년대에 제시한 이 법칙은, 수학적, 공학적 문제들이 일반적으로 병렬화 가능한 부분과 불가능한 부분으로 구성된다는 점에 착안한다.[139] 이 관계는 다음과 같은 공식으로 표현된다.

:S = \frac{1}{1 - P}

여기서 ''S''는 프로그램의 속도 향상, ''P''는 병렬화 가능한 부분의 비율을 의미한다. 예를 들어, 프로그램의 10%가 순차적인 부분이라면, 아무리 많은 프로세서를 추가해도 속도 향상은 10배를 넘을 수 없다. 이는 병렬 실행 유닛을 추가하는 데 실질적인 한계가 있음을 보여준다.[99]

암달의 법칙을 그림으로 표현했다. 병렬화로 인한 프로그램의 속도 향상은 프로그램이 얼마나 병렬화되어있는지에 제한되어있다. 예를 들면 90%의 프로그램이 병렬화될 수 있다면 이론적으로 병렬 컴퓨팅을 사용한 속도 향상은 몇 개의 프로세서를 쓰던지 10배의 속도까지만 향상시킬 수 있다.


구스타프슨의 법칙은 암달의 법칙과 밀접하게 관련된 또 다른 컴퓨터 공학 법칙이다. 암달의 법칙이 문제의 크기가 고정되어 있다고 가정한 반면, 구스타프슨의 법칙은 이러한 가정을 완화하여, 문제의 크기가 커짐에 따라 병렬 처리의 효과가 증가할 수 있음을 보여준다.[140] 이 법칙은 다음과 같은 공식으로 표현된다.

: S(P) = P - \alpha(P-1) \,

여기서 ''P''는 프로세서 수, ''S''는 속도 향상, ''α''는 비병렬 부분의 비율을 나타낸다.[100]

작업이 A와 B, 두 개의 독립적인 부분으로 되어있다고 가정하자. B는 전체 계산 중에 대충 25% 정도 시간을 차지한다. 프로그래머가 노력해서 이 부분을 5배 빠르게 만들었더라도, 전체 계산을 봤을 때에는 약간의 시간 감소에 불과하다. 반대로 A 부분을 2배로 만들면 B 부분을 빠르게 만드는 것보다 훨씬 더 효과가 있다. B를 5배 빠르게 만들었다고 해도 마찬가지이다.

2. 2. 데이터 종속성

병렬 알고리즘을 구현하려면 데이터 의존성(data dependency)을 이해해야 한다. 데이터 종속성은 계산 간 실행 순서를 결정하며, 종속적인 계산은 병렬로 처리할 수 없다.

Pi와 Pj라는 두 프로그램 조각이 있을 때, 번스타인 조건[141]은 두 조각이 독립적이고 병렬로 실행될 수 있는 조건을 설명한다. Ii를 Pi의 입력 변수 집합, Oi를 출력 변수 집합이라 하고, Pj도 마찬가지로 정의한다. 다음 조건을 만족하면 Pi와 Pj는 독립적이다.

  • I_j \cap O_i = \varnothing, \,
  • I_i \cap O_j = \varnothing, \,
  • O_i \cap O_j = \varnothing. \,


첫 번째 조건 위반은 흐름 종속성(flow dependency)을 야기하며, 이는 첫 번째 문장이 생성한 결과를 두 번째 문장이 사용할 때 발생한다. 두 번째 조건은 대 종속성(anti-dependency)을 나타내는데, 이는 첫 번째 문장이 두 번째 문장에 필요한 변수를 덮어쓸 때 발생한다. 세 번째 조건은 출력 종속성을 의미하며, 두 문장이 같은 위치에 값을 쓸 때 최종 결과는 논리적으로 마지막으로 실행된 명령에 의해 결정된다.[142]

다음은 종속성의 예시를 보여주는 함수이다.

```text

function Dep(a, b)

c := a*b

d := 2*c

end function

```

`Dep` 함수에서 3행은 2행의 결과에 의존하므로 2행이 실행되기 전에는 실행될 수 없다. 이는 흐름 종속성의 예시다.

반면, 다음 함수는 종속성이 없어 병렬 처리가 가능하다.

```text

function NoDep(a, b)

c := a*b

d := 2*b

e := a+b

end function

```

번스타인 조건은 프로세스 간 메모리 공유를 허용하지 않으므로, 세마포어, 배리어 등의 동기화 방법을 사용하여 접근 순서를 제어해야 한다.

2. 3. 경쟁 상태, 상호 배제, 동기화

병렬 프로그램에서 하위 작업은 주로 스레드라고 불린다. 일부 병렬 컴퓨터 구조에서는 이보다 작고 가벼운 파이버나, 더 큰 단위인 프로세스를 사용하기도 한다. 하지만 일반적으로 '스레드'가 하위 작업을 지칭하는 용어로 통용된다.[24]

스레드들은 공유 변수를 갱신해야 하는 경우가 많은데, 이때 여러 스레드의 명령어 실행 순서가 일정하지 않아 문제가 발생할 수 있다. 예를 들어, 다음과 같은 프로그램을 보자.

스레드 A스레드 B
1A: 변수 V를 읽기1B: 변수 V를 읽기
2A: 변수 V의 값에 1을 더함2B: 변수 V의 값에 1을 더함
3A: 변수 V에 값을 다시 쓰기3B: 변수 V에 값을 다시 쓰기



명령어 1B가 1A와 3A 사이에, 또는 1A가 1B와 3B 사이에 실행되면 프로그램은 잘못된 데이터를 생성하게 된다. 이를 경합 상태라고 한다.

이 문제를 해결하려면 락을 이용해 상호 배타를 구현해야 한다. 락은 한 스레드가 변수를 제어하는 동안 다른 스레드의 접근(읽기, 쓰기)을 막는 프로그래밍 언어 구성 요소이다. 락을 획득한 스레드는 임계 구역을 실행하고 완료 후 락을 해제한다.

위 프로그램을 락을 사용해 다시 작성하면 다음과 같다.

스레드 A스레드 B
1A: 변수 V를 락1B: 변수 V를 락
2A: 변수 V를 읽기2B: 변수 V를 읽기
3A: 변수 V의 값에 1을 더함3B: 변수 V의 값에 1을 더함
4A: 변수 V에 값을 다시 쓰기4B: 변수 V에 값을 다시 쓰기
5A: 변수 V를 언락5B: 변수 V를 언락



이제 한 스레드가 V를 잠그면 다른 스레드는 해제될 때까지 기다려 프로그램이 올바르게 실행된다. 락은 정확성을 보장하지만 실행 속도를 늦출 수 있다.[25]

원자적 연산이 아닌 락으로 여러 변수를 잠그면 교착 상태가 발생할 수 있다. 원자적 락은 여러 변수를 한 번에 잠그며, 모두 잠글 수 없으면 아무것도 잠그지 않는다. 두 스레드가 각각 원자적이지 않은 락으로 같은 두 변수를 잠가야 할 때, 한 스레드가 하나를, 다른 스레드가 나머지 하나를 잠그는 상황이 발생하면 교착 상태가 된다.[26]

많은 병렬 프로그램은 하위 작업의 동기화가 필요하다. 이를 위해 배리어를 사용하며, 보통 락이나 세마포어로 구현된다.[27] 락 프리 및 대기 프리 알고리즘은 락과 배리어 사용을 피하지만 구현이 어렵고 정교한 자료 구조 설계가 요구된다.[28]

병렬화가 항상 성능 향상을 가져오지는 않는다. 작업을 더 많은 스레드로 나눌수록 스레드 간 통신 시간이 늘어날 수 있다.[29][30] 통신 오버헤드가 커지면 병렬화의 효과가 감소하거나 오히려 성능이 저하될 수 있는데, 이를 병렬 감속이라 한다.[31]

3. 병렬 처리의 종류

애플리케이션은 스레드 간 통신 빈도에 따라 분류할 수 있다. 세분화된 병렬성(fine-grained parallelism)은 스레드 간 통신이 빈번한 반면, 조립식 병렬성(coarse-grained parallelism)은 그 반대이다. 자명한 병렬성(embarrassingly parallel)은 스레드 간 통신이 거의 필요 없어 병렬화가 가장 쉽다.

마이클 J. 플린은 플린의 분류를 통해 병렬(및 순차) 컴퓨터/프로그램을 명령어 흐름과 데이터 흐름의 수에 따라 4가지 유형으로 나누었다.


  • SISD(단일 명령어, 단일 데이터): 순차적 프로그램과 동일하다.
  • SIMD(단일 명령어, 복수 데이터): 동일 연산을 다수 데이터에 대해 수행하며, 신호 처리 등에 쓰인다.
  • MISD(복수 명령어, 단일 데이터): 결함 허용 시스템의 중복 구성에 해당하며, 시스톨릭 배열 아키텍처가 있지만 실제 응용은 적다.
  • MIMD(복수 명령어, 복수 데이터): 대부분의 병렬 프로그램이 해당한다.


데이비드 패터슨과 존 헤네시는 "일부 머신은 혼성 형태를 띠지만, 단순하고 이해하기 쉬우며, 임시적인 근사치로서는 최적이기 때문에 이 분류가 지금도 사용되고 있다"고 언급했다.[104]

3. 1. 비트 수준 병렬 처리

초고밀도 집적회로(VLSI) 컴퓨터 칩 제조 기술이 등장한 1970년대부터 1986년경까지, 컴퓨터 아키텍처의 속도 향상은 프로세서가 한 번에 처리할 수 있는 정보의 양, 즉 컴퓨터 워드 크기를 두 배로 늘리는 방식으로 이루어졌다.[38] 워드 크기가 커지면 워드 길이보다 큰 변수에 대한 연산을 수행할 때 프로세서가 실행해야 하는 명령어 수가 줄어든다. 예를 들어, 8비트 프로세서가 두 개의 16비트 정수를 더해야 하는 경우를 생각해보자. 이 때, 프로세서는 먼저 각 정수의 하위 8비트를 표준 덧셈 명령어를 사용하여 더한다. 그 후, 상위 8비트를 올림 비트를 포함한 덧셈 명령어를 사용하여 더하고, 하위 8비트 덧셈에서 발생한 올림 비트를 고려해야 한다. 따라서 8비트 프로세서는 하나의 연산을 완료하기 위해 두 개의 명령어가 필요하지만, 16비트 프로세서는 하나의 명령어로 연산을 완료할 수 있다.

역사적으로 4비트 마이크로프로세서는 8비트, 16비트, 32비트 마이크로프로세서로 대체되었다. 32비트 프로세서는 20년 동안 범용 컴퓨팅의 표준으로 자리 잡았으며, 이러한 추세는 일반적으로 32비트 프로세서의 도입과 함께 종료되었다. 그러나 2000년대 초반, x86-64 아키텍처의 등장과 함께 64비트 프로세서가 널리 사용되기 시작했다.

3. 2. 명령어 수준 병렬 처리

컴퓨터 프로그램은 본질적으로 프로세서가 실행하는 명령어의 흐름이다. 명령어 수준 병렬 처리는 프로그램의 결과를 변경하지 않고, 여러 명령어를 동시에 실행(병렬 실행)할 수 있도록 재정렬 및 그룹화하는 방식이다. 이러한 명령어 수준 병렬 처리 기술은 1980년대 중반부터 1990년대 중반까지 컴퓨터 아키텍처 발전에 큰 영향을 미쳤다.[39]

최신 프로세서는 다단계 명령어 파이프라인을 사용한다. 파이프라인의 각 단계는 프로세서가 해당 명령어에 대해 수행하는 서로 다른 작업을 의미한다. 예를 들어, N단계 파이프라인을 가진 프로세서는 최대 N개의 서로 다른 명령어를 각각 다른 완료 단계에서 처리할 수 있다. 파이프라인 프로세서의 대표적인 예시는 RISC 프로세서로, 명령어 인출(IF), 명령어 디코딩(ID), 실행(EX), 메모리 접근(MEM), 레지스터 쓰기 백(WB)의 5단계로 구성된다. 펜티엄 4 프로세서는 35단계의 파이프라인을 가졌다.[40]

전형적인 5단계 명령어 파이프라인 프로세서. 최상의 시나리오에서는 하나의 명령어를 완료하는 데 1 클럭 사이클이 걸리므로 프로세서는 스칼라 성능을 낼 수 있다.


두 개의 실행 장치가 있는 전형적인 5단계 명령어 파이프라인 프로세서. 최상의 시나리오에서는 두 개의 명령어를 완료하는 데 1 클럭 사이클이 걸리므로 프로세서는 수퍼스칼라 성능을 낼 수 있다.


대부분의 최신 프로세서는 여러 개의 실행 장치를 가지고 있으며, 파이프라인 기술과 결합하여 클럭 사이클당 두 개 이상의 명령어를 처리할 수 있다. 이러한 프로세서를 ''수퍼스칼라'' 프로세서라고 한다. 수퍼스칼라 프로세서는 여러 실행 장치가 전체 프로세서(즉, 처리 장치)가 아니라는 점에서 멀티 코어 프로세서와는 다르다. 명령어는 데이터 종속성이 없는 경우에만 함께 그룹화될 수 있다. 스코어보딩토마술로 알고리즘(스코어보딩과 유사하지만 레지스터 이름 변경을 사용함)은 무순차 실행 및 명령어 수준 병렬 처리를 구현하는 가장 일반적인 두 가지 기술이다.

3. 3. 데이터 병렬 처리

데이터 병렬 처리는 동일한 연산을 여러 데이터에 대해 동시에 수행하는 방식이다. 자료 병렬화는 프로그램 루프에 내재된 병렬성으로, 프로그램 루프는 병렬로 처리된 다른 컴퓨팅 노드들의 자료를 분산시키는 데 초점을 맞춘다. “루프를 병렬시키는 것은 가끔 비슷한 (완전 같을 필요는 없이) 순차 연산이나 큰 자료구조의 요소에서 실행되는 함수들을 실행시키게 한다.”[147] 많은 과학적, 공학적인 응용물들이 자료 병렬화를 보여준다.

루프가 가지고 있는 종속성은 이전 반복의 하나 이상의 결과에 종속되는 것을 의미한다. 루프의 종속성은 병렬화 루프에 의해 막힌다.[148] 예를 들어 피보나치 수를 계산하는 다음 의사 코드를 보자.

```text

PREV1 := 0

PREV2 := 1

do:

CUR := PREV1 + PREV2

PREV1 := PREV2

PREV2 := CUR

while (CUR < 10)

```

이 루프는 CUR이 각 루프를 도는 동안 그 자신(PREV2)과 PREV1에 종속되기 때문에 병렬화할 수 없다. 각 반복이 그 이전 결과에 종속되므로 병렬화할 수 없다. 문제의 크기가 커질수록 자료 병렬화의 유효성은 일반적으로 커진다.[148]

3. 4. 태스크 병렬 처리

태스크 병렬 처리는 병렬 프로그램의 특징으로, "전혀 다른 계산을 동일하거나 다른 데이터 집합에 대해 수행할 수 있다"는 것이다.[41] 이는 동일한 계산을 동일하거나 다른 데이터 집합에 대해 수행하는 데이터 병렬 처리와 대조된다. 태스크 병렬 처리는 작업을 하위 작업으로 분해한 다음 각 하위 작업을 실행할 프로세서에 할당하는 것을 포함한다. 그런 다음 프로세서는 이러한 하위 작업을 동시에 수행하며, 종종 협력적으로 수행한다.[41] 태스크 병렬 처리는 일반적으로 문제의 크기에 따라 확장되지 않는다.[42]

4. 하드웨어

컴퓨터 소프트웨어는 전통적으로 직렬 계산 방식으로 작성되어 왔다. 문제를 해결하기 위한 알고리즘은 직렬 명령 형태로 구성되었고, 이 명령들은 하나의 중앙 처리 장치(CPU)에서 순차적으로 실행되었다. 즉, 한 번에 하나의 명령만 실행되고, 하나의 명령이 완료되면 다음 명령이 실행되는 방식이었다.[135]

반면, 병렬 컴퓨팅은 여러 개의 처리 요소(프로세서)를 사용하여 문제를 동시에 해결한다. 문제를 독립적인 부분들로 나누고, 각 처리 요소가 해당 부분의 알고리즘을 다른 처리 요소들과 동시에 처리하는 방식이다. 처리 요소는 단일 컴퓨터 내의 여러 프로세서, 네트워크로 연결된 여러 컴퓨터, 특수 하드웨어 또는 이들의 조합 등 다양한 형태를 가질 수 있다.[135]

1980년대 중반부터 2004년까지 컴퓨터 성능 향상의 주요 요인은 클럭 속도 증가였다. 프로그램 실행 시간은 명령어 수와 명령어당 평균 시간을 곱한 값과 같으므로, 클럭 속도를 높이면 명령어 실행 평균 시간이 짧아져 성능이 향상되었다.

하지만 칩의 전력 소모는 P = C × V2 × F 공식으로 계산된다. 여기서 P는 전력, C는 클럭 주기당 전환되는 정전 용량(입력이 바뀌는 트랜지스터 수에 비례), V는 전압, F는 프로세서 주파수(클럭 속도)를 의미한다.[136] 따라서 주파수(프로세서 속도)를 높이면 전력 사용량이 증가한다. 전력 사용량 증가로 인해 인텔은 2004년 5월 테자스와 제이호크 프로세서 개발을 중단했고, 이는 주파수 스케일링을 통한 성능 향상 시대의 종말을 알리는 사건으로 여겨진다.[137]

무어의 법칙은 집적 회로의 트랜지스터 수가 18~24개월마다 두 배로 증가한다는 법칙이다.[138] 전력 소모 문제로 주파수 스케일링은 한계에 도달했지만, 무어의 법칙은 여전히 유효하다. 늘어난 트랜지스터는 추가적인 병렬 컴퓨팅을 위해 사용되고 있다.

4. 1. 메모리 및 통신

병렬 컴퓨터에서 주요 메모리는 공유 메모리(단일 주소 공간에서 모든 처리 요소 간에 공유) 또는 분산 메모리(각 처리 요소가 자체 로컬 주소 공간을 가짐) 중 하나이다.[44] 분산 메모리는 메모리가 논리적으로 분산되어 있다는 사실을 의미하지만, 종종 물리적으로도 분산되어 있음을 의미한다. 분산 공유 메모리와 메모리 가상화는 두 가지 방식을 결합하여 처리 요소가 자체 로컬 메모리를 가지고 비로컬 프로세서의 메모리에 접근할 수 있도록 한다. 로컬 메모리에 대한 접근은 일반적으로 비로컬 메모리에 대한 접근보다 빠르다. 슈퍼컴퓨터에서 분산 공유 메모리 공간은 PGAS와 같은 프로그래밍 모델을 사용하여 구현될 수 있다. 이 모델을 사용하면 하나의 컴퓨팅 노드의 프로세스가 다른 컴퓨팅 노드의 원격 메모리에 투명하게 접근할 수 있다. 모든 컴퓨팅 노드는 또한 인피니밴드와 같은 고속 상호 연결을 통해 외부 공유 메모리 시스템에 연결되며, 이 외부 공유 메모리 시스템은 일반적으로 여러 I/O 노드에 물리적으로 분산된 비휘발성 메모리 배열로 구축된 버스트 버퍼로 알려져 있다.

비균일 메모리 접근(NUMA) 아키텍처의 논리적 보기. 한 디렉토리의 프로세서는 다른 디렉토리의 메모리에 접근하는 것보다 해당 디렉토리의 메모리에 더 적은 대기 시간으로 접근할 수 있다.


주요 메모리의 각 요소에 동일한 메모리 대기 시간 및 대역폭으로 접근할 수 있는 컴퓨터 아키텍처는 균일 메모리 접근(UMA) 시스템으로 알려져 있다. 일반적으로 이것은 메모리가 물리적으로 분산되지 않은 공유 메모리 시스템에서만 달성할 수 있다. 이 속성이 없는 시스템은 비균일 메모리 접근(NUMA) 아키텍처로 알려져 있다. 분산 메모리 시스템은 비균일 메모리 접근을 가지고 있다.

컴퓨터 시스템은 프로세서 근처에 위치하여 메모리 값의 임시 복사본을 저장하는 작고 빠른 메모리인 CPU 캐시를 사용한다(물리적 및 논리적 의미에서 모두 근접). 병렬 컴퓨터 시스템은 동일한 값을 둘 이상의 위치에 저장할 수 있는 캐시로 인해 프로그램 실행이 잘못될 가능성이 있으므로 어려움을 겪는다. 이러한 컴퓨터는 캐시 값을 추적하고 전략적으로 제거하여 올바른 프로그램 실행을 보장하는 캐시 일관성 시스템이 필요하다. 버스 스누핑은 어떤 값에 접근하고 있는지(따라서 제거해야 함) 추적하는 가장 일반적인 방법 중 하나이다. 크고 고성능의 캐시 일관성 시스템을 설계하는 것은 컴퓨터 아키텍처에서 매우 어려운 문제이다. 결과적으로 공유 메모리 컴퓨터 아키텍처는 분산 메모리 시스템만큼 잘 확장되지 않는다.[44]

프로세서 간 및 프로세서-메모리 통신은 공유(다중 포트 또는 다중화) 메모리, 크로스바 스위치, 공유 버스 또는 무수한 네트워크 토폴로지의 상호 연결 네트워크(예: 별 모양, , 트리, 하이퍼큐브, 팻 하이퍼큐브(노드에 둘 이상의 프로세서가 있는 하이퍼큐브), 또는 n차원 메시)를 포함한 여러 가지 방법으로 하드웨어에서 구현할 수 있다.

상호 연결된 네트워크를 기반으로 하는 병렬 컴퓨터는 직접 연결되지 않은 노드 간의 메시지 전달을 가능하게 하는 일종의 라우팅을 가져야 한다. 프로세서 간 통신에 사용되는 매체는 대규모 멀티 프로세서 머신에서 계층적일 가능성이 높다.

4. 2. 병렬 컴퓨터의 분류

병렬 컴퓨터는 하드웨어가 병렬 처리를 지원하는 수준에 따라 대략적으로 분류할 수 있다. 이는 기본 컴퓨팅 노드 간의 거리에 비유할 수 있으며, 서로 배타적이지 않다. 예를 들어 대칭형 멀티프로세서 클러스터가 비교적 흔하다.

; 멀티코어 프로세서

: 멀티코어 프로세서는 동일한 칩에 여러 개의 처리 장치( "코어"라고 함)를 포함하는 프로세서이다. 이는 여러 개의 실행 장치를 포함하고 하나의 명령 스트림(스레드)에서 클럭 사이클당 여러 개의 명령을 실행할 수 있는 슈퍼스칼라 프로세서와는 다르다. 멀티코어 프로세서는 여러 명령 스트림에서 클럭 사이클당 여러 개의 명령을 실행할 수 있다. IBM의 Cell 마이크로프로세서는 소니 플레이스테이션 3에 사용하도록 설계되었으며, 널리 알려진 멀티코어 프로세서이다. 멀티코어 프로세서의 각 코어는 잠재적으로 슈퍼스칼라일 수도 있다. 즉, 모든 클럭 사이클마다 각 코어는 하나의 스레드에서 여러 개의 명령을 실행할 수 있다.[135]

: 동시 멀티스레딩(이 중 인텔의 하이퍼 스레딩이 가장 잘 알려져 있음)은 초기 형태의 유사 멀티코어 기술이었다. 동시 멀티스레딩을 지원하는 프로세서는 동일한 처리 장치에 여러 개의 실행 장치를 포함한다. 즉, 슈퍼스칼라 아키텍처를 가지고 있으며, ''여러'' 스레드에서 클럭 사이클당 여러 개의 명령을 실행할 수 있다. 반면에 시간적 멀티스레딩은 동일한 처리 장치에 단일 실행 장치를 포함하고 있으며, ''여러'' 스레드에서 한 번에 하나의 명령을 실행할 수 있다.[135]

; 대칭형 멀티프로세서(SMP)

: 대칭형 멀티프로세서(SMP)는 메모리를 공유하고 버스를 통해 연결되는 여러 개의 동일한 프로세서를 가진 컴퓨터 시스템이다.[45] 버스 경합은 버스 아키텍처의 확장을 방해한다. 결과적으로, SMP는 일반적으로 32개 이상의 프로세서로 구성되지 않는다.[46] 프로세서의 작은 크기와 대형 캐시로 인해 버스 대역폭 요구 사항이 크게 감소했기 때문에, 충분한 양의 메모리 대역폭이 존재하는 경우 이러한 대칭형 멀티프로세서는 매우 비용 효율적이다.[45]

; 분산 컴퓨팅

: 분산 컴퓨터(분산 메모리 멀티프로세서라고도 함)는 처리 요소가 네트워크로 연결된 분산 메모리 컴퓨터 시스템이다. 분산 컴퓨터는 확장성이 뛰어나다. "동시 컴퓨팅", "병렬 컴퓨팅" 및 "분산 컴퓨팅"이라는 용어는 많은 부분에서 중복되며, 이들 간에는 명확한 구분이 존재하지 않는다.[47] 동일한 시스템을 "병렬" 및 "분산"으로 모두 특징지을 수 있다. 일반적인 분산 시스템의 프로세서는 병렬로 동시에 실행된다.[48]

병렬 컴퓨팅 내에는 틈새 시장으로 남아 있는 특수 병렬 장치가 있다. 도메인별은 아니지만, 몇 가지 종류의 병렬 문제에만 적용되는 경향이 있다.

; GPU상에서의 범용 처리(GPGPU)

: GPGPU(General-purpose computing on GPU)는 CPU를 훨씬 능가하는 이론 연산 성능 및 전력 효율을 가진 GPU를 범용 계산에 사용하는 것이다.[118] GPU는 실시간 컴퓨터 그래픽스 처리에 최적화된 코프로세서이며, 선형대수 연산(행렬 연산・벡터 연산)을 데이터 병렬로 처리하는 것에 특화되어 있다. 프로그래밍 가능 셰이더의 출현과 발전에 의해 범용 계산으로의 응용의 길이 열렸다. GPGPU는, 원래 GPU가 특기인 이미지 처리 전반에의 적용이나, 대량의 연산이 필요한 기계 학습 분야에서의 활용이 진행되고 있다. 다만 CPU와 GPU는 설계 사상의 차이로 각각 특기 분야가 다르므로, 모든 처리를 GPU에 의한 병렬 계산으로 고속화하려고 시도하는 것은 현실적이지 않다.

: NVIDIA GeForce/NVIDIA Quadro, AMD Radeon/AMD FirePro와 같은 퍼스널 컴퓨터나 워크스테이션용 그래픽스 프로세서를 GPGPU 목적으로 이용할 수 있으며, NVIDIA Tesla 시리즈나 AMD FirePro S 시리즈(구 AMD FireStream)와 같은 GPGPU 전용의 서버용 하드웨어도 출현하고 있다.

; FPGA와 재구성형 컴퓨팅

: 재구성형 컴퓨팅이란, FPGA를 범용 컴퓨터의 코프로세서로 이용하는 것이다. FPGA는, 내부 배선을 변경 가능한 집적 회로이다.

: FPGA 내의 배선은, VHDL나 Verilog와 같은 하드웨어 기술 언어(HDL)로 프로그래밍이 가능하다. 그러나, 이러한 언어로의 프로그래밍은 손이 많이 간다. 그래서, 많은 프로그래머가 친숙한 C 언어의 소스를 HDL의 소스로 변환하는 소프트웨어가 여러 개 개발되어 있다. 예를 들어, Mitrion-C, Impluse C, DIME-C, Handel-C 등이 있다.

; ASIC(Application Specific Integrated Circuit)

: ASIC을 사용하여 병렬 처리를 하려는 시도가 몇 가지 이루어지고 있다.[119][120][121]

: ASIC는 본질적으로 특정 용도를 상정하고 설계되므로, 그 용도에 맞게 완전히 최적화된다. 결과적으로, 그 용도에 관해서는 범용 컴퓨터보다 고속으로 처리할 수 있는 경우가 많다. 그러나, ASIC 제작에는 포토마스크가 필요하며, 그 설계는 매우 비용이 많이 든다.

; 벡터 컴퓨터

Cray-1은, 가장 유명한 벡터 컴퓨터이다.


: 벡터 컴퓨터란, 다수의 데이터군에 대해 같은 명령을 실행할 수 있는 CPU 또는 컴퓨터 시스템이다. 수치 배열 또는 벡터에 대해 고도한 조작을 실행할 수 있다. 예를 들어, A, B, C가 각각 64개의 64비트 부동소수점수의 배열이라고 했을 때, A = B \times C를 한 번에 한다.[123] 벡터 컴퓨터는, 플린의 분류에 있어서 SIMD와 밀접하게 관련되어 있다.[123]

5. 소프트웨어

전통적으로 컴퓨터 소프트웨어는 직렬 컴퓨팅 방식으로 작성되었다. 문제를 해결하기 위한 알고리즘은 직렬 명령으로 구성되었고, 이 명령들은 하나의 CPU에서 실행되었다. 한 번에 하나의 명령만 실행되며, 명령이 완료되면 다음 명령이 실행된다.[135]

병렬 컴퓨팅은 여러 처리 요소를 사용하여 문제를 동시에 해결한다. 문제를 독립적인 부분으로 나누고, 각 처리 요소가 다른 요소와 동시에 알고리즘의 해당 부분을 처리할 수 있도록 한다. 처리 요소는 여러 프로세서를 가진 단일 컴퓨터, 네트워크로 연결된 여러 컴퓨터, 특수 하드웨어 또는 이러한 자원들의 조합을 포함할 수 있다.[135]

1980년대 중반부터 2004년까지 컴퓨터 성능 향상의 주된 요인은 클럭 속도 증가였다. 프로그램 실행 시간은 명령어 수에 명령어당 평균 시간을 곱한 값과 같으므로, 클럭 속도를 높이면 명령 실행 평균 시간이 짧아진다.

그러나 칩의 전력 소비(P)는 P = C × V2 × F 공식으로 계산된다. 여기서 C는 클럭 주기당 전환되는 전기용량(입력 변화 트랜지스터 수에 비례), V는 전압, F는 주파수(프로세서 속도)이다.[136] 주파수 증가는 전력 사용량 증가를 의미한다. 전력 소비 증가로 인해 인텔은 2004년 5월 테자스와 제이호크 개발을 취소했고, 이는 주파수 스케일링이 지배적인 컴퓨터 아키텍처 패러다임에서 끝났음을 의미한다.[137]

무어의 법칙은 집적 회로의 트랜지스터 수가 18~24개월마다 두 배로 증가한다는 경험 법칙이다.[138] 전력 소비 문제에도 불구하고 무어의 법칙은 여전히 유효하다. 주파수 스케일링은 끝났지만, 추가된 트랜지스터는 병렬 컴퓨팅에 활용될 수 있다.

병렬 프로그램과 병렬 컴퓨터는 일관성 모델(메모리 모델)을 가져야 한다. 일관성 모델은 컴퓨터 메모리 연산 방법과 결과 생성 규칙을 정의한다.

레슬리 램포트의 순차 일관성 모델은 일관성 모델 중 하나이다. 순차 일관성은 병렬 프로그램 실행 결과를 순차적 프로그램 실행 결과와 동일하게 만드는 특성이다. 프로그램은 “…어떤 실행에서의 결과가 모든 프로세서들의 연산이 어떤 순차적인 차례로 실행되거나 그 연산들의 각 독립적인 프로세서가 그 프로그램에 의해 보여주는 순서가 똑같다면” 순차적으로 모순이 없다.

소프트웨어 트랜잭셔널 메모리(STM)는 일반적인 일관성 모델이다. STM은 데이터베이스 이론의 원자 트랜잭션 개념을 메모리 접근에 적용한 것이다.

이러한 모델은 수학적으로 다양하게 표현될 수 있다. 1962년 칼 아담 페트리의 박사 논문에서 소개된 페트리 넷은 일관성 모델 체계화의 초기 시도였다. 자료흐름 이론은 페트리 넷을 기반으로 만들어졌고, 자료흐름 구조는 자료흐름 이론을 물리적으로 구현한 것이다. 1970년대 후반 통신 시스템 미적분(CCS) 및 소통 순차적 프로세스(CSP)와 같은 프로세스 미적분이 개발되어 구성 요소 상호 작용에 대한 대수적 추론이 가능해졌다. 최근에는 파이-미적분이 프로세스 미적분에 동적 토폴로지 처리 기능을 추가했다. 램포트의 TLA+와 같은 논리, 대각합, 액터 이벤트 다이어그램과 같은 수학적 모델도 동시성 시스템 동작을 기술하기 위해 개발되었다.

5. 1. 병렬 프로그래밍 언어

동시 프로그래밍 언어, 라이브러리, API, 병렬 프로그래밍 모델 (예: 알고리즘 골격)은 병렬 컴퓨터 프로그래밍을 위해 만들어졌다. 이것들은 일반적으로 기본 메모리 아키텍처(공유 메모리, 분산 메모리, 공유 분산 메모리)에 따라 분류할 수 있다. 공유 메모리 프로그래밍 언어는 공유 메모리 변수를 조작하여 통신하며, 분산 메모리는 메시지 전달을 사용한다. POSIX 스레드OpenMP는 가장 널리 사용되는 공유 메모리 API이고, MPI는 가장 널리 사용되는 메시지 전달 시스템 API이다.[65] 병렬 프로그램 프로그래밍에 사용되는 개념 중 하나는 퓨처 개념으로, 프로그램의 한 부분이 미래의 특정 시점에 프로그램의 다른 부분에 필요한 데이터를 제공할 것을 약속하는 것이다.

GPGPU와 관련해서는 NVIDIA의 CUDA, Khronos 그룹의 OpenCL 등의 API 정비 및 표준화가 진행되고 있다.

5. 2. 자동 병렬화

자동 병렬화는 순차적 프로그램을 컴파일러를 통해 병렬화하는 것으로, 특히 앞서 언급한 프로세서 주파수 제한과 관련하여 병렬 컴퓨팅의 "성배"로 여겨진다. 수십 년간의 컴파일러 연구에도 불구하고, 자동 병렬화는 제한적인 성공만을 거두었다.[66]

5. 3. 응용 프로그램 체크포인팅

컴퓨터 시스템이 복잡해짐에 따라 평균 고장 시간은 일반적으로 감소한다. 응용 프로그램 체크포인팅은 컴퓨터 시스템이 응용 프로그램의 "스냅샷", 즉 모든 현재 리소스 할당 및 변수 상태를 코어 덤프와 유사하게 기록하는 기술이다. 이 정보는 컴퓨터에 오류가 발생할 경우 프로그램을 복원하는 데 사용될 수 있다.[67] 응용 프로그램 체크포인팅을 사용하면 프로그램은 처음부터 다시 시작하는 대신 마지막 체크포인트에서만 다시 시작하면 된다. 체크포인팅은 다양한 상황에서 이점을 제공하지만, 특히 고성능 컴퓨팅에 사용되는 많은 수의 프로세서가 있는 고도로 병렬화된 시스템에서 유용하다.[67]

병렬 계산에서는 다수의 프로세서를 사용하여 오랜 시간이 걸리는 처리를 수행하는 경우가 많다. 따라서 애플리케이션 실행 중 상태(모든 리소스 확보 상황 및 변수 그룹 상태 등)를 코어 덤프와 같은 형태로 정기적으로 보존해두고, 장애가 발생했을 때 처음부터 처리를 다시 시작하는 것이 아니라 중간까지 저장된 상태부터 재개할 수 있도록 할 필요가 있다. 이 기법을 애플리케이션 체크포인팅이라고 부른다. 때로는 수개월이 걸리는 처리도 있으며, 이 경우 애플리케이션 체크포인팅은 매우 중요해진다. 또한 이 기법은 프로세스 마이그레이션에도 응용될 수 있다.

6. 한계

병렬 컴퓨팅은 여러 프로세서가 동시에 작업을 처리하여 성능을 향상시키는 기술이지만, 몇 가지 한계점도 존재한다.


  • 프로세스 간 통신 및 동기화 오버헤드: 병렬 컴퓨팅에서는 여러 프로세서가 데이터를 주고받고, 작업 순서를 맞추는 과정이 필요하다. 이러한 통신과 동기화 과정은 추가적인 시간을 소요하게 만들어, 단일 프로세서에서 처리하는 것보다 2배에서 수십 배까지 느려질 수 있다.[35][36][37] 따라서 병렬 처리를 통해 실제로 성능이 향상되는지 신중하게 확인해야 한다.
  • 병렬도: 프로그램의 모든 부분을 병렬로 처리할 수 있는 것은 아니다. 프로그램에서 병렬 처리가 가능한 부분의 비율을 '병렬도'라고 하는데, 이 병렬도가 낮으면 병렬 컴퓨팅의 효과를 보기 어렵다. 예를 들어, 쇼핑을 하기 전에 지갑을 확인하고 은행에 가는 순차적인 과정은 병렬 처리가 불가능하다.
  • 병렬화의 어려움: 병렬 컴퓨팅 환경에 맞춰 프로그램을 작성하는 것은 쉽지 않다. 실행 순서에 영향을 받지 않고 여러 프로세서에서 동시에 실행될 수 있는 부분들을 잘게 나누는 프로그래밍 기술이 필요하다.
  • 오버헤드로 인한 성능 저하: 병렬화를 위해 추가되는 작업(프로세스 시작/종료, 데이터 분할/통합 등)에 걸리는 시간이 병렬화로 단축되는 시간보다 길어지면 오히려 성능이 떨어질 수 있다. 또한, 물리적인 프로세서 코어 수보다 많은 프로세스를 실행하면 스레드 간 전환에 시간이 걸려 성능이 저하될 수 있다.


결론적으로, 병렬 컴퓨팅은 성능 향상을 위한 강력한 기술이지만, 소프트웨어를 병렬 컴퓨팅 환경에 맞게 최적화하는 것이 매우 중요하다. (자세한 내용은 병렬화 참조)

참조

[1] 서적 Highly parallel computing http://dl.acm.org/ci[...] Benjamin/Cummings
[2] 간행물 Parallel Computing Research at Illinois: The UPCRC Agenda https://graphics.cs.[...] 2008-11
[3] 문서 Asanovic
[4] 간행물 The Landscape of Parallel Computing Research: A View from Berkeley http://www.eecs.berk[...] University of California, Berkeley 2006-12-18
[5] 서적 Parallel and Concurrent Programming in Haskell O'Reilly Media
[6] 서적 Computer organization and design: the hardware/software interface https://archive.org/[...] Kaufmann
[7] 웹사이트 Introduction to Parallel Computing http://www.llnl.gov/[...] Lawrence Livermore National Laboratory 2007-11-09
[8] 서적 Parallel Programming: for Multicore and Cluster Systems Springer Science & Business Media
[9] 서적 Computer architecture / a quantitative approach. International Thomson
[10] 서적 Digital integrated circuits : a design perspective Prentice-Hall
[11] 뉴스 Intel Halts Development Of 2 New Microprocessors https://www.nytimes.[...] 2004-05-08
[12] 서적 Parallel Programming: for Multicore and Cluster Systems Springer Science & Business Media
[13] 서적 Parallel Programming: for Multicore and Cluster Systems Springer Science & Business Media
[14] 간행물 Chapter 2 - Multicore and data-level optimization: OpenMP and SIMD https://linkinghub.e[...] Morgan Kaufmann 2016-01-01
[15] 서적 The Art of Multiprocessor Programming, Revised Reprint Morgan Kaufmann 2012-05-22
[16] 서적 Programming Many-Core Chips Springer 2011-06-10
[17] 서적 Proceedings of the April 18-20, 1967, spring joint computer conference on - AFIPS '67 (Spring) Association for Computing Machinery 1967-04-18
[18] 서적 Computer Architecture: A Quantitative Approach Morgan Kaufmann 2003
[19] 서적 Parallel Computer Architecture A Hardware/Software Approach Elsevier Science 1999
[20] 서적 Structured Parallel Programming: Patterns for Efficient Computation Elsevier
[21] 서적 Guerrilla Capacity Planning: A Tactical Approach to Planning for Highly Scalable Applications and Services
[22] 논문 Analysis of Programs for Parallel Processing 1966-10-01
[23] 서적 Parallel processing and parallel algorithms : theory and computation Springer
[24] 웹사이트 Processes and Threads https://msdn.microso[...] Microsoft Corp. 2018
[25] 웹사이트 Thread Safety for Performance http://www.developfo[...] 2018
[26] 웹사이트 Introduction to Operating System Deadlocks http://www.informit.[...] Pearson Education, Informit 2002-02-01
[27] 웹사이트 Synchronization internals – the semaphore https://www.embedded[...] AspenCore 2015-11-03
[28] 웹사이트 An Introduction to Lock-Free Programming http://preshing.com/[...] 2012-06-08
[29] 웹사이트 What's the opposite of "embarrassingly parallel"? https://stackoverflo[...]
[30] 웹사이트 What is thread contention? https://stackoverflo[...] 2011-08-15
[31] 웹사이트 Why a simple test can get parallel slowdown https://software.int[...] 2008-03-04
[32] 웹사이트 Threading for Performance http://www.developfo[...] 2018
[33] 논문 Some Computer Organizations and Their Effectiveness https://www.cs.utah.[...] 1972-09
[34] 문서 Patterson and Hennessy
[35] 서적 Operating System Concepts Wiley 2008-07-29
[36] 서적 Computer Organization and Design MIPS Edition: The Hardware/Software Interface (The Morgan Kaufmann Series in Computer Architecture and Design) Morgan Kaufmann 2013
[37] 서적 Parallel Programming: Techniques and Applications Using Networked Workstations and Parallel Computers Pearson 2005
[38] 서적 Parallel computer architecture Morgan Kaufmann Publ.
[39] 문서 Culler et al. p. 15.
[40] 웹사이트 The Microprocessor Ten Years From Now: What Are The Challenges, How Do We Meet Them? http://users.ece.ute[...] 2004-04
[41] 문서 Culler et al. p. 124.
[42] 문서 Culler et al. p. 125.
[43] 웹사이트 Exploiting Superword Level Parallelism with Multimedia Instruction Sets http://groups.csail.[...]
[44] 문서 Patterson and Hennessy, p. 713.
[45] 문서 Hennessy and Patterson, p. 549.
[46] 문서 Patterson and Hennessy, p. 714.
[47] 문서 Ghosh (2007), p. 10. Keidar (2008).
[48] 문서 Lynch (1996), p. xix, 1–2. Peleg (2000), p. 1.
[49] 웹사이트 What is clustering? http://www.webopedia[...]
[50] 웹사이트 Beowulf definition. https://www.pcmag.co[...] PC Magazine
[51] 웹사이트 List Statistics https://www.top500.o[...] 2018-08-05
[52] 웹사이트 Interconnect https://www.nersc.go[...]
[53] 문서 Hennessy and Patterson, p. 537.
[54] 웹사이트 MPP Definition. https://www.pcmag.co[...] PC Magazine
[55] 간행물 COMPUTER SCIENCE: Rough Times Ahead
[56] 간행물 Construction of Residue Number System Using Hardware Efficient Diagonal Function 2019-06-20
[57] 서적 2020 4th International Conference on Intelligent Computing and Control Systems (ICICCS) IEEE 2020-05
[58] 문서 Standard Reconfigurable Computing
[59] 웹사이트 GPUs: An Emerging Platform for General-Purpose Computation http://www.arl.army.[...] ARL-SR-154, U.S. Army Research Lab. 2007-08
[60] 간행물 "Systematic Generation of Executing Programs for Processor Elements in Parallel ASIC or FPGA-Based Systems and Their Transformation into VHDL-Descriptions of Processor Element Control Units" 2002
[61] 서적 "[Proceedings] 1991 IEEE International Joint Conference on Neural Networks" 1991-11-18/21
[62] 간행물 A Parallel ASIC Architecture for Efficient Fractal Image Coding 1998-07
[63] 웹사이트 Scoping the Problem of DFM in the Semiconductor Industry http://www.future-fa[...] University of California, San Diego 2004-06-21
[64] 문서 Patterson and Hennessy, p. 751.
[65] 웹사이트 Sidney Fernbach Award given to MPI inventor Bill Gropp http://awards.comput[...]
[66] 서적 Modern processor design : fundamentals of superscalar processors McGraw-Hill
[67] 서적 Encyclopedia of Parallel Computing, Volume 4
[68] 웹사이트 "The Landscape of Parallel Computing Research: A View from Berkeley" http://www.eecs.berk[...] University of California, Berkeley. Technical Report No. UCB/EECS-2006-183 2006-12-18
[69] 간행물 A Randomized Parallel Sorting Algorithm with an Experimental Study http://www.cc.gatech[...] 2012-10-26
[70] 간행물 "Operating system support for redundant multithreading" 2012
[71] 간행물 Sketch of the Analytic Engine Invented by Charles Babbage http://www.fourmilab[...] Bibliothèque Universelle de Genève 1842
[72] 서적
[73] 서적 Parallel Computers 2: Architecture, Programming and Algorithms, Volume 2 https://books.google[...] p. 8 1988
[74] 논문 Something old: the Gamma 60 the computer that was ahead of its time https://dl.acm.org/d[...] 1972-04-01
[75] 웹사이트 Architecture Sketch of Bull Gamma 60 -- Mark Smotherman http://www.feb-patri[...] 2023-08-14
[76] 웹사이트 An Evaluation of the Design of the Gamma 60 https://db.aconit.or[...] Department of Computer Science, Clemson University 2023-08-14
[77] 간행물 Parallel Programming British Computer Society 1958-04
[78] 웹사이트 The History of the Development of Parallel Computing http://ei.cs.vt.edu/[...] Virginia Tech/Norfolk State University, Interactive Learning with a Digital Library in Computer Science 2008-01-08
[79] 웹사이트 The Power of Parallelism http://www.computerw[...] 2001-11-19
[80] 서적
[81] 서적
[82] 서적 The Society of Mind https://archive.org/[...] Simon & Schuster 1986
[83] 서적 The Society of Mind https://archive.org/[...] Simon & Schuster 1986
[84] 서적 Beyond the Conscious Mind. Unlocking the Secrets of the Self https://archive.org/[...] Springer 1996
[85] 서적 The Integrated Mind 1978
[86] 서적 The Social Brain. Discovering the Networks of the Mind https://archive.org/[...] Basic Books 1985
[87] 서적 Evolution of Consciousness: The Origins of the Way We Think https://archive.org/[...] 1992
[88] 서적 Divided consciousness: multiple controls in human thought and action. Wiley 1977
[89] 서적 Divided consciousness: multiple controls in human thought and action (expanded edition). Wiley 1986
[90] 서적 The Future of the Mind 2014
[91] 서적 In Search of the Miraculous. Fragments of an Unknown Teaching 1992
[92] 웹사이트 Official Neurocluster Brain Model site http://neuroclusterb[...] 2017-07-22
[93] 웹사이트 I-10-8. 並列処理プログラミングの基本、並列化処理 | 日本OSS推進フォーラム http://ossforum.jp/n[...]
[94] 웹사이트 The History of the Development of Parallel Computing http://ei.cs.vt.edu/[...] 2008-01-08
[95] 웹사이트 Introduction to Parallel Computing http://www.llnl.gov/[...] Lawrence Livermore National Laboratory 2007-11-09
[96] 서적 Computer Architecture: A Quantitative Approach Morgan Kaufmann 2002
[97] 서적 Digital Integrated Circuits Prentice Hall 1996
[98] 뉴스 Intel Halts Development of 2 New Microprocessors http://www.nytimes.c[...] New York Times 2004-05-08
[99] 논문 The validity of the single processor approach to achieving large-scale computing capabilities AFIPS Press 1967-04
[100] 웹사이트 Reevaluating Amdahl's Law http://www.scl.amesl[...] Communications of the ACM 1988
[101] 논문 "Program Analysis for Parallel Processing 1966-10
[102] 서적 Computer architecture and parallel processing McGraw-Hill 1984
[103] 논문 "How to Make a Multiprocessor Computer That Correctly Executes Multiprocess Programs" 1979-09
[104] 서적
[105] 서적 Parallel Computer Architecture - A Hardware/Software Approach Morgan Kaufmann Publishers 1999
[106] 문서 Culler et al, pg 15
[107] 웹사이트 The Microprocessor Ten Years From Now: What Are The Challenges, How Do We Meet Them? http://users.ece.ute[...] 2008-04-14
[108] 문서 Culler et al, pg 124
[109] 문서 Culler et al, pg 125
[110] 문서 Patterson and Hennessy, pg 713
[111] 문서 Hennessy and Patterson, pg 549
[112] 문서 Patterson and Hennessy, pg 714
[113] 웹사이트 What is clustering? http://www.webopedia[...] Webopedia computer dictionary 2007-11-07
[114] 웹사이트 Beowulf definition. http://www.pcmag.com[...] PC Magazine 2007-11-07
[115] 웹사이트 Architecture share for 06/2007 http://www.top500.or[...] TOP500 Supercomputing Sites 2007-11-14
[116] 문서 Hennessy and Patterson, pg 537
[117] 웹사이트 MPP Definition. http://www.pcmag.com[...] PC Magazine 2007-11-07
[118] 뉴스 SIGGRAPH 2005 - GPUをCPU的に活用するGPGPUの可能性 https://news.mynavi.[...] マイコミジャーナル 2008-04-05
[119] 논문 Systematic Generation of Executing Programs for Processor Elements in Parallel ASIC or FPGA-Based Systems and Their Transformation into VHDL-Descriptions of Processor Element Control Units http://www.springerl[...] 2002
[120] 논문 A parallel ASIC VLSI neurocomputer for a large number of neurons and billion connections per second speed. http://ieeexplore.ie[...] 1991-11-18
[121] 논문 A Parallel ASIC Architecture for Efficient Fractal Image Coding. http://www.ingentaco[...] 1998-07
[122] 웹사이트 Scoping the Problem of DFM in the Semiconductor Industry http://www.future-fa[...] University of California, San Diego 2004-06-21
[123] 문서 Patterson and Hennessy, pg 751
[124] 웹사이트 PGI アクセラレータにおけるマルチ GPU の使用 https://www.softek.c[...]
[125] 웹사이트 Sketch of the Analytic Engine Invented by Charles Babbage http://www.fourmilab[...] Bibliothèque Universelle de Genève 2007-11-07
[126] 문서 Patterson and Hennessy, pg 753
[127] 웹사이트 The History of the Development of Parallel Computing http://ei.cs.vt.edu/[...] 2008-01-08
[128] 웹사이트 The Power of Parallelism http://www.computerw[...] Computerworld 2008-01-08
[129] 문서 Patterson and Hennessy, pg 749
[130] 문서 Patterson and Hennessy, pgs 749–750: 「いくつかの有益な技術を生み出したが、ILLIAC IV はコンピュータとしては失敗であった。当初計画した規模の4分の1しか構築できなかったにもかかわらず、1966年に800万ドルと見積もられていた費用は1972年には3100万ドルにまで膨れ上がった。(中略)おそらく最も悪名高いスーパーコンピュータであろう。プロジェクトは1965年に開始され、実際のアプリケーションが実行可能になったのは1976年だった」
[131] 서적 Highly Parallel Computing http://portal.acm.or[...] Benjamin-Cummings publishers, Redwood City, CA 1989
[132] 웹사이트 "Parallel Computing Research at Illinois: The UPCRC Agenda" http://www.upcrc.ill[...] Parallel@Illinois, University of Illinois at Urbana-Champaign 2008-12-09
[133] 웹사이트 "The Landscape of Parallel Computing Research: A View from Berkeley" http://www.eecs.berk[...] University of California, Berkeley 2006-12-18
[134] 서적 Computer Organization and Design Morgan Kaufmann Publishers 1998
[135] 웹인용 Introduction to Parallel Computing http://www.llnl.gov/[...] Lawrence Livermore National Laboratory 2007-11-09
[136] 서적 Digital Integrated Circuits Prentice Hall 1996
[137] 뉴스 Intel Halts Development of 2 New Microprocessors http://www.nytimes.c[...] The New York Times 2008-04-22
[138] 웹인용 Cramming more components onto integrated circuits ftp://download.intel[...] Electronics Magazine 2006-11-11
[139] 간행물 "The validity of the single processor approach to achieving large-scale computing capabilities" AFIPS Press 1967-04
[140] 웹사이트 Reevaluating Amdahl's Law http://www.scl.amesl[...] Communications of the ACM 1988
[141] 논문 Program Analysis for Parallel Processing 1966-10
[142] 서적 Parallel processing and parallel algorithms: theory and computation Springer 2000
[143] 서적
[144] 서적 Parallel Computer Architecture - A Hardware/Software Approach Morgan Kaufmann Publishers 1999
[145] 서적
[146] 웹사이트 The Microprocessor Ten Years From Now: What Are The Challenges, How Do We Meet Them? http://users.ece.ute[...] 카네기 멜론 대학교 2004-04
[147] 서적
[148] 서적



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

문의하기 : help@durumis.com