• 카테고리

    질문 & 답변
  • 세부 분야

    게임 프로그래밍

  • 해결 여부

    미해결

캐시 강의 관련 질문이 있습니다!

22.06.09 14:42 작성 조회수 323

0

 

안녕하세요,

강사님 수업을 잘 듣고 있습니다. 쉽게 말씀해주셔서 저처럼 잘 모르는 사람도 잘 따라갈 수 있네요.

 

최근 멀티 쓰레드를 모두 듣고 복습을 좀 해보고 있었는데, 이중  for문 사용 시에 locality로 인해 캐시에서 빠르게 불러올 수 있다는 걸 다른 예시를 통해서도 이해해보려고 하고있습니다.

 

그러면 아래와 같이 바깥 for문이 작고, 안쪽 for문이 클 때 속도가 더 빠른 것도 16분 경의 예시와 같이 locality로 인해 그런건가요?

답변 1

답변을 작성해보세요.

2

이 부분은 캐시 때문이라기보다는, 만들어지는 코드 특성 때문으로 보입니다.


이렇게 안쪽 for문을 컴파일한걸 어셈블리 의사코드로 표현한다면
INC(1증가), CMP(비교), JLE(비교결과에 따라 코드 실행 위치 이동)으로 이루어질테고,
j < 100000을 빠져나가는 시점에 실행 코드 위치를 바꾸기 위해 점프를 해야 할텐데요.
상대적으로 INC, CMP 연산에 비해 JUMP 계열이 오래 걸리기 때문에
점프를 적게 하는 쪽이 성능에 유리할테고,
그렇다 보니 1번 케이스가 아주 미세하게 효율이 더 좋을 것으로 보입니다.

캐시는 메모리와 연관되어 작동하는데 사실 j, i 같은 경우
바로 레지스터에 있는 값을 카운터로 사용할 수도 있기에
만들어지는 코드를 뜯어보기 전에는 꼭 캐시 이슈라 볼 수는 없을 것 같습니다.


긍정맨님의 프로필

긍정맨

질문자

2022.06.09

아, 어셈블리로 작동방식을 말씀해주시니 이해가 확 되네요!

감사합니다.