상세 컨텐츠

본문 제목

병렬프로그래밍(2) - 루프 병렬화

공부

by myeongjaechoi 2024. 3. 25. 19:53

본문

UTM을 사용하여 공부하였다.

이것은 스레드를 사용하지 않은, squre root 계산이다. 이때는 연산을 한 번에 한다.

이것은 2개의 스레드에 대해 루프 작업이 분할되지 않은 for문 실행한 것이다.

이때, for 루프의 0 ~ 99999999까지의 작업을 2개의 스레드가 중복하여 수행하기 때문에, 2개의 스레드가 같은 메모리에 대해 읽기와 쓰기를 경쟁하게 되어 더 많은 시간이 소요되고, 2개의 스레드에 의해 같은 메모리에 있는 데이터에 대해 2번 루트값(루트의 루트 값)을 계산하여 잘못된 값 초래될 수 있다. 

이때, 0번 스레드는 for(i=0; i<50000000; i++)를 수행하고, 1번 스레드는 for(i=50000000; i<100000000; i++) 수행한다.

밑줄 친 것은, 0번 스레드와 1번 스레드가 공유하는 코드이다.
#pragma omp for 지시어로, 기본적으로 각 스레드 작업량 = 총 루프 카운트 / 스레드 수 이다.

이제 속도를 비교해보겠다.

순차프로그래밍

0.449938s이 나온 것을 확인할 수 있다.

루프 작업이 분할되지 않은 병렬 프로그램

순차프로그램 보다 시간이 더 걸리는 것을 확인 할 수 있다.

루프 작업이 분활된 병렬 프로그램

0.097797이 나온 것으로 보아, 루프 작업이 분할된 병렬 프로그램 > 순차 프로그램 > 루프 작업이 분할되지 않은 병렬 프로그램 순인 것을 확인할 수 있다.


스레드 
1 0.334356
2 0.164028
3 0.14534
4 0.138309
5 0.126713
6 0.124882
7 0.120399
8 0.117771

스레드의 수가 늘어날 때마다, 시간이 줄어드는 것을 확인할 수 있고, 어느 시점부터는 시간의 차이가 크게 줄지 않는 것을 확인할 수 있다.

스레드 수에 따른 시간

'공부' 카테고리의 다른 글

운영체제- CPU 스케줄링 및 다중 큐  (0) 2024.04.16
운영체제 - 컴퓨터 구조  (0) 2024.03.31
운영체제 - 커널  (1) 2024.03.18
인공지능 - 인공지능과 탐색  (0) 2024.03.14
병렬프로그래밍(1)  (0) 2024.03.11

관련글 더보기