이미 2 대의 컴퓨터 케이스에 대한 답변이 있습니다.
정렬 할 128GB의 데이터가 단일 하드 드라이브 (또는 외부 장치)에 단일 파일로 저장된다고 가정합니다. 얼마나 많은 기계 나 하드 드라이브가 사용되던간에 원본 128GB 파일을 읽고 정렬 된 128GB 파일을 쓰는 데 걸리는 시간은 동일하게 유지됩니다. 유일한 절약은 정렬 된 데이터 청크를 만드는 내부 RAM 기반 정렬 중에 발생합니다. n-1 하드 드라이브와 병합하여 남은 하드 드라이브에 단일 정렬 된 128GB 파일로 n 방향 병합을 수행하는 데 걸리는 시간은 동일하게 유지됩니다. 128GB 정렬 파일을 남은 시간에 기록하는 데 걸리는 시간으로 제한됩니다 하드 드라이브.
n 개의 컴퓨터의 경우 데이터가 128GB/n 청크로 분할됩니다. 각각의 머신은 랜덤 액세스 오버 헤드를 줄이기 위해 한 번에 64MB의 읽기 서브 덩어리를 교체 할 수 있으므로 "마지막"머신은 모든 이전 머신이 시작하기 전에 모든 덩어리를 읽을 때까지 기다리지 않습니다 .
n> = 4 인 n 개의 기계 (각각 64GB 램)와 n> = 4 인 n + 1 개의 하드 드라이브의 경우 O (n) 시간 복잡도의 기수 정렬을 각 기계가 사용하여 n 작업에서 32GB 이하의 청크를 생성 할 수 있습니다 하드 드라이브를 동시에 연결 한 다음 대상 하드 드라이브에 n 방향으로 병합합니다.
더 큰 n의 이점을 제한하는 수익률이 감소하는 지점이 있습니다. n> 16을 넘는 곳에서는 내부 병합 처리량이 디스크 I/O 대역폭보다 커질 수 있습니다.병합 프로세스가 I/O 바운드가 아닌 CPU 바운드 인 경우 I/O 시간보다 큰 병합 오버 헤드와 병렬로 청크를 만드는 데 걸리는 시간이 CPU 오버 헤드에서 균형을 유지합니다.
분할하여 다시 작성하십시오. 최종 병합을 위해 단일 기계를 피할 수 있습니까? 네 : 기수 정렬. – wildplasser
@wildplasser - 중요하지 않습니다. 병합은 외부 I/O보다 빠르기 때문에 병합 프로세스는 128GB의 데이터를 대상 드라이브에 기록하는 데 걸리는 시간으로 제한됩니다. n + 1 장치의 경우 n 방향 병합을 사용하여 나머지 드라이브에 쓸 수 있습니다. 이렇게하면 n 개의 기계가 n 개의 작업 드라이브에 n 개의 데이터 청크를 병렬로 만들 수 있지만 최종 병합은 대상 드라이브의 I/O 속도로 제한됩니다. – rcgldr
공유 파일 시스템을 (단일) 머신으로 간주 할 수 있습니다. 어느 것이 여전히 깔때기 잠금 장치가 될 것입니다. – wildplasser