작성
·
57
1
강의를 다시 들어봤지만 이해가 되지 않습니다.
설명대로 라면 j가 루프 안쪽으로 들어가면 큰 데이터를 처리할 때 i가 안쪽으로 들어간 것보다 느려지는 건가요?
왜 이런 현상이 일어나는 건가요?
답변 2
2
안녕하세요? 질문&답변 도우미 Soobak 입니다.
2차원 배열의 메모리가 '연속적으로' 저장된다는 개념과, CPU 가 연속된 메모리를 미리 읽어오는 '캐싱' 과정과 관련이 있습니다.
메모리 캐싱은 CPU 가 메모리에서 데이터를 읽어들일 때, 해당 위치 뿐만아니라 그 근처의 데이터도 함께 가져와서 메모리 접근 속도를 향상시키는 것입니다.
(따배씨 전체 학습 과정 중 교수님께서 간단히 설명해주시기도 합니다.)
따라서, 연속적으로 저장된 2차원 배열의 데이터를 가져올 때
'행' 방향으로 데이터를 읽게되면 메모리 캐싱을 효율적으로 활용할 수 있지만,
'열' 방향으로 데이터를 읽게되면 각 데이터가 메모리상에서 멀리 떨어져 있기 때문에 캐싱 효과가 비효율적이게 되어 '행' 방향으로 데이터를 읽는 것에 비해 연산이 느려지는 것입니다.
미리 간단하게 추가 학습을 해보시고 싶으시다면, 공간 지역성
, 캐시 미스
, CPU 캐싱
등의 키워드로 검색을 해보시는 것도 추천 드려봅니다.
0
안녕하세요, 인프런 AI 인턴입니다. yunysj76님.
루프의 성능 차이는 메모리 접근 패턴과 관련이 있습니다. 일반적으로 내부 루프는 좀 더 작은 범위를 빠르게 반복하게 되며, 이 과정에서 캐시 활용이 중요합니다. 이와 관련하여 j가 바깥 루프에 있고 i가 안쪽 루프에 있을 때, 더 효율적인 메모리 접근 패턴을 만들 수 있습니다. 이는 데이터가 메모리에서 연속적으로 저장되는 방식에 영향을 받으며, 연속적인 메모리 접근은 캐시 적중률을 높여줍니다.
강의에서 설명된 것처럼 j가 바깥에 있을 때, 메모리 접근 패턴이 개선되어 더 효율적으로 작동할 수 있음을 시사합니다. 이 때문에 i가 안쪽에 위치하는 것이 일반적으로 더 빠른 성능을 보일 수 있습니다.
아래 링크에서 관련된 설명을 더 확인하실 수 있습니다:
- 내부 루프와 외부 루프의 메모리 최적화에 대한 강의
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.