병합 정렬은 분할 및 정복 방법을 사용하기 때문에 잘 병렬화됩니다. 알고리즘의 여러 가지 다른 병렬 변형이 수년에 걸쳐 개발되었습니다. 어떤 병렬 병합 정렬 알고리즘은 강하게 관련을 순차 top-down 병합 알고리즘을하는 동안 다른 사람이 다른 일반적인 구조를 사용 K-방법으로 병합 방법입니다.
병렬 재귀와 병합 정렬
순차 병합 정렬 절차는 분할 단계와 병합 단계의 두 단계로 설명 할 수 있습니다., 첫 번째로 구성되어 있는 많은 재귀화는 반복적으로 수행하는 동문 프로세스할 때까지 하위 시퀀스는 사소로 정렬(을 포함하는 하나 또는 성분 없음). 직관적 인 접근 방식은 이러한 재귀 호출의 병렬화입니다. 다음 의사에 대해 설명합 병합 정렬과 병렬로 재귀를 사용하여 포크 및 가입하세 키워드:
이 알고리즘을 사소한의 수정 버전 순차와 병렬화하지 않습니다. 따라서 속도 향상은 그리 인상적이지 않습니다., 그것의 범위 Θ(n){\displaystyle\타(n)},만의 개선 Θ(로그n){\displaystyle\타(\로그 n)}에 비해 순차적으 버전(참조하십시오 소개하는 알고리즘). 이는 주로 병렬 실행의 병목 현상이기 때문에 순차적 병합 방법 때문입니다.
병합 정렬과 병렬 mergingEdit
더 나은 병렬 처리 달성될 수 있을 사용하여 병합 병렬 알고리즘이 있습니다. 코멘 외. 두 개의 정렬 된 하위 시퀀스를 하나의 정렬 된 출력 시퀀스로 병합하는 이진 변형을 제시하십시오.,
시퀀스 중 하나(길이가 부드러 우면 더 긴 시퀀스)에서 중간 인덱스의 요소가 선택됩니다. 다른 시퀀스에서의 위치는이 요소가이 위치에 삽입 된 경우이 시퀀스가 정렬 된 상태로 유지되는 방식으로 결정됩니다. 따라서 두 시퀀스의 다른 요소가 얼마나 작아 졌는지 알고 출력 시퀀스에서 선택한 요소의 위치를 계산할 수 있습니다. 에 대한 부분적인 시퀀스의 크고 작은 요소에서 만든 이 방법으로 병합 알고리즘을 다시 병렬로 실행될 때까지 베이스의 경우 재귀에 도달합니다.,
다음 의사 표시된 병렬 병합 정렬 방법을 사용하여 병합 병렬 알고리즘(에서 채택 Cormen et al.).
를 분석하기 위해 재발에 관한 최악의 경우 범위,재귀화의 parallelMergesort 이 수반되어야 한 번만 그들의 병렬 실행을 획득
에 대한 자세한 정보의 복잡성에 대한 병렬 병합 절차를 참조하십시오 병합 알고리즘이 있습니다.,
이 재발의 해결책은
T∞sort=Θ(log(n)3){\textstyle T_{\infty}^{\text{sort}}=\Theta\left(\log(n)^{3}\right)}에 의해 주어진다.
병렬 다자간 병합 sortEdit
보이 임의로 제한합 병합 정렬 알고리즘을 이진 병합 방법이 있기 때문에 일반적으로 p>2 개 프로세서를 사용할 수 있다. 더 좋은 방법이 될 수 있을 사용 K-방법으로 병합 방법,일반화의 바이너리,병합되는 k{\displaystyle k}정렬 순서 병합되었다., 이 병합 변형은 PRAM 에서 정렬 알고리즘을 설명하는 데 적합합니다.
기본 IdeaEdit
병렬 다자간 mergesort 프로세스에 네 개의 프로세서 티 0{\displaystyle t_{0}}t3{\displaystyle t_{3}}.
Multisequence selectionEdit
PseudocodeEdit
아래,전체 의사의 평행한 다자간 병합 정렬 알고리즘은 주어집니다., 우리는 장벽이 있는 동기화하기 전과 후 multisequence 선택하는 등 모든 프로세서를 결정할 수 있는 분할 성분 및 순서 파티션니다.
AnalysisEdit
실제적인 적응하고 applicationEdit
다자간 병합 정렬 알고리즘은 아주 확장을 통해 그것의 높은 병렬화 기능을 사용할 수 있는 많은 프로세서를 지원합니다. 이 알고리즘 실행 가능한 후보에 대한 정렬을 많은 양의 데이터와 같은 가공에서는 컴퓨터 클러스터입니다., 또한,이후 이러한 시스템에서 메모리가 일반적으로 제한 리소스,의 단점은 공간 복잡도의 병합 정렬은 무시할 수 있습니다. 그러나 유모차에서 모델링 할 때 고려되지 않는 이러한 시스템에서 다른 요소가 중요 해집니다. 여기에서,다음과 같은 측면을 고려할 필요가 있다:메모리 계층,데이터의 경우에 맞지 않으로 프로세서 캐시거나,통신의 오버헤드 사이에서의 데이터 교환 프로세서가 될 수 있는 병목 현상 데이터 수 있는 더 이상 액세스를 통해 공유 메모리가 있습니다.
샌더스 외., 을 제시했에서 자신의 종이 대량 동시 병렬 알고리즘에 대한 다단계 다자간 mergesort,분할 p{\displaystyle p}프로세서로 r{\displaystyle r}그룹의 크기는 p'{\displaystyle p’}. 모든 프로세서는 먼저 로컬로 정렬됩니다. 과 달리 하나의 수준의 다자간 mergesort,이러한 시퀀스는 다음으로 분할 r{\displaystyle r}부품 및 할당하는 적절한 프로세서 그룹이 있습니다. 이러한 단계는 해당 그룹에서 재귀 적으로 반복됩니다. 이렇게하면 의사 소통이 줄어들고 특히 많은 작은 메시지의 문제를 피할 수 있습니다., 기본 실제 네트워크의 계층 구조를 사용하여 프로세서 그룹(예:랙,클러스터,…).
더 VariantsEdit
병합 정렬 중 하나는 첫 번째 정렬 알고리즘 어디에 최적의 속도를 달성되었으로,리처드는 콜을 사용하여 영리 서브 샘플링 알고리즘을 확인 O(1)합니다. 다른 정교한 병렬 정렬 알고리즘은 더 낮은 상수로 동일하거나 더 나은 시간 경계를 달성 할 수 있습니다., 예를 들어,1991 년에 설명되어 있는 권한을 데이비드한 병렬화 퀵(및 관련 기수 종류)운영할 수 있는 O(로그 n)시간에 CRCW 병렬 랜덤 액세스템(유모차)n 프로세서에 의해 수행하는 암시적으로 분할. 힘을 더 보여줍니다 그는 파이프라인된 버전의 Batcher 의 Bitonic Mergesort 에 O((로그 n)2)시간에 나비 정렬 네트워크에서는 연습은 실제로보다 더 빨리 그의 O(로그 n)종류에서 유모차,그리고 그는 대한 자세한 토론의 숨겨진 간접비에서 비교,기수 및 병렬로 정렬됩니다.피>