단일 스레드와 다중 스레드를 할 때 각 수행시간에 대한 질문입니다.
글쓴이: ghsdh3409 / 작성시간: 금, 2010/10/01 - 9:37오후
2차원 배열(1000 * 1000)의 각 행을 정렬하는 과정에서 단일 스레드와 다중 스레드를 각각 이용하여 수행시간을 측정했습니다.
수행시간 측정 구간은 2경우 모두 동일 했으며, clock_t start=clock(); 을 이용해서 측정하였습니다.
그리고 VirtualBox에서 구동했고 CPU 코어는 1개인 환경에서 테스트 했습니다.
수행시간에 있어서 다중 스레드가 여러개의 행을 동시에 처리하기 때문에 단일 스레드 일때 보다는 빠른 수행 시간을 보일 줄 알았는데
단일 스레드와 거의 차이가 없게 측정되었습니다.
1/2/4/8 스레드를 생성할 때 4가지 모두 150ms로 측정되었고, 때에 따라 단일 스레드가 시간이 조금 더 빠른 경우도 있고,
느린 경우도 있었습니다.
thread 되는 함수는 다음과 같이 작성하였습니다.
int array_size=-1; void *array_sort(int (*array)[SIZE]) { while(array_index<SIZE) { pthread_mutex_lock(&mutex1); array_index++; pthread_mutex_unlock(&mutex1); if(array_index>=SIZE) break; quick_sort(array[array_index], SIZE); } }
스레드 수가 2->4->8로 가면서, 어느시점이 되면 속도 상승이 줄어들거라고 예상했는데, 1/2/4/8 모든 경우에서 속도차이가 없는 이유가 궁금합니다.
Forums:
...
일할 사람이 한명인데 한번에 여러 개를 시키면 더 빨리할까요.
단열 코어에
싱글 코어에 멀티쓰레드 작업이 들어가면 한 코어에서 시분할을 해서 각 쓰레드를 수행하게 됩니다.
때문에 오히려 멀티쓰레드 작업이 더 느려지는 것이 일반적이죠.
...
CPU 1개인 상황이라면
쓰레드 만들고 동기화 비용으로 오히려 더 늦려지지 빨리질 수 는 없습니다.
댓글 달기