안녕하세요, 이경문이라고 합니다. 질문이 있어서 이렇게 글을 올려 봅니다.

요즘 멀티 스레드의 performance에 관심을 가지게 되어서 테스트를 해 보았습니다.


void foo(int loopCnt) // 2000000000

{
  int cnt = loopCnt;
  for (int i = 0; i < cnt; i++);
}



foo하는 함수를 실행시켜서 함수 수행 시간을 재 봤습니다. 시간은 대략 7.8초(7878msec)가 나왔습니다.

그런데 똑같은 코드를 여러개의 스레드를 동시에 돌려서 경과 시간을 재어 봤습니다. 그 결과 다음과 같은 결과가 나왔습니다.


[thread 갯수 1개]

7878


[thread 갯수 2개]

8689

8689


[thread 갯수 3개]

8799

8830

8815


[thread 갯수 4개]

9095

9282

9345

9314



상기 foo 라는 함수는 다른 스레드와 동기화 하는 부분이 없기 때문에 관련 수행 코드의 실행 시간이 비슷할 거라 판단이 되었는데(각자 다른 CPU에서 돌아가므로), 의외로 스레드가 많아 지니 수행 속도가 느려 지네요. 이 부분에 대한 자세한 원인이 무엇일까요?


자세한 코드는 아래 사이트 확인해 보실 수 있습니다. 

http://www.gilgil.net/7150


테스트 코드 : http://www.gilgil.net/?module=file&act=procFileDownload&file_srl=7332&sid=3bbe64ac3b003a366b6c4d5f23636e30

감사합니다.

번호 제목 글쓴이 날짜 조회 수
공지 [공지] 프로그래밍 관련 Q&A 게시판 입니다. woos 2016.04.09 22269
498 spin lock 을 사용하는 이유를 알고 싶습니다. [6] 장성민 2011.04.25 16478
497 ppc에서 preempt 완벽 지원여부 아시는분? [1] 최종환 2007.02.22 16131
496 리눅스에서의 동기화 정리 [13] 홍문화 2011.04.25 16026
495 Embeded 보드에 udev 올리는 법에 관한 조언을 요청드립니다. [4] 장성민 2011.01.08 15939
494 플래시 메모리에서 FTL(Flash Translation Layer) S/W 모듈과 관련하여 문의 드립니다. [4] 남현우 2009.01.09 15867
493 create_workqueue 와 create_singlethread_workqueue 의 차이? 김영민 2010.12.24 15521
492 VMware의 Linux에 Xen 설치해서 XP 설치 가능?? [5] 무명 2009.01.17 15513
491 u-boot 소스 분석에서 궁금한 점이 있습니다. [6] 원민수 2006.06.28 15196
» 멀티 스레드를 이용한 20억번 돌기의 시간 재기 [29] 이경문 2011.07.15 15194
489 mov r0,r0 [27] 송원준 2010.05.03 15172
488 모듈오류가 나는데 이유가 뭔지 안잡히네요.. [5] 김영일 2010.11.30 14560
487 linux swap out 관련.. [1] 박은병 2009.03.05 14463
486 안드로이드 고수님들께 질문드립니다. ^^ [11] Jason 2012.10.23 14200
485 [toolchain] arm-linux-gcc [4] 김민종 2010.04.27 14094
484 i386의 i 와 386은 각각 어떤 의미인가요? [4] 이경호 2007.03.07 13685
483 thread의 상태값 [4] 송선희 2009.03.10 13568
482 kernel의 virtual address [5] file 김민종 2010.04.28 13480
481 디버거 원리.. [6] 박은병 2008.01.31 13443
480 mutex와 semaphore차이? [2] 김영민 2011.03.02 13316
479 ___reserved_mem_reserve_reg 관련 질문 [4] DEWH 2020.03.09 12866
XE Login