안녕하세요. 설계독학맛비입니다.
최근에 이것저것? 인터넷을 끄적이다가, Hardware Engineer 가 알아두면 좋은 내용들이 있어서 소개해 드립니다.
첫번째 이야기!! 이중 for 문에서 memory index 접근 방법에 따른 Performance 차이. (시간복잡도)
블라인드 앱에서 본 글인데요. 여러분들 맞출 수 있나요? (저도 어버버 할듯... ㅎㅎ)
Q. 원문=============
인터뷰 보는데.. 시건복잡도 문제를 수기로 작성해주고 어떤게 더 빠른지 말해달라고 했었는데…
1. 이중 for문 (i -> j 순서) > sum += arr[i][j]
2. 이중 for문 (j -> i 순서) > sum += arr[i][j]
어떤게 더 빠른지 말하라고 했는데.. 혼이 씌었는지 1번이 더 빠르다고 했넹…..
기초도 모르는 나란 자식… 흑…. ===================
A. 캐시 히트에 따라 다르다. 대체로 최하위 차원부터 반복을 시작하면 캐시히트 확률이 높다.
위 질문에서는 이유와 함께 2번을 선택해야겠죠? 그리고 돌려봐야 정확하게 알 수 있다. 도 함께.
https://frogred8.github.io/docs/014_cache_line/
두번째 이야기!! 1.1 + 0.1 !== 1.2 이다 !!!! (두둥....?!)
왜.. 일반 CPU 에서는 1.1 + 0.1 이 1.2 가 아닌지 이해할 수 있는영상입니다.
"수 표현 방법"과 그에따른 "오차(error)"발생을 알고계시면 언젠가? 도움이 되실꺼에요.
그럼 즐공하세요 :)
댓글을 보다보니, 좋은 질문 + 답변 이여서 발췌
ps. 혹시나.. 이거 HW 설계엔지니어 면접에 이런 질문 안해요...
(그런데 두번째꺼는 물어보고 싶긴하네요;;; 중요한내용이긴하니까요.)