int a[10];
thread_main( int id )
{
for( 루프 1억번 )
a[id] += 랜덤값;
}
각각의 쓰레드는 고유한 아이디를 가집니다.
ex) 스레드 1번 a[0] += 랜덤값, 스레드 2번 a[1] += 랜덤값 ... 스레드 10번 a[9] += 랜덤값
서로 다른 스레드가 다른 데이터에 접근하기 때문에 락은 필요없습니다.
+1억이니 뭐니 하는 개소리들 쓰셔서 += 랜덤값으로 변경합니다.
랜덤값을 다 더했을때 int의 범위는 초과하지 않습니다.
멀티쓰레드 프로그래밍에서 이정도 성능 이슈는 기본중의 기본입니다.
정답은 10분뒤 공개합니다.
성능 저하의 원인을 서술하시오.
CPU 코어의 개수는 충분히 여유있다고 가정하며 컨택스트 스위칭으로 인한 오버헤드는 없다고봐도 무방합니다.
모든 쓰레드가 각자 다른 데이터에 접근하기 떄문에 락은 상관없습니다.
캐시 라인 관련 이해하나 떠보려고 내는 문제 아닌가
a[id]에 대한 접근을 1억번 하기때문
가짜공유문제 그리고 데이터 단위를 캐시라인크기64에 맞춰도 바이트정렬문제도 신경써야함