0
매트릭스 곱셈을 구현하기위한 병렬 프로그램을 작성 중입니다.장벽을 사용하여이 코드를 어떻게 동기화 할 수 있습니까?
main
함수에서 먼저 스레드 풀 (= num_threads
)을 만든 다음 각 스레드에 mult
함수를 구현합니다. 이 스레드 각각은 출력 행렬의 일부 행을 계산합니다.
그러나 얻은 결과가 올바르지 않습니다.
메인 스레드가 for 루프를 종료하고 풀을 비울 때 모든 스레드가 생성되지 않았기 때문입니다. (스레드 pool_free
함수는 스폰 된 스레드가 완료 될 때까지 대기합니다).
sleep(1)
을 사용하면 모든 스레드가 생성 될 충분한 시간이 주어지며 얻은 결과는 괜찮지 만이 코드의 실행 시간을 추적해야하므로 sleep
을 제거 할 수있는 방법이 있습니다.
gettimeofday(&start, NULL);
int i1[num_threads];;
for(i=0;i<num_threads;i++){
i1[i] = i;
int err = threadpool_add_task(pool,Mult,(void *)&i1[i],1);
}
//sleep(1);
threadpool_free(pool,1);
gettimeofday(&end, NULL);