목록을 좌우로 나누고 (피벗보다 작거나 큰 경우) Pthreads를 사용하여 각 파티션에 새로운 트레드를 만듭니다. 허용 된 최대 스레드 수에 도달 할 때까지이 작업을 반복적으로 수행합니다.Pthreads를 사용하여 Quicksort를 병렬 처리하여 속도를 높일 수 없음
printfs를 사용하여 프로그램에서 진행되는 작업을 수행 할 때 각 스레드가 위임 된 작업을 병렬로 수행하고 있음을 분명히 알 수 있습니다. 그러나 단일 프로세스를 사용하는 것이 항상 가장 빠릅니다. 더 많은 쓰레드를 사용하자마자, 완료에 걸리는 시간이 거의 두 배가되고 쓰레드의 수가 증가합니다.
서버에서 최대 16 개의 프로세서를 사용할 수 있습니다.
알고리즘은 다음과 같습니다 : 요소를 피벗과 비교하여 왼쪽과 오른쪽으로 배열을 나눕니다. 오른쪽과 왼쪽의 새 스레드를 시작하고 스레드가 다시 결합 할 때까지 기다리십시오. 사용 가능한 스레드가 더 많으면 더 많은 재귀 적으로 만들 수 있습니다. 각 스레드는 자식이 참가할 때까지 대기합니다.
모든 것이 나에게 의미가 있으며 정렬은 완벽하게 잘 작동하지만 스레드가 많을수록 속도가 크게 느려집니다.
시작할 스레드 (예 : 50000)에 대해 파티션 당 최소 요소 수를 설정해 보았습니다.
스레드가 완료되면 다른 스레드가 시작될 수있는 접근 방식을 시도했습니다. 이로 인해 수백 개의 스레드가 시작되고 완료됩니다. 나는 오버 헤드가 너무 많은 것이라고 생각한다. 그래서 나는 그것을 제거하고 스레드가 실행 완료되면 새 스레드가 작성되지 않았습니다. 나는 속도는 좀 빨라지지만 단일 프로세스보다 훨씬 느립니다.
내가 사용한 코드는 다음과 같습니다.
는 아무도 내가 잘못 일을 할 수 있는지에 관한 단서를 가지고 있습니까?
'num_processes'를 2로 설정하고 어떻게되는지보십시오. – Brian