인프런 커뮤니티 질문&답변
수업자료로 시간 단축 해보는 중에 궁금한게 생겨 질문드립니다.
작성
·
296
1
안녕하세요 수강생입니다.
연습문제 보던중 재미있는 생각이나서 테스트중이었는데요.
수업자료에서의 방법으로 작업하면
총 100의 일이 있을때 코어가 4개면
1~25/26~50/51~75/76~100
이렇게 나누어진다 생각하였고
상대적으로 1~25이 빨리끝나고 76~100이 늦게 끝나니
시간적으로 손해가 생긴다 생각하였습니다.
그리하여 저는 CountPrime 함수 부분을 수정하였는데
start=i ,end=Max_NUMBER로 받아오고
(i는 main함수부의 for(int i=0;i<coreCount;i++)의 i입니다.)
추가로 coreCount를 받아와서
for ( int number = start; number<end; number+=coreCount)
로 구현하였습니다.
이러면 제 생각으로는
100개의 일을 4개의 코어가 나누어 일한다고 치면
코어1 : 1 5 9 13 17~~
코어2 : 2 6 10 14 18~~
코어3 : 3 7 11 15 19~~
코어4 : 4 8 12 16 20~~
이런 방식으로 나누어서 작업하고,
상대적으로 오래걸리는 76~100번대 일을
코어들이 골고루 나눠받은만큼
소요시간 역시 적게 걸릴것이라 예상했습니다.
그러나 결과적으로 소요시간은 같게나왔으며
생각하지못한 CPU 이용률에서 차이가 났습니다.
(기존방식 cpu 100% 수정시 cpu 60%)
참고로 Max값은 100,000,000으로 잡고 진행하였고
소요시간은 33초 ~ 34초 근처로 나왔습니다.
질문드리고 싶은것은 위 상황에서 소요시간 차이가 거의 나지않는 이유와
CPU 사용량에 차이가 나게되는 이유를 알고싶습니다.
퀴즈
What is the main cause of unexpected results that can occur when multiple threads simultaneously access and modify shared data in a multithreading environment?
Deadlock
Thread Local Storage (TLS) conflict
Race Condition
CPU Pipeline Failure
답변 1
2
측정 시간은 굉장히 다양한 요소가 영향을 줄 수 있는데요.
가령 +1은 INC 명령어로 더 빠르게 처리 할 수 있기도 하고,
캐시 관련 부분에서 차이가 난 것일 수도 있고
정확한 이유는 저도 알 수 없습니다.





