컴퓨터 구조 · CPU · 퀴즈
컴퓨터 구조 확인
문항 7개. 정답과 해설은 풀어 본 뒤에 보여 드립니다.
캐시 밖 데이터를 읽으면 느린 이유는?
- 캐시 미스가 나면 CPU 가 클럭을 낮춰 기다리기 때문
- 메모리까지 다녀와야 해서
- 캐시에 없는 데이터는 항상 디스크까지 내려가서 읽기 때문
- 전력 절약 기능이 메모리 접근 속도를 일부러 낮추기 때문
메모리는 한 번에 얼마씩 가져오나?
- 요청한 1바이트만 정확히 가져온다
- 캐시 라인 통째로, 대개 64바이트씩
- 가상 메모리 페이지 단위로 4KB 씩
- 요청한 크기에 맞춰 필요한 만큼만
배열을 순서대로 읽으면 빠른 이유는?
- CPU 분기 예측기가 반복문을 미리 알아채기 때문
- 컴파일러가 순차 접근 코드만 최적화해 주기 때문
- 한 번 가져온 라인에서 여러 개를 공짜로 쓰기 때문
- 무작위 접근은 측정이 불안정해 우연히 느리게 나온 것
`0.1 + 0.2 == 0.3` 이 거짓인 이유는?
- 0.1 이 2진수로 딱 떨어지지 않아서
- 파이썬 부동소수점 구현에 있는 버그라서
- 기본 정밀도 설정이 소수점 아래 자릿수를 줄여서
- 출력할 때 반올림 설정이 값을 바꿔 버려서
돈 계산에 float 을 쓰면 안 되는 이유는?
- 반올림 오차가 쌓여 1원 단위가 어긋나기 때문
- 정수 연산보다 느려서 처리량이 떨어지기 때문
- float 이 정수보다 메모리를 많이 차지하기 때문
- 기계마다 float 표현이 달라 이식성이 없기 때문
`1e16 + 1 - 1e16` 과 `1e16 - 1e16 + 1` 의 결과가 다른 이유는?
- 두 식의 연산자 우선순위가 서로 다르기 때문
- 큰 수에 작은 수를 더하면 작은 쪽이 밀려나 사라져서
- 1e16 이 중간에 정수로 변환되면서 값이 달라져서
- 부동소수점 덧셈 구현에 있는 버그이기 때문
네트워크 바이트 순서가 빅엔디안으로 정해진 이유는?
- 서로 다른 기계가 같은 숫자를 같게 읽으려면 약속이 필요해서
- 빅엔디안이 리틀엔디안보다 처리 속도가 빠르기 때문
- 빅엔디안을 쓰는 기계가 더 많아 다수를 따른 것이라서
- 바이트 순서를 뒤집어 두면 도청자가 값을 읽기 어려워서