Listen to this article

병렬 컴퓨팅

Parallel computing
IBM의 Blue Gene/P 대규모 병렬 슈퍼컴퓨터

병렬 컴퓨팅은 많은 계산이나 과정이 [1]동시에 수행되는 컴퓨팅의 한 종류입니다.큰 문제는 종종 작은 문제로 나눌 수 있고, 그런 다음에 동시에 해결할 수 있습니다.병렬 컴퓨팅에는 비트 레벨, 명령어 레벨, 데이터작업 병렬화와 같은 여러 가지 형태가 있습니다.병렬 방식은 오랫동안 고성능 컴퓨팅에 사용되어 왔지만 주파수 확장을 [2]방해하는 물리적 제약으로 인해 더 광범위한 관심을 얻고 있습니다.최근 몇 [3]년 동안 컴퓨터에 의한 전력 소비(및 결과적으로 발열)가 관심사가 되면서 병렬 컴퓨팅은 주로 멀티 코어 [4]프로세서의 형태로 컴퓨터 아키텍처에서 지배적인 패러다임이 되었습니다.

병렬 컴퓨팅은 동시 컴퓨팅과 밀접한 관련이 있습니다. 이들은 자주 함께 사용되며, 종종 상호 충돌되기도 하지만, 두 가지는 별개입니다. 동시성이 없는 병렬성과 병렬성이 없는 동시성(단일 코어 [5][6]CPU의 시분할에 의한 멀티태스킹 등)이 가능합니다.병렬 컴퓨팅에서 계산 작업은 일반적으로 여러 가지, 종종 매우 유사한 하위 작업으로 분류되며, 독립적으로 처리될 수 있으며 완료 시 결과가 결합됩니다.이와는 대조적으로, 동시 컴퓨팅에서는 다양한 프로세스가 관련 작업을 다루지 않는 경우가 많습니다. 분산 컴퓨팅의 일반적인 경우처럼, 개별 작업은 다양한 성격을 가질 수 있으며 실행 중에 프로세스 간 통신이 필요한 경우가 많습니다.

병렬 컴퓨터는 하드웨어가 병렬성을 지원하는 수준에 따라 대략 분류할 수 있는데, 멀티 코어 컴퓨터와 멀티 프로세서 컴퓨터는 하나의 기계 내에 여러 개의 처리 요소를 가지고 있고, 클러스터, MPP, 그리드는 여러 개의 컴퓨터를 사용하여 동일한 작업을 수행합니다.특수 병렬 컴퓨터 아키텍처는 특정 작업을 가속화하기 위해 기존 프로세서와 함께 사용되기도 합니다.

병렬은 비트 레벨 또는 명령어 레벨 병렬과 같이 프로그래머에게 투명한 경우도 있지만, 병렬 알고리즘, 특히 동시성을 사용하는 알고리즘은 순차적 [7]알고리즘보다 쓰기가 더 어렵습니다. 왜냐하면 동시성은 잠재적인 소프트웨어 버그의 몇 가지 새로운 클래스를 도입하기 때문입니다. 중에서 가장 흔한 것은 인종입니다.서로 다른 하위 작업 간의 통신 및 동기화는 일반적으로 최적의 병렬 프로그램 성능을 얻기 위한 가장 큰 장애물 중 일부입니다.

병렬화의 결과로 단일 프로그램의 속도 증가에 대한 이론적 상한은 암달의 법칙에 의해 주어지는데, 암달의 법칙은 병렬화를 사용할 수 있는 시간의 비율에 의해 제한된다는 것입니다.

배경

전통적으로 컴퓨터 소프트웨어는 직렬 계산을 위해 쓰여졌습니다.문제를 해결하기 위해 알고리즘은 일련의 명령어 스트림으로 구성되고 구현됩니다.이 명령어는 한 컴퓨터의 중앙 처리 장치에서 실행됩니다.한 번에 하나의 명령만 실행할 수 있습니다. 이 명령이 끝나면 다음 명령이 [8]실행됩니다.

반면 병렬 컴퓨팅은 문제를 해결하기 위해 여러 처리 요소를 동시에 사용합니다.이것은 문제를 독립적인 부분으로 나누어 각 처리 요소가 다른 처리 요소와 동시에 알고리즘의 자신의 부분을 실행할 수 있도록 함으로써 달성됩니다.처리 요소는 다양할 수 있으며 여러 프로세서가 있는 단일 컴퓨터, 여러 네트워크 컴퓨터, 전문 하드웨어 또는 [8]위의 모든 조합과 같은 리소스를 포함할 수 있습니다.역사적으로 병렬 컴퓨팅은 과학 컴퓨팅과 과학 문제의 시뮬레이션, 특히 기상학과 같은 자연 및 공학 분야에서 사용되었습니다.이를 통해 하드웨어와 소프트웨어의 병렬 설계와 고성능 컴퓨팅[9]가능해졌습니다.

주파수 스케일링은 1980년대 중반부터 2004년까지 컴퓨터 성능 향상의 주요 원인이었습니다.프로그램의 실행 시간은 명령의 수에 명령당 평균 시간을 곱한 것과 같습니다.다른 모든 것을 일정하게 유지하면 클럭 주파수를 늘리면 명령을 실행하는 데 걸리는 평균 시간이 줄어듭니다.따라서 빈도가 증가하면 모든 계산 바인딩 [10]프로그램의 런타임이 줄어듭니다.그러나 칩에 의한 소비 전력 P는 P = C × V × F에 의해 주어지는데, 여기서 C는 클럭 주기당 스위칭되는 커패시턴스(입력이 변화하는 트랜지스터의 수에 비례함), V전압, F는 프로세서 주파수(초당 스위칭 횟수)입니다.주파수가 증가하면 프로세서에서 사용되는 전력량이 증가합니다.프로세서 전력 소비의 증가는 결국 2004년 5월 8일 Intel의 TejasJayhawk 프로세서의 취소로 이어졌습니다. 이는 일반적으로 주파수 확장의 끝으로 컴퓨터 아키텍처 [12]패러다임의 지배적인 부분으로 언급됩니다.

주요 중앙 처리 장치(CPU 또는 프로세서) 제조업체들은 전력 소비와 과열 문제를 해결하기 위해 다수의 코어를 가진 전력 효율적인 프로세서를 생산하기 시작했습니다.코어는 프로세서의 컴퓨팅 장치이며 멀티 코어 프로세서에서는 각각의 코어가 독립적이고 동일한 메모리에 동시에 액세스할 수 있습니다.멀티 코어 프로세서는 데스크톱 컴퓨터에 병렬 컴퓨팅을 도입했습니다.따라서 직렬 프로그램의 병렬화는 주류 프로그래밍 작업이 되었습니다.2012년에 쿼드 코어 프로세서는 데스크톱 컴퓨터의 표준이 되었고 서버는 10개 이상의 코어 프로세서를 가지고 있습니다.무어의 법칙에 따르면 프로세서당 코어 수는 18-24개월마다 두 배씩 증가할 것으로 예측할 수 있습니다.이는 2020년 이후 일반적인 프로세서의 코어 수가 수십 개 또는 수백 개가 될 것이라는 것을 의미할 수 있지만, 실제로는 표준이 4~16개의 코어 영역에 있으며, 일부 설계에는 성능 및 효율성 코어가 혼재되어 있습니다(예: ARM의 빅).Little design) 열 및 설계 [13][citation needed]제약으로 인해 발생합니다.

운영 체제는 사용 가능한 코어에서 서로 다른 작업과 사용자 프로그램이 병렬로 실행되도록 보장할 수 있습니다.그러나 직렬 소프트웨어 프로그램이 멀티 코어 아키텍처를 최대한 활용하려면 프로그래머가 코드를 재구성하고 병렬화해야 합니다.응용 소프트웨어 런타임 속도의 향상은 주파수 스케일링을 통해 더 이상 달성되지 않을 것이며, 프로그래머들은 [14]멀티코어 아키텍처의 증가하는 컴퓨팅 능력을 활용하기 위해 소프트웨어 코드를 병렬화해야 할 것입니다.

암달의 법칙과 구스타프손의 법칙

암달의 법칙을 그래픽으로 표현한 것입니다.병렬화로 인한 프로그램의 속도 증가는 프로그램의 병렬화 정도에 따라 제한됩니다.예를 들어, 프로그램의 90%를 병렬화할 수 있다면, 병렬 컴퓨팅을 사용하는 이론적 최대 속도는 프로세서의 수에 상관없이 10배가 될 것입니다.
작업에 A와 B라는 두 의 독립적인 부분이 있다고 가정합니다.파트 B는 전체 계산 시간의 약 25%를 차지합니다.매우 열심히 일함으로써, 사람은 이 부분을 5배 더 빠르게 만들 수 있지만, 이것은 단지 전체 계산을 위한 시간을 조금 줄일 뿐입니다.반대로, 파트 A를 두 배로 빠르게 만들기 위해서는 더 적은 작업을 수행해야 할 수도 있습니다.이렇게 하면 파트 B의 속도가 비율별로 더 빠르더라도(5배 대 2배) 파트 B를 최적화하여 계산하는 것보다 훨씬 더 빠릅니다.

최적으로 병렬화를 통한 속도 향상은 선형적입니다. 처리 요소의 수를 두 배로 늘리면 런타임이 절반으로 줄어들고 두 번째로 두 배로 늘리면 런타임이 절반으로 줄어듭니다.그러나 최적의 속도를 달성하는 병렬 알고리즘은 거의 없습니다.대부분의 처리 요소는 적은 수의 처리 요소에 대해 거의 선형에 가까운 속도 증가를 가지며, 이 속도는 많은 수의 처리 요소에 대해 일정한 값으로 평평해집니다.

병렬 컴퓨팅 플랫폼에서 알고리즘의 잠재적인 속도 증가는 Amdahl의 법칙[15] 의해 제공됩니다.

어디에

  • Slatency 전체 작업 수행의 지연 시간에 대한 잠재적 속도 증가입니다.
  • s는 작업의 병렬화 가능한 부분의 실행 지연 시간의 속도입니다.
  • p는 병렬화 전에 작업의 병렬화 가능한 부분에 대한 전체 작업의 실행 시간의 백분율입니다.

S < 1/(1 - p)이므로latency 병렬화할 수 없는 프로그램의 작은 부분이 병렬화에서 사용 가능한 전체 속도 증가를 제한함을 보여줍니다.큰 수학적 또는 공학적 문제를 해결하는 프로그램은 일반적으로 병렬화 가능한 여러 부분과 병렬화 가능하지 않은 여러 부분으로 구성됩니다.프로그램에서 처리할 수 없는 부분이 런타임의 10%를 차지하는 경우(p = 0.9), 추가되는 프로세서 수에 관계없이 10배 이하의 속도를 낼 수 있습니다.이는 병렬 실행 단위를 더 추가하는 유용성에 상한을 둡니다."순차적인 제약 조건 때문에 작업을 분할할 수 없을 때, 더 많은 노력을 기울이는 것은 일정에 영향을 미치지 않습니다.아이의 출산은 여자를 몇 명을 [16]배정하든 9개월이 걸립니다."

구스타프슨의 법칙을 그래픽으로 표현한 것

암달의 법칙은 문제의 크기가 정해져 있는 경우에만 적용됩니다.실제로 더 많은 컴퓨팅 리소스를 사용할 수 있게 되면 더 큰 문제(대규모 데이터셋)에 사용되는 경향이 있으며, 병렬화 가능한 부분에서 사용되는 시간은 본질적으로 직렬 [17]작업보다 훨씬 더 빠르게 증가하는 경우가 많습니다.이 경우 구스타프슨의 법칙은 병렬 [18]성능에 대해 덜 비관적이고 더 현실적인 평가를 제공합니다.

Amdahl의 법칙과 Gustafson의 법칙 모두 프로그램의 직렬 부분의 실행 시간은 프로세서의 수와 무관하다고 가정합니다.암달의 법칙은 병렬로 수행해야 할 총 작업량이 프로세서의 수와 독립적이 되도록 전체 문제의 크기가 고정되어 있다고 가정하는 반면, 구스타프슨의 법칙은 병렬로 수행해야 할 총 작업량이 프로세서의 수와 선형적으로 달라진다고 가정합니다.

종속성

데이터 의존성을 이해하는 것은 병렬 알고리즘을 구현하는 데 있어 기본입니다.체인의 사전 계산에 의존하는 계산을 순서대로 실행해야 하므로 종속 계산의 가장 긴 체인(임계 경로라고 함)보다 더 빨리 실행되는 프로그램은 없습니다.그러나 대부분의 알고리즘은 종속적인 계산의 긴 체인으로만 구성되지 않으며, 대개 독립적인 계산을 병렬적으로 실행할 수 있는 기회가 있습니다.

Pj P를 두 개의 프로그램 세그먼트라고 합니다i.번스타인의 조건은[19] 둘이 독립적이고 병렬적으로 실행될 수 있는 경우를 설명합니다.P의 경우i I를 모든 입력 변수로 하고i O를 출력 변수로 하고i, Pj 경우도 마찬가지로 다음ij 만족하면 P와 P는 독립적입니다.

첫 번째 조건을 위반하면 두 번째 세그먼트에서 사용된 결과를 생성하는 첫 번째 세그먼트에 해당하는 흐름 종속성이 발생합니다.두 번째 조건은 두 번째 세그먼트가 첫 번째 세그먼트에 필요한 변수를 생성할 때 반의존성을 나타냅니다.세 번째이자 마지막 조건은 출력 종속성을 나타냅니다. 두 세그먼트가 동일한 위치에 쓸 때 결과는 논리적으로 마지막으로 실행된 [20]세그먼트에서 나옵니다.

여러 종류의 종속성을 보여주는 다음 기능을 생각해 보십시오.

1 : 함수 Dep(a, b) 2 : c : = a * b 3 : d : = 3 * c 4 : 함수 종료

이 예에서 명령 3은 명령 2의 결과를 사용하므로 명령 2 이전에(또는 명령 2와 병렬로) 실행할 수 없습니다.조건 1을 위반하므로 흐름 의존성이 발생합니다.

1: 함수 NoDep(a, b) 2: c : = a * b 3: d : = 3 * b 4: e : = a + b 5: end function

이 예제에서는 명령 간에 종속성이 없으므로 명령을 모두 병렬로 실행할 수 있습니다.

번스타인의 조건은 다른 프로세스 간에 메모리를 공유하는 것을 허용하지 않습니다.이를 위해서는 세마포어, 장벽 또는 기타 동기화 방법과 같은 액세스 간 순서 지정을 강제하는 방법이 필요합니다.

경기상황, 상호배제, 동기화, 병행둔화

병렬 프로그램의 하위 작업을 종종 스레드라고 합니다.일부 병렬 컴퓨터 아키텍처는 파이버로 알려진 더 작고 가벼운 버전의 스레드를 사용하는 반면 프로세스로 알려진 더 큰 버전을 사용합니다.그러나 "스레드"는 일반적으로 하위 [21]작업의 총칭으로 사용됩니다.스레드 간에 공유되는 변수를 업데이트해야 하는 경우와 같이 스레드는 개체 또는 다른 리소스에 대한 동기화된 액세스를 필요로 하는 경우가 많습니다.동기화하지 않으면 두 스레드 사이의 명령이 순서에 상관없이 인터리빙될 수 있습니다.예를 들어 다음과 같은 프로그램을 생각해 보겠습니다.

실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를 성공적으로 잠그고 다른 스레드는 잠금 상태가 됩니다. V가 다시 잠금 해제될 때까지 계속할 수 없습니다.이렇게 하면 프로그램이 올바르게 실행됩니다.스레드가 리소스에 대한 액세스를 직렬화해야 할 때 올바른 프로그램 실행을 보장하기 위해 잠금이 필요할 수 있지만, 잠금을 사용하면 프로그램 속도가 크게 느려지고 [22]신뢰성에 영향을 미칠 수 있습니다.

원자가 아닌 잠금 장치를 사용하여 여러 변수를 잠그면 프로그램 교착 상태가 발생할 수 있습니다.원자 잠금은 여러 변수를 한 번에 잠급니다.모두 잠글 수 없는 경우 어느 것도 잠글 수 없습니다.두 개의 스레드가 각각 원자가 아닌 잠금을 사용하여 동일한 두 변수를 잠글 필요가 있는 경우, 한 개의 스레드가 그 중 하나를 잠그고 두 번째 스레드가 두 번째 변수를 잠글 가능성이 있습니다.이 경우 두 스레드 모두 완료할 수 없으며 교착 상태가 [23]발생합니다.

많은 병렬 프로그램은 하위 작업이 동기화되어 작동해야 합니다.이를 위해서는 장벽을 사용해야 합니다.장벽은 일반적으로 자물쇠나 [24]세마포를 사용하여 구현됩니다.잠금 대기 없는 알고리즘으로 알려진 한 종류의 알고리즘은 잠금 및 장벽의 사용을 모두 피합니다.그러나 이 접근 방식은 일반적으로 구현하기가 어려우며 올바르게 설계된 데이터 [25]구조가 필요합니다.

모든 병렬화가 속도를 높이는 것은 아닙니다.일반적으로 작업이 점점 더 많은 스레드로 분할됨에 따라 이러한 스레드는 점점 더 많은 시간을 서로 통신하거나 [26][27]리소스 액세스를 위해 서로 대기하는 데 사용합니다.리소스 경합 또는 통신으로 인한 오버헤드가 다른 계산에 소요되는 시간을 지배하게 되면, 작업을 완료하는 데 필요한 시간이 줄어들기보다는 더 많은 병렬화(즉, 작업량을 훨씬 더 많은 스레드로 나누는 것)가 증가합니다.병렬 [28]속도 저하라고 알려진 이 문제는 경우에 따라 소프트웨어 분석 및 [29]재설계를 통해 개선될 수 있습니다.

치밀하고 거칠며 민망한 평행선

응용프로그램은 하위 작업이 서로 동기화되거나 통신해야 하는 빈도에 따라 분류되는 경우가 많습니다.응용 프로그램은 하위 작업이 초당 여러 번 통신해야 하는 경우 세밀한 병렬성을 나타내며, 초당 여러 번 통신하지 않으면 거친 병렬성을 나타내며, 거의 또는 전혀 통신할 필요가 없는 경우에는 당혹스러운 병렬성을 나타냅니다.당황스러울 정도로 병렬화된 응용 프로그램은 병렬화하기 가장 쉬운 것으로 여겨집니다.

플린의 분류학

마이클 제이 플린은 현재 플린의 분류 체계로 알려진 병렬 컴퓨터와 프로그램을 위한 초기 분류 체계 중 하나를 만들었습니다.Flyn은 프로그램과 컴퓨터를 단일 집합 또는 여러 집합의 명령어를 사용하여 작동하는지 여부와 해당 명령어가 단일 집합 또는 여러 집합의 데이터를 사용하는지 여부로 분류했습니다.

단일 명령-단일 데이터(SISD) 분류는 완전히 순차적인 프로그램과 같습니다.SIMD(single-instruction-multiple-data) 분류는 대규모 데이터 집합에서 동일한 작업을 반복적으로 수행하는 것과 유사합니다.이는 일반적으로 신호 처리 응용 프로그램에서 수행됩니다.다중 명령-단일 데이터(MISD)는 거의 사용되지 않는 분류입니다.이를 처리하기 위한 컴퓨터 아키텍처가 고안되었지만(수축기 어레이와 같은), 이 클래스에 맞는 애플리케이션은 거의 구현되지 않았습니다.다중 명령-다중 데이터(MIMD) 프로그램은 단연코 가장 일반적인 병렬 프로그램 유형입니다.

데이비드 A에 의하면. 패터슨과 존 L. 헤네시(Hennessy), "몇몇 기계들은 물론 이 범주의 혼합물이지만, 이 고전적인 모델은 단순하고 이해하기 쉬우며 첫 번째 근사치를 제공하기 때문에 살아남았습니다.그것은 아마도 이해할 수 있기 때문에 가장 널리 [31]사용되는 계획이기도 합니다."

평행선의 종류

비트 레벨 병렬도

코로나19 연구에 합류한 병렬형 슈퍼컴퓨팅 기기 대만의 Taiwania 3.

1970년대 VLSI(Very Large Scale Integration) 컴퓨터 칩 제조 기술의 등장 이후 1986년까지 컴퓨터 아키텍처의 속도 향상은 프로세서가 주기당 [32]조작할 수 있는 정보의 양인 컴퓨터 워드 크기를 두 로 늘림으로써 주도되었습니다.워드 크기를 늘리면 워드 길이보다 큰 변수에 대한 연산을 수행하기 위해 프로세서가 실행해야 하는 명령 수가 줄어듭니다.예를 들어, 8비트 프로세서가 두 개의 16비트 정수를 추가해야 하는 경우, 프로세서는 먼저 표준 추가 명령을 사용하여 각 정수에서 8개의 하위 비트를 추가한 다음, 8개의 상위 비트를 하위 추가 명령을 사용하여 추가해야 합니다. 따라서 8비트 프로세서는 두 개의 명령을 필요로 합니다.16비트 프로세서가 하나의 명령으로 작업을 완료할 수 있는 단일 작업을 완료합니다.

역사적으로 4비트 마이크로프로세서는 8비트, 16비트, 32비트 마이크로프로세서로 대체되었습니다.이러한 추세는 일반적으로 20년 동안 범용 컴퓨팅의 표준이었던 32비트 프로세서의 도입으로 끝이 났습니다.x86-64 아키텍처가 등장한 2000년대 초까지만 해도 64비트 프로세서는 보편화되었습니다.

명령어 수준 병렬화

파이프라인이 없는 표준 프로세서.하나의 명령을 완료하는 데 5개의 클럭 사이클이 필요하므로 프로세서는 서브스케일러 성능(IPC = 0.2 < 1)을 발행할 수 있습니다.

컴퓨터 프로그램은 본질적으로 프로세서에 의해 실행되는 명령의 흐름입니다.명령어 수준 병렬화가 없으면 프로세서는 클럭 주기당 하나 미만의 명령어만 발행할 수 있습니다(IPC < 1).이러한 프로세서를 서브스칼라 프로세서라고 합니다.이러한 지침은 순서를 바꾸어서 그룹으로 결합할 수 있으며 프로그램의 결과를 변경하지 않고 병렬로 실행됩니다.이를 명령어 수준 병렬화라고 합니다.1980년대 중반부터 1990년대 [33]중반까지 명령어 수준 병렬화의 발전이 컴퓨터 아키텍처를 지배했습니다.

표준 5단계 파이프라인 처리기.최상의 경우, 하나의 명령을 완료하는 데 한 클럭 사이클이 소요되고 따라서 프로세서는 스칼라 성능(IPC = 1)을 발행할 수 있습니다.

모든 최신 프로세서는 다단계 명령 파이프라인을 가지고 있습니다.파이프라인의 각 단계는 해당 단계의 명령에 대해 프로세서가 수행하는 다른 동작에 해당합니다. N 단계 파이프라인을 가진 프로세서는 다른 완료 단계에서 최대 N개의 다른 명령을 가질 수 있으므로 클럭 주기 당 하나의 명령을 발행할 수 있습니다(IPC = 1).이러한 프로세서를 스칼라 프로세서라고 합니다.파이프라인 프로세서의 표준적인 예는 명령어 페치(IF), 명령어 디코드(ID), 실행(EX), 메모리 액세스(MEM), 레지스터 라이트 백(WB)의 다섯 단계로 구성된 RISC 프로세서입니다.펜티엄 4 프로세서는 35단계 [34]파이프라인을 가지고 있었습니다.

2개의 실행 유닛을 갖는 표준 5단계 파이프라인 처리기.최상의 경우, 두 개의 명령을 완료하는 데 한 클럭 사이클이 소요되므로 프로세서는 슈퍼스칼라 성능(IPC = 2 > 1)을 발행할 수 있습니다.

대부분의 최신 프로세서에는 여러 개의 실행 장치도 있습니다.이 기능을 파이프라인과 결합하여 클럭 주기당 하나 이상의 명령을 발행할 수 있습니다(IPC > 1).이러한 프로세서를 슈퍼스칼라 프로세서라고 합니다.슈퍼스칼라 프로세서는 여러 실행 장치가 전체 프로세서(즉, 처리 장치)가 아니라는 점에서 멀티 코어 프로세서와 다릅니다.명령어 간에 데이터 종속성이 없는 경우에만 명령어를 그룹화할 수 있습니다.스코어보드Tomasulo 알고리즘(스코어보드와 유사하지만 레지스터 이름 변경을 사용하는)은 순서를 벗어난 실행 및 명령어 수준 병렬을 구현하는 가장 일반적인 기법입니다.

태스크 병렬화

작업 병렬은 "같은 데이터 [35]집합 또는 다른 데이터 집합에 대해 완전히 다른 계산을 수행할 수 있다"는 병렬 프로그램의 특징입니다.이는 동일한 또는 다른 데이터 집합에 대해 동일한 계산을 수행하는 데이터 병렬화와는 대조됩니다.태스크 병렬화는 태스크를 하위 태스크로 분해한 다음 각 하위 태스크를 실행을 위해 프로세서에 할당하는 것을 포함합니다.그런 다음 프로세서는 이러한 하위 작업을 동시에 종종 협력적으로 실행합니다.작업 병렬화는 일반적으로 [36]문제의 크기에 따라 확장되지 않습니다.

상위 단어 수준 병렬화

슈퍼워드 레벨 병렬화는 루프 언롤링 및 기본 블록 벡터화를 기반으로 하는 벡터화 기법입니다.그것은 좌표, 컬러 채널 또는 [37]손으로 말리지 않은 루프에서 조작하는 것과 같은 인라인 코드병렬성을 이용할 수 있다는 점에서 루프 벡터화 알고리즘과 구별됩니다.

철물

기억과 통신

병렬 컴퓨터의 주 메모리는 공유 메모리(단일 주소 공간에 있는 모든 처리 요소 간에 공유됨) 또는 분산 메모리(각 처리 요소에 고유한 로컬 [38]주소 공간이 있음)입니다.분산 메모리는 메모리가 논리적으로 분산되어 있다는 사실을 의미하지만 물리적으로도 분산되어 있다는 것을 의미하는 경우가 많습니다.분산 공유 메모리와 메모리 가상화는 두 가지 접근 방식을 결합합니다. 여기서 프로세싱 요소는 고유의 로컬 메모리와 비로컬 프로세서의 메모리에 대한 액세스를 갖습니다.로컬 메모리에 대한 액세스는 일반적으로 로컬이 아닌 메모리에 대한 액세스보다 빠릅니다.슈퍼컴퓨터에서는 PGAS와 같은 프로그래밍 모델을 이용하여 분산 공유 메모리 공간을 구현할 수 있습니다.이 모델을 사용하면 한 컴퓨팅 노드의 프로세스가 다른 컴퓨팅 노드의 원격 메모리에 투명하게 액세스할 수 있습니다.또한 모든 컴퓨팅 노드는 Infiniband와 같은 고속 인터커넥트를 통해 외부 공유 메모리 시스템에 연결되며, 이 외부 공유 메모리 시스템은 버스트 버퍼(burst buffer)라고 하며, 일반적으로 여러 I/O 노드에 물리적으로 분산된 비휘발성 메모리의 어레이로 구성됩니다.

NUMA(Uniform Memory Access) 아키텍처의 논리적 보기한 디렉토리의 프로세서는 다른 디렉토리의 메모리에 액세스하는 것보다 더 적은 대기 시간으로 해당 디렉토리의 메모리에 액세스할 수 있습니다.

메인 메모리의 각 요소가 동일한 레이턴시 및 대역폭으로 액세스될 수 있는 컴퓨터 아키텍처는 균일 메모리 액세스(uniform memory access, UMA) 시스템으로 알려져 있습니다.일반적으로, 이는 메모리가 물리적으로 분산되지 않는 공유 메모리 시스템에 의해서만 달성될 수 있습니다.이 속성이 없는 시스템을 NUMA(Uniform Memory Access) 아키텍처라고 합니다.분산 메모리 시스템은 비균일한 메모리 액세스를 가집니다.

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

프로세서-프로세서 및 프로세서-메모리 통신은 공유(다중화 또는 다중화) 메모리, 크로스바 스위치, 공유 버스 또는 스타, 링, 트리, 하이퍼큐브, 지방 하이퍼큐브(에 둘 이상의 프로세서가 있는 하이퍼큐브)를 포함한 수많은 토폴로지의 인터커넥트 네트워크를 통해 여러 가지 방식으로 하드웨어에서 구현할 수 있습니다.노드), 또는 n차원 메쉬.

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

병렬 컴퓨터 클래스

병렬 컴퓨터는 하드웨어가 병렬성을 지원하는 수준에 따라 대략 분류될 수 있습니다.이 분류는 기본 컴퓨팅 노드 사이의 거리와 대체로 유사합니다.이들은 상호 배타적이지 않습니다. 예를 들어 대칭 멀티프로세서의 클러스터가 상대적으로 일반적입니다.

멀티코어 컴퓨팅

멀티 코어 프로세서는 동일한 칩에 여러 개의 처리 장치("코어"라고 함)를 포함하는 프로세서입니다.이 프로세서는 여러 실행 유닛을 포함하고 하나의 명령어 스트림(스레드)에서 클럭 주기당 여러 명령어를 발행할 수 있는 수퍼스칼라 프로세서와는 다릅니다. 반면에 멀티 코어 프로세서는 여러 명령어 스트림에서 클럭 주기당 여러 명령어를 발행할 수 있습니다.Sony PlayStation 3에서 사용할 수 있도록 설계된 IBM의 Cell 마이크로프로세서는 유명한 멀티코어 프로세서입니다.멀티 코어 프로세서의 각 코어는 잠재적으로 슈퍼스칼라(superscalar)일 수도 있습니다. 즉, 매 클럭 주기마다 각 코어가 하나의 스레드에서 여러 개의 명령어를 발행할 수 있습니다.

동시 멀티스레딩(Intel의 하이퍼스레딩이 가장 잘 알려진)은 의사 멀티코어주의의 초기 형태였습니다.동시 멀티스레딩이 가능한 프로세서는 동일한 처리 장치(슈퍼스칼라 아키텍처) 내의 여러 실행 장치를 포함하며, 여러 스레드에서 클럭 사이클당 여러 명령어를 발행할 수 있습니다.한편, 시간적 멀티스레딩은 동일한 프로세싱 유닛에 하나의 실행 유닛을 포함하고, 다수의 스레드로부터 하나의 명령어를 한 번에 발행할 수 있습니다.

대칭다중처리

SMP(Symmetric Multiprocessor)는 메모리를 공유하고 [39]버스를 통해 연결되는 동일한 프로세서를 여러 개 가진 컴퓨터 시스템입니다.버스 경합으로 인해 버스 아키텍처가 확장되지 않습니다.따라서 SMP는 일반적으로 32개 [40]이상의 프로세서를 포함하지 않습니다.프로세서의 크기가 작고 대용량 캐시에 의해 달성되는 버스 대역폭에 대한 요구 사항이 크게 줄어들기 때문에, 이러한 대칭형 멀티프로세서는 충분한 메모리 대역폭이 [39]존재한다면 매우 비용 효율적입니다.

분산 컴퓨팅

분산 컴퓨터(distributed computer, 분산 메모리 멀티프로세서)는 처리 요소가 네트워크에 의해 연결되는 분산 메모리 컴퓨터 시스템입니다.분산형 컴퓨터는 확장성이 뛰어납니다."동시 컴퓨팅", "병렬 컴퓨팅", 그리고 "분산 컴퓨팅"이라는 용어는 많은 중복이 있고,[41] 그들 사이에 명확한 구분이 존재하지 않습니다.동일한 시스템은 "병렬"과 "분산"으로 모두 특징지어질 수 있습니다. 일반적인 분산 시스템의 프로세서는 [42]병렬로 동시에 실행됩니다.

클러스터 컴퓨팅
베어울프 성단

클러스터는 느슨하게 연결된 컴퓨터의 그룹으로, 어떤 면에서는 단일 [43]컴퓨터로 간주될 수 있습니다.클러스터는 네트워크로 연결된 여러 독립 실행형 시스템으로 구성됩니다.클러스터의 시스템이 대칭일 필요는 없지만, 그렇지 않은 경우에는 로드 밸런싱이 더욱 어렵습니다.가장 일반적인 유형의 클러스터는 Beowulf 클러스터로 TCP/IP 이더넷 로컬 영역 [44]네트워크에 연결된 동일한 상용 기성 컴퓨터에 구현된 클러스터입니다.베어울프 기술은 원래 토마스 스털링과 도널드 베커에 의해 개발되었습니다.상위 500대 슈퍼컴퓨터의 87%가 [45]클러스터입니다.나머지는 아래에서 설명하는 대규모 병렬 프로세서입니다.

그리드 컴퓨팅 시스템(아래 설명)은 당황스러울 정도로 병렬적인 문제를 쉽게 처리할 수 있기 때문에, 현대의 클러스터는 일반적으로 노드가 서로 중간 결과를 더 자주 공유해야 하는 더 어려운 문제를 처리하도록 설계됩니다.이를 위해서는 높은 대역폭과 더 중요하게는 낮은 지연 시간의 상호 연결 네트워크가 필요합니다.많은 역사적이고 현재의 슈퍼컴퓨터는 Cray Gemini [46]네트워크와 같이 클러스터 컴퓨팅을 위해 특별히 설계된 맞춤형 고성능 네트워크 하드웨어를 사용합니다.2014년 현재 대부분의 슈퍼컴퓨터는 Myrinet, InfiniBand 또는 Gigabit Ethernet과 같은 일부 기성 표준 네트워크 하드웨어를 사용합니다.

대규모 병렬 컴퓨팅
IBM Blue Gene/L 대규모 병렬 슈퍼컴퓨터캐비닛

MPP(Massive Parallel Processor)는 네트워크로 연결된 프로세서가 많은 단일 컴퓨터입니다.MPP는 클러스터와 동일한 특성을 가지지만, MPP는 특화된 상호 연결 네트워크를 가지고 있습니다(클러스터는 네트워킹을 위해 상용 하드웨어를 사용함).또한 MPP는 클러스터보다 큰 경향이 있으며, 일반적으로 100개 이상의 [47]프로세서를 가지고 있습니다.MPP에서 "각 CPU에는 운영 체제와 애플리케이션의 고유 메모리와 복사본이 들어 있습니다.각 서브시스템은 고속 인터커넥트를 [48]통해 다른 서브시스템과 통신합니다."

2009년 6월 TOP500 순위에서 세계에서 다섯 번째로 빠른 슈퍼컴퓨터인 IBM의 Blue Gene/L은 MPP입니다.

그리드 컴퓨팅

그리드 컴퓨팅은 가장 많이 분산된 병렬 컴퓨팅 형태입니다.그것은 주어진 문제를 해결하기 위해 인터넷을 통해 통신하는 컴퓨터를 이용합니다.인터넷에서 사용할 수 있는 낮은 대역폭과 극도로 높은 지연 시간 때문에 분산 컴퓨팅은 일반적으로 당황스러울 정도로 병렬적인 문제만을 처리합니다.

대부분의 그리드 컴퓨팅 애플리케이션은 미들웨어(네트워크 리소스를 관리하고 소프트웨어 인터페이스를 표준화하기 위해 운영 체제와 애플리케이션 사이에 있는 소프트웨어)를 사용합니다.가장 일반적인 그리드 컴퓨팅 미들웨어는 BOINC(Berkeley Open Infrastructure for Network Computing)입니다.종종 자원봉사 컴퓨팅 소프트웨어는 컴퓨터가 [49]유휴 상태일 때 계산을 수행하는 "스페어 사이클"을 사용합니다.

전문 병렬 컴퓨터

병렬 컴퓨팅 내에는 틈새 관심 영역으로 남아 있는 전문화된 병렬 장치가 있습니다.도메인에 특정되지는 않지만, 몇 가지 클래스의 병렬 문제에만 적용되는 경향이 있습니다.

필드 프로그래밍이 가능한 게이트 어레이로 재구성 가능한 컴퓨팅

재구성 가능 컴퓨팅은 FPGA(Field-Programmable Gate Array)를 범용 컴퓨터의 공동 프로세서로 사용하는 것입니다.FPGA는 본질적으로 주어진 작업을 위해 스스로를 재배선할 수 있는 컴퓨터 칩입니다.

FPGA는 VHDL[50] 또는 [51]Verilog와 같은 하드웨어 설명 언어로 프로그래밍할 수 있습니다.몇몇 공급업체들은 대부분의 프로그래머들이 익숙한 C 프로그래밍 언어의 구문과 의미론을 에뮬레이션하려고 시도하는 C to HDL 언어를 만들었습니다.가장 잘 알려진 C-HDL 언어는 Mitrion-C, Impulse C, Handel-C입니다.C++에 기반한 시스템 C의 특정 부분집합들도 이 목적을 위해 사용될 수 있습니다.

자사의 HyperTransport 기술을 타사 공급업체에 개방하기로 한 AMD의 결정은 고성능 재구성 가능 [52]컴퓨팅을 가능하게 하는 기술이 되었습니다.마이클 R에 의하면.DRC Computer Corporation의 최고 운영 책임자인 D'Amour는 "우리가 처음 AMD에 들어갔을 때, 그들은 우리를 '소켓 스틸러'라고 불렀습니다.이제 그들은 우리를 [52]파트너라고 부릅니다."

GPGPU(General-purpose computing on graphics processing unit)
엔비디아의 테슬라 GPGPU 카드

GPGPU(General-purpose computing on graphics processing unit)는 컴퓨터 공학 연구에서 상당히 최근의 추세입니다.GPU는 컴퓨터 그래픽 [53]처리에 매우 최적화된 공동 프로세서입니다.컴퓨터 그래픽 처리는 데이터 병렬 연산, 특히 선형 대수 행렬 연산이 지배적인 분야입니다.

초기의 GPGPU 프로그램은 프로그램을 실행하기 위해 일반 그래픽 API를 사용했습니다.그러나 Nvidia와 AMD가 각각 CUDA와 Stream SDK로 프로그래밍 환경을 출시하면서 GPU에 대한 범용 연산을 수행하기 위해 여러 새로운 프로그래밍 언어와 플랫폼이 개발되었습니다.다른 GPU 프로그래밍 언어로는 BrookGPU, PeakStream, RapidMind 등이 있습니다.엔비디아는 테슬라 시리즈의 연산을 위한 특정 제품도 출시했습니다.기술 컨소시엄 크로노스 그룹은 CPU와 GPU로 구성된 플랫폼 간에 실행되는 프로그램을 작성하기 위한 프레임워크인 OpenCL 사양을 공개했습니다.AMD, 애플, 인텔, 엔비디아 등이 OpenCL을 지원하고 있습니다.

응용프로그램별 집적회로

병렬 [54][55][56]응용들을 처리하기 위한 몇몇 응용-특정 집적 회로(ASIC) 접근법들이 고안되었습니다.

ASIC는 (정의상) 특정 애플리케이션에 특정되므로 해당 애플리케이션에 완전히 최적화될 수 있습니다.그 결과, 특정 애플리케이션에 대해 ASIC는 범용 컴퓨터보다 성능이 뛰어난 경향이 있습니다.그러나, ASIC는 UV 포토리소그래피에 의해 생성됩니다.이 과정에는 마스크 세트가 필요하므로 비용이 많이 들 수 있습니다.마스크 세트는 백만 달러 [57]이상의 비용이 들 수 있습니다. (칩에 필요한 트랜지스터가 작을수록, 마스크는 더 비쌀 것입니다.)한편, 시간이 지남에 따라 범용 컴퓨팅에서 성능이 증가하는 경우(무어의 법칙에 따라 설명됨), 칩 세대 [52]수는 1~2개에 불과합니다.높은 초기 비용과 무어의 법칙에 따른 범용 컴퓨팅에 추월당하는 경향은 대부분의 병렬 컴퓨팅 애플리케이션에서 ASIC를 실현할 수 없게 만들었습니다.그러나 몇몇은 지어졌습니다.분자동역학 시뮬레이션을 위해 맞춤형 ASIC을 사용하는 PFLOPS RIKEN MDGRAPE-3 기계가 한 예입니다.

벡터 프로세서
Cray-1은 벡터 프로세서입니다.

벡터 프로세서는 많은 데이터 집합에 대해 동일한 명령을 실행할 수 있는 CPU 또는 컴퓨터 시스템입니다.벡터 프로세서는 숫자나 벡터의 선형 배열에서 작동하는 높은 수준의 연산을 가지고 있습니다.벡터 연산의 예로는 A = B × C있으며, 여기서 A, BC는 각각 64비트 부동 소수점 숫자의 64비트 벡터입니다.이들은 플린의 [58]SIMD 분류와 밀접한 관련이 있습니다.

크레용 컴퓨터는 1970년대와 1980년대에 벡터를 처리하는 컴퓨터로 유명해졌습니다.그러나 CPU와 전체 컴퓨터 시스템 모두에서 벡터 프로세서는 일반적으로 사라졌습니다.최신 프로세서 명령어 세트에는 프리스케일 반도체의 AltiVec Intel의 Streaming SIMD Extensions(SSE)와 같은 일부 벡터 처리 명령어가 포함되어 있습니다.

소프트웨어

병렬 프로그래밍 언어

병렬 컴퓨터를 프로그래밍하기 위해 동시 프로그래밍 언어, 라이브러리, API병렬 프로그래밍 모델(예: 알고리즘 스켈레톤)이 생성되었습니다.이는 일반적으로 기본 메모리 아키텍처(공유 메모리, 분산 메모리 또는 공유 분산 메모리)에 대한 가정에 따라 클래스로 나뉠 수 있습니다.공유 메모리 프로그래밍 언어는 공유 메모리 변수를 조작하여 의사소통합니다.분산 메모리는 메시지 전달을 사용합니다.POSIX Threads와 OpenMP는 가장 널리 사용되는 공유 메모리 API이며 MPI(Message Passing Interface)는 가장 널리 사용되는 메시지 전달 시스템 [59]API입니다.병렬 프로그램을 프로그래밍할 때 사용되는 하나의 개념은 미래 개념입니다. 즉, 프로그램의 한 부분이 미래 시간에 필요한 자료를 프로그램의 다른 부분에 전달할 것을 약속하는 것입니다.

병렬 프로그래밍을 표준화하기 위한 노력으로는 하이브리드 멀티코어 병렬 프로그래밍을 위한 OpenHMP라는 개방형 표준이 있습니다.디 오픈HMPP 지시 기반 프로그래밍 모델은 하드웨어 가속기의 계산을 효율적으로 오프로드하고 원격 프로시저 호출을 사용하여 하드웨어 메모리로 데이터 이동을 최적화하는 구문을 제공합니다.

소비자 GPU의 증가는 그래픽 API(컴퓨팅 쉐이더라 함), 전용 API(OpenCL 등) 또는 기타 언어 확장에서 컴퓨팅 커널을 지원하게 되었습니다.

자동병렬화

컴파일러에 의한 순차 프로그램의 자동 병렬화는 병렬 컴퓨팅의 "성배"이며, 특히 앞서 언급한 프로세서 주파수의 한계를 가지고 있습니다.컴파일러 연구자들의 수십 년간의 연구에도 불구하고, 자동 병렬화는 제한적인 [60]성공만을 거두었습니다.

주류 병렬 프로그래밍 언어는 명시적으로 병렬화되거나 프로그래머가 컴파일러에게 병렬화에 대한 지시를 제공하는 부분적으로 암묵적으로 유지됩니다.몇 가지 완전한 암시적 병렬 프로그래밍 언어가 존재합니다.SISAL, Parallel Haskell, Sequence L, 시스템 C(FPGA용), Mitrion-C, VHDLVerilog.

응용프로그램 체크포인트

컴퓨터 시스템의 복잡성이 증가함에 따라 고장 사이의 평균 시간은 대개 줄어듭니다.응용 프로그램 체크포인팅은 컴퓨터 시스템이 응용 프로그램의 "스냅샷"(코어 덤프와 같은 모든 현재 리소스 할당 및 변수 상태의 기록)을 취하는 기법입니다. 이 정보는 컴퓨터가 장애를 일으킬 경우 프로그램을 복원하는 데 사용될 수 있습니다.응용 프로그램 체크포인트는 프로그램이 처음이 아닌 마지막 체크포인트에서만 다시 시작해야 하는 것을 의미합니다.체크포인트는 다양한 상황에서 이점을 제공하지만 특히 고성능 [61]컴퓨팅에 사용되는 프로세서 수가 많은 병렬 시스템에서 유용합니다.

알고리즘 방법

병렬 컴퓨터가 점점 더 커지고 빨라지면서, 우리는 지금까지 실행하는 데 너무 오랜 시간이 걸렸던 문제들을 해결할 수 있게 되었습니다.생물정보학(단백질 접기 및 서열 분석용)과 경제학(수학 금융용)만큼 다양한 분야에서 병렬 컴퓨팅의 이점을 활용했습니다.병렬 컴퓨팅 응용 프로그램의 일반적인 문제 유형은 다음과 같습니다.[62]

내결함성

병렬 컴퓨팅은 특히 동일한 작업을 병렬로 수행하는 잠금 단계 시스템을 통해 내결함성 컴퓨터 시스템의 설계에도 적용될 수 있습니다.이를 통해 한 구성 요소에 장애가 발생할 경우 이중화가 가능하며, 결과가 다를 경우 자동으로 오류를 감지하고 오류를 수정할 수 있습니다.이러한 방법을 사용하여 일시적 [64]오류로 인해 발생하는 단일 이벤트 문제를 방지할 수 있습니다.임베디드 또는 전문화된 시스템에서는 추가적인 조치가 필요할 수 있지만, 이 방법은 상용 기성 시스템에서 n-모듈러 이중화를 달성하기 위한 비용 효율적인 접근 방식을 제공할 수 있습니다.

역사

일리악 4세, "슈퍼컴퓨터 [65]중 가장 악명 높다"

진정한 (MIMD) 평행성의 기원은 루이지 페데리코 메나브레아와 찰스 [66][67][68]배비지발명의 분석 엔진 스케치거슬러 올라갑니다.

1957년 Compagnie des Machines Bull은 병렬 처리를 위해 특별히 설계된 최초의 컴퓨터 아키텍처인 Gamma [69]60을 발표했습니다.포크-조인 모델과 "프로그램 분배기"를 사용하여 중앙 [70][71]메모리에 연결된 독립적인 처리 장치로 데이터를 전송하고 수집했습니다.

1958년 4월, Stanley Gill(Ferranti)은 병렬 프로그래밍과 분기 및 [72]대기의 필요성에 대해 논의했습니다.또한 1958년 IBM 연구원 John Cocke와 Daniel Slotnick은 수치 계산에서 병렬성을 사용하는 것에 대해 [73]처음으로 논의했습니다.Burroughs Corporation은 1962년에 D825를 선보였는데, D825는 크로스바 [74]스위치를 통해 최대 16개의 메모리 모듈에 액세스할 수 있는 4프로세서 컴퓨터였습니다.1967년, Amdahl과 Slotnick은 미국 정보 처리 협회 [73]회의에서 병렬 처리의 가능성에 대한 토론을 발표했습니다.평행성으로 인한 속도 증가의 한계를 정의하기 위해 암달의 법칙이 만들어진 것은 이 토론 중이었습니다.

1969년 허니웰최초의 멀틱스 시스템을 선보였는데, 이 시스템은 최대 8개의 프로세서를 [73]병렬로 구동할 수 있는 대칭형 멀티프로세서 시스템입니다.1970년대 카네기 멜론 대학의 멀티프로세서 프로젝트인 C.mmp는 몇 개 이상의 프로세서를 가진 최초의 멀티프로세서 중 하나였습니다.스누핑 캐시가 있는 최초의 버스 연결 멀티프로세서는 1984년 [67]Synapse N+1이었습니다.

SIMD 병렬 컴퓨터는 1970년대로 거슬러 올라갈 수 있습니다.초기 SIMD 컴퓨터 뒤에 있는 동기는 프로세서의 제어 유닛의 게이트 지연을 여러 [75]명령어에 걸쳐 상각하는 것이었습니다.1964년, 슬롯닉은 로렌스 리버모어 국립 [73]연구소를 위해 대규모 병렬 컴퓨터를 만들 것을 제안했습니다.그의 디자인은 미국 공군에 의해 자금을 지원받았는데, 이는 SIMD 병렬 컴퓨팅의 최초의 노력인 ILIAC IV.[73]설계의 핵심은 256개의 프로세서를 가진 상당히 높은 병렬성이었습니다. 이를 통해 기계는 나중에 벡터 프로세싱이라고 알려진 대규모 데이터셋에서 작업할 수 있었습니다.그러나 ILIAC IV는 프로젝트가 완성된 것의 4분의 1밖에 되지 않았기 때문에 "슈퍼컴퓨터 중 가장 악명 높은 것"이라고 불렸습니다. 그러나 프로젝트는 11년이 걸렸고 원래 [65]예상 비용의 거의 4배가 들었습니다.1976년에 마침내 첫 번째 실제 응용 프로그램을 실행할 준비가 되었을 때, 크레-1과 같은 기존의 상업용 슈퍼컴퓨터에 의해 능가되었습니다.

대규모 병렬 컴퓨터로서의 생물학적 뇌

1970년대 초, MIT 컴퓨터 과학인공 지능 연구소에서 마빈 민스키와 시모어 파퍼트는 생물학적 뇌를 거대한 병렬 컴퓨터로 보는 Society of Mind 이론을 개발하기 시작했습니다.1986년 민스키는 마음의 사회를 출판했는데, 이것은 "마음은 많은 작은 에이전트들로부터 형성되고,[76] 각각은 마음이 없는 것이다"라고 주장합니다.그 이론은 어떻게 우리가 지능이라고 부르는 것이 비지능적인 부분들의 상호작용의 산물일 수 있는지를 설명하려고 시도합니다.민스키는 이 이론에 대한 아이디어의 가장 큰 원천은 로봇 팔, 비디오 카메라, 그리고 아이들의 [77]블록으로 만들기 위해 컴퓨터를 사용하는 기계를 만들기 위한 그의 노력에서 왔다고 말합니다.

유사한 모델(생물학적 뇌를 대규모 병렬 컴퓨터로 보는 것, 즉 뇌는 독립적이거나 반독립적인 에이전트로 구성되어 있음) 또한 다음과 같이 설명되었습니다.

참고 항목

참고문헌

  1. ^ Gottlieb, Allan; Almasi, George S. (1989). Highly parallel computing. Redwood City, Calif.: Benjamin/Cummings. ISBN 978-0-8053-0177-9.
  2. ^ S.V. Adve et al. (2008년 11월)"일리노이의 병렬 컴퓨팅 연구: UPCRC 의제" Wayback Machine에서 2018-01-11 아카이브(PDF).parallel@일리노이, 일리노이 대학교 어바나 샴페인."이러한 성능상의 이점을 위한 주요 기술, 즉 클럭 주파수의 증가와 스마트하지만 점점 더 복잡해지는 아키텍처는 이제 소위 전력의 벽에 부딪치고 있습니다.컴퓨터 업계는 미래의 성능 향상은 하나의 코어를 더 빠르게 만드는 것이 아니라 다이에 있는 프로세서(또는 코어)의 수를 늘리는 것에서 비롯되어야 한다는 점을 받아들였습니다."
  3. ^ 아사노비치 외.오래된 [통념]:전력은 무료이지만 트랜지스터는 비쌉니다.새로운 [통념]은 전력은 비싸지만 트랜지스터는 "무료"라는 것입니다.
  4. ^ 아사노비치, Krste 등(2006. 12. 18.)"병렬 컴퓨팅 연구의 풍경: 버클리에서 바라본 풍경" (PDF).캘리포니아 대학교 버클리.기술 보고서 번호 UCB/EECS-2006-183. "구 [통념]:클럭 주파수를 높이는 것이 프로세서 성능을 향상시키는 주요 방법입니다.새로운 [통념]:병렬성을 높이는 것이 프로세서 성능을 향상시키는 주요 방법입니다.일반적으로 '클럭 속도가 높은 편이 낫다'는 입장과 관련이 있는 회사인 인텔의 대표들조차 클럭 속도를 극대화함으로써 성능을 극대화하려는 전통적인 접근 방식이 한계에 다다랐다고 경고했습니다.
  5. ^ "동시는 병렬이 아닙니다", 2012년 1월 11일 Waza 컨퍼런스, Rob Pike (슬라이드 아카이브 2015-07-30, Wayback Machine) (비디오)
  6. ^ "Parallelism vs. Concurrency". Haskell Wiki.
  7. ^ Hennessy, John L.; Patterson, David A.; Larus, James R. (1999). Computer organization and design: the hardware/software interface (2. ed., 3rd print. ed.). San Francisco: Kaufmann. ISBN 978-1-55860-428-5.
  8. ^ a b Barney, Blaise. "Introduction to Parallel Computing". Lawrence Livermore National Laboratory. Retrieved 2007-11-09.
  9. ^ Thomas Rauber; Gudula Rünger (2013). Parallel Programming: for Multicore and Cluster Systems. Springer Science & Business Media. p. 1. ISBN 9783642378010.
  10. ^ Hennessy, John L.; Patterson, David A. (2002). Computer architecture / a quantitative approach (3rd ed.). San Francisco, Calif.: International Thomson. p. 43. ISBN 978-1-55860-724-8.
  11. ^ Rabaey, Jan M. (1996). Digital integrated circuits : a design perspective. Upper Saddle River, N.J.: Prentice-Hall. p. 235. ISBN 978-0-13-178609-7.
  12. ^ Flynn, Laurie J. (8 May 2004). "Intel Halts Development Of 2 New Microprocessors". New York Times. Retrieved 5 June 2012.
  13. ^ Thomas Rauber; Gudula Rünger (2013). Parallel Programming: for Multicore and Cluster Systems. Springer Science & Business Media. p. 2. ISBN 9783642378010.
  14. ^ Thomas Rauber; Gudula Rünger (2013). Parallel Programming: for Multicore and Cluster Systems. Springer Science & Business Media. p. 3. ISBN 9783642378010.
  15. ^ Amdahl, Gene M. (1967). "Validity of the single processor approach to achieving large scale computing capabilities". Proceedings of the April 18-20, 1967, spring joint computer conference on - AFIPS '67 (Spring). pp. 483–485. doi:10.1145/1465482.1465560. ISBN 9780805301779.{{cite book}}: CS1 메인 : 일자 및 연도 (링크)
  16. ^ Brooks, Frederick P. (1996). The mythical man month essays on software engineering (Anniversary ed., repr. with corr., 5. [Dr.] ed.). Reading, Mass. [u.a.]: Addison-Wesley. ISBN 978-0-201-83595-3.
  17. ^ Michael McCool; James Reinders; Arch Robison (2013). Structured Parallel Programming: Patterns for Efficient Computation. Elsevier. p. 61.
  18. ^ Gustafson, John L. (May 1988). "Reevaluating Amdahl's law". Communications of the ACM. 31 (5): 532–533. CiteSeerX 10.1.1.509.6892. doi:10.1145/42411.42415. S2CID 33937392. Archived from the original on 2007-09-27.
  19. ^ Bernstein, A. J. (1 October 1966). "Analysis of Programs for Parallel Processing". IEEE Transactions on Electronic Computers. EC-15 (5): 757–763. doi:10.1109/PGEC.1966.264565.
  20. ^ Roosta, Seyed H. (2000). Parallel processing and parallel algorithms : theory and computation. New York, NY [u.a.]: Springer. p. 114. ISBN 978-0-387-98716-3.
  21. ^ "Processes and Threads". Microsoft Developer Network. Microsoft Corp. 2018. Retrieved 2018-05-10.
  22. ^ Krauss, Kirk J (2018). "Thread Safety for Performance". Develop for Performance. Archived from the original on 2018-05-13. Retrieved 2018-05-10.
  23. ^ Tanenbaum, Andrew S. (2002-02-01). Introduction to Operating System Deadlocks. Retrieved 2018-05-10. {{cite book}}: website=무시됨(도움말)
  24. ^ Cecil, David (2015-11-03). "Synchronization internals – the semaphore". Embedded. AspenCore. Retrieved 2018-05-10.
  25. ^ Preshing, Jeff (2012-06-08). "An Introduction to Lock-Free Programming". Preshing on Programming. Retrieved 2018-05-10.
  26. ^ "What's the opposite of "embarrassingly parallel"?". StackOverflow. Retrieved 2018-05-10.
  27. ^ Schwartz, David (2011-08-15). "What is thread contention?". StackOverflow. Retrieved 2018-05-10.
  28. ^ Kukanov, Alexey (2008-03-04). "Why a simple test can get parallel slowdown". Retrieved 2015-02-15.
  29. ^ Krauss, Kirk J (2018). "Threading for Performance". Develop for Performance. Archived from the original on 2018-05-13. Retrieved 2018-05-10.
  30. ^ Flynn, Michael J. (September 1972). "Some Computer Organizations and Their Effectiveness" (PDF). IEEE Transactions on Computers. C-21 (9): 948–960. doi:10.1109/TC.1972.5009071.
  31. ^ 패터슨과 헤네시, 페이지 748.
  32. ^ Singh, David Culler; J.P. (1997). Parallel computer architecture ([Nachdr.] ed.). San Francisco: Morgan Kaufmann Publ. p. 15. ISBN 978-1-55860-343-1.{{cite book}}: CS1 유지 : 여러 이름 : 저자 목록 (링크)
  33. ^ 컬러 외 15쪽
  34. ^ 팻, 예일 (2004년 4월)."10년 후의 마이크로프로세서: 당면 과제는 무엇이며 어떻게 해결해야 합니까?Wmv(Wayback Machine)에서 2008-04-14 보관.카네기 멜론 대학의 저명한 강사가 강연합니다.2007년 11월 7일 회수.
  35. ^ Culler 등 124쪽
  36. ^ Culler 등 125쪽
  37. ^ Samuel Larsen; Saman Amarasinghe. "Exploiting Superword Level Parallelism with Multimedia Instruction Sets" (PDF).
  38. ^ a b 패터슨과 헤네시, 713쪽.
  39. ^ a b 헤네시와 패터슨, 549쪽.
  40. ^ 패터슨과 헤네시, 714쪽.
  41. ^ Ghosh (2007), p. 10.Keidar (2008).
  42. ^ 린치 (1996), p. xix, 1–2.펠레그(Peleg, 2000), 페이지 1.
  43. ^ 클러스터링이란 무엇입니까?웹피디아 컴퓨터 사전.2007년 11월 7일 회수.
  44. ^ 베어울프 정의.Wayback Machine PC Magazine에서 2012-10-10 보관.2007년 11월 7일 회수.
  45. ^ "List Statistics TOP500 Supercomputer Sites". www.top500.org. Retrieved 2018-08-05.
  46. ^ "인터커넥트" 웨이백 머신에서 2015-01-28 보관.
  47. ^ 헤네시와 패터슨, 537쪽.
  48. ^ MPP 정의.Wayback Machine PC Magazine에서 2013-05-11을 보관했습니다.2007년 11월 7일 회수.
  49. ^ Kirkpatrick, Scott (2003). "COMPUTER SCIENCE: Rough Times Ahead". Science. 299 (5607): 668–669. doi:10.1126/science.1081623. PMID 12560537. S2CID 60622095.
  50. ^ Valueva, Maria; Valuev, Georgii; Semyonova, Nataliya; Lyakhov, Pavel; Chervyakov, Nikolay; Kaplun, Dmitry; Bogaevskiy, Danil (2019-06-20). "Construction of Residue Number System Using Hardware Efficient Diagonal Function". Electronics. 8 (6): 694. doi:10.3390/electronics8060694. ISSN 2079-9292. All simulated circuits were described in very high speed integrated circuit (VHSIC) hardware description language (VHDL). Hardware modeling was performed on Xilinx FPGA Artix 7 xc7a200tfbg484-2.
  51. ^ Gupta, Ankit; Suneja, Kriti (May 2020). "Hardware Design of Approximate Matrix Multiplier based on FPGA in Verilog". 2020 4th International Conference on Intelligent Computing and Control Systems (ICICCS). Madurai, India: IEEE. pp. 496–498. doi:10.1109/ICICCS48265.2020.9121004. ISBN 978-1-7281-4876-2. S2CID 219990653.
  52. ^ a b c D'Amour, DRC Computer Corporation 최고운영책임자 Michael R."표준 재구성 가능 컴퓨팅".2007년 2월 28일 델라웨어 대학 초청 연사
  53. ^ Boggan, Sha'Kia, Daniel M. Pressel (2007년 8월).GPU: Wayback Machine(PDF)에서 2016-12-25년 보관된 범용 계산위한 새로운 플랫폼.ARL-SR-154, 미군 연구소2007년 11월 7일 회수.
  54. ^ 마슬레니코프, 올레크 (2002)"병렬 ASIC 또는 FPGA 기반 시스템에서 프로세서 요소를 위한 실행 프로그램의 체계적 생성 및 VHDL로의 변환 - 프로세서 요소 제어 장치에 대한 설명"컴퓨터 과학 강의 노트, 2328/2002: p. 272
  55. ^ Shimokawa, Y.; Fuwa, Y.; Aramaki, N. (18–21 November 1991). "A parallel ASIC VLSI neurocomputer for a large number of neurons and billion connections per second speed". [Proceedings] 1991 IEEE International Joint Conference on Neural Networks. Vol. 3. pp. 2162–2167. doi:10.1109/IJCNN.1991.170708. ISBN 978-0-7803-0227-3. S2CID 61094111.
  56. ^ Acken, Kevin P.; Irwin, Mary Jane; Owens, Robert M. (July 1998). "A Parallel ASIC Architecture for Efficient Fractal Image Coding". The Journal of VLSI Signal Processing. 19 (2): 97–113. doi:10.1023/A:1008005616596. S2CID 2976028.
  57. ^ Kahn, Andrew B. (2004년 6월 21일) "Wayback Machine에서 2008-01-31 아카이브된 반도체 산업DFM 문제의 범위 지정"캘리포니아 대학교 샌디에고."미래의 제조용 설계(DFM) 기술은 설계 [복구 불가능한 지출] 비용을 줄이고 90nm 기술 노드에서 100만 달러가 훨씬 넘는 마스크 세트 및 프로브 카드 비용인 제조 [복구 불가능한 지출]을 직접 해결해야 하며 반도체 기반 혁신에 상당한 찬물을 끼얹어야 합니다."
  58. ^ a b 패터슨과 헤네시, 751쪽.
  59. ^ Wayback Machine에서 MPI 발명가 Bill Gropp Archive 2011-07-25에게 수여되는 Sidney Fernbach Award는 MPI를 "지배적인 HPC 통신 인터페이스"로 언급합니다.
  60. ^ Shen, John Paul; Mikko H. Lipasti (2004). Modern processor design : fundamentals of superscalar processors (1st ed.). Dubuque, Iowa: McGraw-Hill. p. 561. ISBN 978-0-07-057064-1. However, the holy grail of such research—automated parallelization of serial programs—has yet to materialize. While automated parallelization of certain classes of algorithms has been demonstrated, such success has largely been limited to scientific and numeric applications with predictable flow control (e.g., nested loop structures with statically determined iteration counts) and statically analyzable memory access patterns. (e.g., walks over large multidimensional arrays of float-point data).
  61. ^ 병렬 컴퓨팅 백과사전, David Padua 2011 ISBN 0387097651 페이지 265
  62. ^ Asanovic, Krste 등(2006. 12. 18.)"병렬 컴퓨팅 연구의 풍경: 버클리에서 바라본 풍경" (PDF).캘리포니아 대학교 버클리.기술 보고서 번호 UCB/EECS-2006-18317-19페이지의 표 참조.
  63. ^ David R., Helman; David A., Bader; JaJa, Joseph (1998). "A Randomized Parallel Sorting Algorithm with an Experimental Study" (PDF). Journal of Parallel and Distributed Computing. 52: 1–23. doi:10.1006/jpdc.1998.1462. hdl:1903/835. Retrieved 26 October 2012.[데드링크]
  64. ^ Dobel, B., Hartig, H., & Engel, M. (2012) "중복 멀티스레딩을 위한 운영 체제 지원.내장 소프트웨어에 관한 제10회 ACM 국제 회의, 83-92.doi:10.1145/2380356.2380375
  65. ^ a b Patterson and Hennessy, pp. 749–50: "이후 프로젝트에서 유용한 여러 기술을 성공적으로 추진했지만, ILIAC IV는 컴퓨터로서 실패했습니다.계획된 기계의 4분의 1밖에 건설되지 않았음에도 불구하고 비용은 1966년에 추정된 800만 달러에서 1972년에는 3,100만 달러로 증가했습니다.그것은 아마도 슈퍼컴퓨터 중 가장 악명높은 것이었을 것입니다.이 프로젝트는 1965년에 시작되어 1976년에 처음으로 실제 응용 프로그램을 실행했습니다."
  66. ^ 메나브레아, L. F. (1842)찰스 배비지발명한 분석 엔진의 스케치.제네브 도서관.2007년 11월 7일 회수.인용문: "숫자표의 형성에 필요한 연산과 같은 일련의 동일한 연산을 수행해야 할 때, 기계를 작동시켜 여러 결과를 동시에 제공할 수 있으며, 이는 전체 프로세스 양을 크게 줄일 것입니다."
  67. ^ a b 패터슨과 헤네시, 753쪽.
  68. ^ R.W. 호크니, C.R. 제스호프.병렬 컴퓨터 2: 아키텍처, 프로그래밍알고리즘, 제2권 1988. p. 8 인용문: "컴퓨터 설계에서 병렬성에 대한 최초의 언급은 찰스 배비지가 발명한 해석 엔진의 스케치라는 제목의 1842년 L. F. 메나브레아 장군의 출판물에 있는 것으로 생각됩니다."
  69. ^ Bataille, M. (1972-04-01). "Something old: the Gamma 60 the computer that was ahead of its time". ACM SIGARCH Computer Architecture News. 1 (2): 10–15. doi:10.1145/641276.641278. ISSN 0163-5964. S2CID 34642285.
  70. ^ "Architecture Sketch of Bull Gamma 60 -- Mark Smotherman". www.feb-patrimoine.com. Retrieved 2023-08-14.
  71. ^ Tumlin, Smotherman (2023-08-14). "An Evaluation of the Design of the Gamma 60". ACONIT Computer History Museum. Department of Computer Science, Clemson University. Retrieved 2023-08-14.
  72. ^ "병렬 프로그래밍", S. 길, 컴퓨터 저널 Vol. 1 #1, pp2-10, 영국 컴퓨터 학회, 1958년 4월.
  73. ^ a b c d e Wilson, Gregory V. (1994). "The History of the Development of Parallel Computing". Virginia Tech/Norfolk State University, Interactive Learning with a Digital Library in Computer Science. Retrieved 2008-01-08.
  74. ^ Anthes, Gry (November 19, 2001). "The Power of Parallelism". Computerworld. Archived from the original on January 31, 2008. Retrieved 2008-01-08.
  75. ^ 패터슨과 헤네시, 749쪽.
  76. ^ Minsky, Marvin (1986). The Society of Mind. New York: Simon & Schuster. pp. 17. ISBN 978-0-671-60740-1.
  77. ^ Minsky, Marvin (1986). The Society of Mind. New York: Simon & Schuster. pp. 29. ISBN 978-0-671-60740-1.
  78. ^ Blakeslee, Thomas (1996). Beyond the Conscious Mind. Unlocking the Secrets of the Self. Springer. pp. 6–7. ISBN 9780306452628.
  79. ^ Gazzaniga, Michael; LeDoux, Joseph (1978). The Integrated Mind. pp. 132–161.
  80. ^ Gazzaniga, Michael (1985). The Social Brain. Discovering the Networks of the Mind. Basic Books. pp. 77–79. ISBN 9780465078509.
  81. ^ Ornstein, Robert (1992). Evolution of Consciousness: The Origins of the Way We Think. pp. 2.
  82. ^ Hilgard, Ernest (1977). Divided consciousness: multiple controls in human thought and action. New York: Wiley. ISBN 978-0-471-39602-4.
  83. ^ Hilgard, Ernest (1986). Divided consciousness: multiple controls in human thought and action (expanded edition). New York: Wiley. ISBN 978-0-471-80572-4.
  84. ^ Kaku, Michio (2014). The Future of the Mind.
  85. ^ Ouspenskii, Pyotr (1992). "Chapter 3". In Search of the Miraculous. Fragments of an Unknown Teaching. pp. 72–83.
  86. ^ "Official Neurocluster Brain Model site". Retrieved July 22, 2017.

추가열람

  • Rodriguez, C.; Villagra, M.; Baran, B. (29 August 2008). "Asynchronous team algorithms for Boolean Satisfiability". Bio-Inspired Models of Network, Information and Computing Systems, 2007. Bionetics 2007. 2nd: 66–69. doi:10.1109/BIMNICS.2007.4610083. S2CID 15185219.
  • 세친, A.; 사진측량의 병렬 컴퓨팅.GIM 인터내셔널.#1, 2016, 페이지 21-23.

외부 링크

이 기사 듣기 (54분)
Spoken Wikipedia icon
오디오 파일은 2013년 8월 21일자 본 문서의 개정판(2013-08-21)에서 작성되었으며 이후의 편집 내용은 반영되지 않습니다.