분산 컴퓨팅과 병렬 컴퓨팅


61

나는 사람들이 병렬 컴퓨팅과 분산 컴퓨팅 에 대해 이야기하는 것을 종종 듣는다 . 그러나 나는 둘 사이에 명확한 경계가 없으며 사람들은 그것을 매우 쉽게 혼동하는 경향이있다.

  • 병렬 컴퓨팅은 멀티 스레딩 또는 단일 CPU를 최대한 활용하는 방법에 더 밀접하게 연결되어 있습니다.
  • 분산 컴퓨팅은 분할 및 정복이라는 개념을 말하며, 다른 시스템에서 하위 작업을 실행 한 다음 결과를 병합합니다.

그러나 빅 데이터 시대에 들어서면서 그 차이는 실제로 사라지고 있으며 오늘날 대부분의 시스템은 병렬 컴퓨팅과 분산 컴퓨팅의 조합을 사용합니다.

일상적인 업무에서 사용하는 예는 작업자가 다른 컴퓨터에서 작업을 실행하는 명확하게 분산 된 시스템 인 Map / Reduce 패러다임이있는 Hadoop이지만 병렬 컴퓨팅으로 각 컴퓨터를 최대한 활용하는 것입니다.

오늘날 세상에서 정확하게 구별하는 방법을 이해하고 병렬 컴퓨팅에 대해 여전히 이야기 할 수 있거나 더 이상 명확한 구별이없는 경우에 대한 조언을 얻고 싶습니다. 나에게 그것은 분산 컴퓨팅이 지난 몇 년 동안 많이 성장한 것처럼 보이지만 병렬 컴퓨팅은 정체 된 것처럼 보이므로 병렬화보다 계산 분산에 대해 더 많은 이야기를 듣는 이유를 설명 할 수 있습니다.


5
병렬 컴퓨팅이 반드시 단일 CPU를 의미하는 것은 아닙니다. 물리적 CPU가 여러 개인 시스템이 있습니다.
svick

2
또한 분산 컴퓨팅은 그 자체로 분할 및 정복으로 제한 되지 않습니다 . 동시성과 병렬성을 혼동하는 사람들에게는 더 많은 문제가 있습니다.
Raphael

1
분산 컴퓨팅을 명시 적으로 처리하는 경우 훨씬 더 심각한 장애 사례를 처리해야합니다. 많은 것들이 지리적 이유로 만 배포됩니다. 네트워크의 중앙 노드에 병목 현상이 발생하기 때문에 일부 분산 시스템의 병렬 작업은 거의 없습니다.
Rob

답변:


57

이것은 부분적으로 용어의 문제이므로 사전에 명확하게 설명하기 위해 귀하와 귀하가 말하고있는 사람 만 필요합니다. 그러나 병렬 처리 , 동시성 또는 분산 시스템 과 더 관련이있는 여러 가지 주제가 있습니다 .

병렬 처리 는 일반적으로 여러 프로세서를 활용하여 가능한 빨리 특정 계산을 수행하는 것과 관련이 있습니다. 프로세서의 규모는 단일 프로세서 내부의 여러 산술 단위에서부터 메모리를 공유하는 여러 프로세서에 이르기까지 많은 컴퓨터에서 계산을 분산시키는 범위에이를 수 있습니다. 계산 모델 측면에서 병렬 처리는 일반적으로 최종 결과를 계산하기 위해 내부에서 여러 개의 동시 계산 스레드를 사용하는 것입니다. 병렬 처리 는 단일 반응 클록을 공유하는 많은 프로세서를 포함하는 실시간 반응 시스템 에도 사용됩니다 . 이러한 시스템은 완전히 결정적 입니다.

동시성 은 다중 계산 스레드를 사용한 계산 연구입니다. 동시성은 하드웨어 아키텍처가 아닌 소프트웨어 아키텍처에서 비롯됩니다. 하드웨어 병렬 처리를 이용하기 위해 동시성을 사용하도록 소프트웨어를 작성할 수 있지만, 종종 소프트웨어 동작에 내재되어 있고 다른 비동기 이벤트 (예 : 사용자 인터페이스 스레드와 독립적으로 작동하는 계산 스레드 또는 반응하는 프로그램)에 반응 할 필요가 있습니다. 인터럽트 처리기 스레드로 전환하여 하드웨어 인터럽트로 전환).

분산 컴퓨팅 연구는 통신 링크로 연결된 프로세서를 분리합니다. 병렬 처리 모델은 종종 공유 메모리를 가정하지만 (항상 그런 것은 아니지만) 분산 시스템은 기본적으로 메시지 전달에 의존합니다. 분산 시스템은 본질적으로 동시 적입니다. 동시성과 마찬가지로 분배는 종종 솔루션의 일부가 아니라 목표의 일부입니다. 자원이 지리적으로 다른 위치에있는 경우 시스템은 본질적으로 분배됩니다. 프로세서 노드 또는 통신 링크의 부분 장애가 발생할 수있는 시스템이이 도메인에 속합니다.


2
좋은 대답입니다. 분산 컴퓨팅은 병렬 컴퓨팅의 하위 집합이라는 점을 강조해야합니다.
Raphael

6
@Raphael : 두 필드의 초점을 정확하게 나타내는 것은 아닙니다. 실제로 그들은 완전히 다른 문제를 다루기 때문에 종종 완전히 별도의 필드로 간주됩니다. MPI를 사용하여 병렬 컴퓨터를 프로그래밍 할 때는 이러한 컴퓨터에서 발생할 가능성이 적기 때문에 부분 오류가 발생하지 않습니다. 반면에 분산 컴퓨팅은 부분 장애와 같은 분산 문제에 더 관심이 있으며 사용 가능한 머신의 모든 CPU 사이클을 짜는 것에 대해서는 훨씬 덜 우려합니다.
Dave Clarke

4
@Raphael 반대로, 분산 컴퓨팅은 병렬 컴퓨팅과는 무관합니다. 분산 시스템 연구에서 병렬 컴퓨팅은 종종 지루한 경우입니다 (흥미로운 로컬 리소스, 장애 없음).
Gilles

나는 말 그대로 문자를 사용하고있었습니다. 용어가 적절하고 분산 된 경우에는 너무 나쁩니다.
Raphael

귀하의 답변 @Gilles에 감사드립니다. 분산 컴퓨팅에 대해 약간 편견이있는 것처럼 보이며 적절한 용어로 무언가를 언급하는 사람을 보게되어 기쁩니다!
Charles Menguy

17

@Raphael이 지적한 것처럼 분산 컴퓨팅은 병렬 컴퓨팅의 하위 집합입니다. 병렬 컴퓨팅은 Concurrent Computing의 하위 집합입니다.

동시성공유를 나타냅니다같은 시간 프레임에 자원의. 예를 들어 여러 프로세스가 동일한 CPU (또는 CPU 코어)를 공유하거나 메모리 또는 I / O 장치를 공유합니다. 운영 체제는 공유 리소스를 관리합니다. 멀티 프로세서 시스템과 분산 시스템은 동시성 제어가 중요한 역할을하는 아키텍처입니다. 동시성은 하드웨어 및 소프트웨어 수준에서 발생합니다. 여러 장치가 동시에 작동하고 프로세서에는 내부 병렬 처리가 있으며 여러 명령에 대해 동시에 작업하고 시스템에는 여러 개의 프로세서가 있으며 시스템은 네트워크 통신을 통해 상호 작용합니다. 동시성은 응용 프로그램 레벨에서 신호 처리, I / O 및 처리의 중첩, 통신, 프로세스 간 또는 동일한 프로세스의 스레드간에 자원 공유에서 발생합니다.

동일한 시스템에서 실행되는 두 프로세스 (또는 스레드)는 실행이 동시에 인터리브되도록합니다. 프로세스 (스레드)는 CPU 리소스를 공유합니다. 나는 다음 정의를 좋아한다 : 동일한 시스템에서 실행되는 두 프로세스 (스레드)는 첫 번째 프로세스 (스레드)가 아직 실행을 종료하지 않았을 때 두 번째 프로세스 (스레드)가 실행을 시작하는 경우에만 동시 적이다.

프로세스 (또는 스레드)가 다른 CPU (또는 동일한 CPU의 코어 )에서 실행될 때 동시성은 병렬 처리가됩니다 . 이 경우의 병렬 처리는 "가상"이 아니라 "실제"입니다.

이러한 CPU가 동일한 머신에 속하는 경우 계산을 "병렬"이라고합니다. CPU가 다른 머신 에 속할 경우 지리적으로 분산 될 수 있으므로 계산을 "분산"이라고합니다.

따라서 분산 컴퓨팅은 병렬 컴퓨팅의 하위 집합이며 동시 컴퓨팅의 하위 집합입니다.

물론, 일반적으로 병렬 컴퓨팅과 분산 컴퓨팅은 다른 것으로 간주됩니다. 병렬 컴퓨팅은 밀접하게 연결된 응용 프로그램과 관련이 있으며 다음 목표 중 하나를 달성하는 데 사용됩니다.

  1. 계산 집약적 인 문제를 더 빨리 해결하십시오.
  2. 같은 시간에 더 큰 문제를 해결하십시오.
  3. 같은 시간에 같은 크기의 문제를 더 높은 정확도로 해결하십시오.

과거에 첫 번째 목표는 병렬 컴퓨팅의 주된 이유였습니다. 문제 해결 가속화. 지금, 그리고 가능하면, 과학자들은 주로 (두 번째 목표를 달성하기 위해 병렬 컴퓨팅을 사용하여 예를 들어, 그들은 시간의 같은 양의 지출하고자하는 그들이 크기의 병렬 문제에서 과거의 해결에 소요 된 지금 문제를 해결하기 위해 크기의 즉,) 또는 세 번째 (, 그들은 시간의 같은 양의 지출하고자하는 그들이 크기의 병렬 문제에서 과거의 해결에 소요 된 현재 크기의 문제를 해결하기 위해Tx5xTxx그러나 훨씬 더 복잡한 모델, 더 많은 방정식, 변수 및 제약 조건을 사용하여 더 높은 정확도로). 병렬 컴퓨팅은 공유 메모리, 메시지 전달 또는 둘 다를 사용할 수있다 (예를 들어, OpenMP를 사용하는 공유 메모리 인트라 노드, MPI를 사용하는 메시지 전달 노드 간); GPU 가속기를 사용할 수도 있습니다. 응용 프로그램은 하나의 병렬 슈퍼 컴퓨터에서 실행되므로 일반적으로 오류, 네트워크 파티션 등과 같은 문제는 고려하지 않습니다. 이러한 이벤트의 가능성은 실제적인 목적으로 거의 0에 가깝기 때문입니다. 그러나 기후 변화 시뮬레이션과 같은 수개월 동안 실행될 수있는 대규모 병렬 어플리케이션은 일반적으로 실패와 관련이 있으며, 문제 발생시 처음부터 다시 시작하지 않도록 체크 포인트 / 재시작 메커니즘을 사용합니다.

분산 컴퓨팅은 (에 대한 목표하는 느슨하게 결합 된 애플리케이션 관련이 분산 슈퍼 컴퓨팅는 ) 그 실행 다른 아키텍처에서 실행 혜택을 누릴 수있는 다른 구성 요소에 나누어 질 수있다, 그렇지 않으면 너무 크거나 문제를 해결하는 것입니다. 클라이언트-서버, 피어-투-피어 등을 포함한 여러 모델이 있습니다. 보안, 장애, 네트워크 파티션 등과 같은 분산 컴퓨팅에서 발생하는 문제는 설계시 고려되어야합니다. 이러한 맥락에서 장애는 규칙이며 예외는 아닙니다.

마지막으로 그리드클라우드 컴퓨팅은 분산 컴퓨팅의 하위 집합입니다. 그리드 컴퓨팅 패러다임은 대규모 리소스 공유 및 혁신적인 고성능 애플리케이션에 중점을 두어 기존 분산 컴퓨팅과 차별화 된 새로운 분야로 부상했습니다. 공유되는 자원은 대개 여러 개의 다른 관리 도메인 (소위 가상 조직 )에 속합니다 . 그리드 컴퓨팅은 지난 10 년간 과학자들에 의해 많이 사용되었지만, 일반 사용자에게는 전통적으로 어렵습니다. 클라우드 컴퓨팅은 일반 사용자가 가상 머신을 사용하여 동일한 데이터 센터에 배치되어 지리적으로 분산되지 않은 여러 머신을 쉽게 이용할 수 있도록하여 격차를 해소하려고합니다.사용자가 응용 프로그램을 실행하기 위해 모을 수 있습니다. 하드웨어, 특히 고성능 네트워크 인터커넥트 (예 : Infiniband 등)가 없기 때문에 클라우드는 병렬 MPI 애플리케이션을 실행하지 않습니다. 클라우드에서 실행되는 분산 응용 프로그램은 일반적으로 Map / Reduce 패러다임을 활용하기 위해 구현됩니다. 그런데 많은 사람들이 Map / reduce를 병렬 데이터 흐름 모델로 생각합니다.


2
이 답변은 약간 오해의 소지가 있습니다. 분산 고성능 컴퓨팅 (실제로는 병렬 고성능 컴퓨팅과 밀접한 관련이 있음)에 중점을 둔 반면 분산 컴퓨팅의 전체 분야는 훨씬 넓습니다.
Jukka Suomela

동의하지 않습니다. 그 대답 에는 분산 고성능 컴퓨팅 도 포함 되며, 대신 분산 컴퓨팅에서 제외됩니다. 실제로 분산 컴퓨팅의 영역 인 클라이언트 서버 및 피어 투 피어 모델, 보안, 장애 및 네트워크 파티션 문제에 대해 논의했습니다.
Massimo Cafaro

+1. 좋은 답변! 분산 컴퓨팅이 병렬 컴퓨팅 이외의 목적으로 사용되는지 궁금합니다. 다시 말해, 분산 컴퓨팅은 병렬 컴퓨팅의 부분 집합입니까, 즉 분산 컴퓨팅은 병렬 컴퓨팅에 속합니까? Btw, 여기 내 질문 cs.stackexchange.com/questions/20064
Tim

1
@Tim, 분산 컴퓨팅도 병렬 컴퓨팅과 독립적으로 사용됩니다. 예를 들어 지도자 선출, 합의 등과 같은 고전적인 분산 알고리즘에 대해 생각해보십시오.
Massimo Cafaro

7

질문을 이해하지 못했습니다. 병렬 처리와 분산 처리의 차이점은 여전히 ​​존재합니다. 동일한 계산에서 둘 다 활용할 수 있다는 사실은 개념의 의미를 변경하지 않습니다.

그리고 어떤 뉴스를 팔로우하고 있는지 모르겠지만, 병렬 처리가 정체되지 않을 것이라고 확신합니다.

테라 바이트 단위의 데이터를 처리해야하는 경우 분산 컴퓨팅 (병렬 컴퓨팅과 결합 될 수 있음)이 좋습니다. 그러나 데스크톱이나 스마트 폰에서 무언가를 계산해야하는 경우, 병렬 컴퓨팅만으로도 인터넷 연결이 항상 가능하지 않을 때와 느릴 수 있다는 점을 고려할 때 최상의 결과를 얻을 수 있습니다.


1
-1,이 답변은 실제로 질문에 대답하지 않기 때문에 (즉, 용어를 설명하십시오).
Jukka Suomela

@ JukaSuomela, 질문은 용어를 설명하는 것이 아니라 그 용어의 구별입니다.
svick

6

읽을 가치가있는 최근 논문은 다음과 같습니다.

Michel Raynal : "병렬 컴퓨팅과 분산 컴퓨팅 : 대혼란?" , Proc. Euro-Par 2015 , doi : 10.1007 / 978-3-319-27308-2_4

요약:

이 짧은 입장 논문은 교육 관점에서 병렬 처리와 분산 컴퓨팅이 종종 혼동되는 반면, 깊은 본질을 볼 때 뚜렷한 근본적인 문제를 해결한다는 사실을 논의합니다. 따라서 적절한 커리큘럼은 각각에 대해 별도로 설계해야합니다. “모든 것이 모든 것 (그리고 상호 적으로)에있다”는 태도는 학생들에게 한쪽의 병렬성을 특징 짓고 다른 쪽의 분산 컴퓨팅을 특징으로하는 중요한 개념을 가르치는 적절한 접근법이 아닌 것 같습니다.


4

책 [1]의 서론 섹션에서 저자는 분산 컴퓨팅과 병렬 컴퓨팅의 비교에 대한 다른 관점 (다른 답변과는 다른 관점)을 제공합니다.

넓은 의미에서 병렬 처리의 목표는 모든 프로세서를 사용하여 하나의 큰 작업을 수행하는 것입니다. 반면, 분산 시스템의 각 프로세서는 일반적으로 자체적으로 반독립적인 안건을 갖지만, 리소스 공유, 가용성 및 내결함성을 포함한 여러 가지 이유로 프로세서는 작업을 조정해야합니다.

이러한 관점에서 Map / Reduce 패러다임은 주로 병렬 컴퓨팅 컨텍스트에 속합니다. 그러나 Paxos (wiki) 알고리즘 을 사용하여 관련 리더가 공통 리더에 대한 합의에 도달하게하려면 분산 컴퓨팅에서 일반적인 문제를 고려합니다.

[1] 분산 컴퓨팅. 기초, 시뮬레이션 및 고급 주제. Hagit Attiya와 Jennifer Welch. 2004.


0

대답 여기에 더 적합합니다. 기본적으로, parallel참조하는 memory-shared multiprocessor반면 distributedprivate-memory multicomputers. 즉, 첫 번째 시스템은 단일 멀티 코어 또는 수퍼 스칼라 시스템이고 다른 시스템은 지리적으로 분산 된 컴퓨터 네트워크입니다. 후자는 커플 링이 적으므로 성능이 떨어지지 만 가용성과 내결함성이 높아집니다. 메모리 내 객체를 참조하여 병렬 프로세서의 다른 CPU로 전달할 수있는 반면, 모든 왕복에서 데이터 직렬화 해제 및 장거리 전송이 필요하기 때문에 성능이 저하됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.