첫 댓글에 인강을 볼 수 있는 URL을 달았습니다
11화 The Memory Hierarchy
이번에는 하라부지 교수님이 아니라 아조시 교수님이 수업하신다
개인적으로는 이분 영어가 더 잘 들려서 좋다...
Memory Hierarchy를 설명하기 위해 갖가지 storage device들의 스펙들에 대해 설명한다
오늘은 이론적이고 전체적인 부분에 대해 개관한다.
1. 저장장치들 storage devices
내용은 많지만 핵심은
-----------------------------
값이 쌀수록 용량이 크고 대신 느리다
비쌀수록 용량은 작고 빠르다
-----------------------------
그러하다.
기억에 남는 것은 SSD는 다음과 같은 구조를 이루며
HDD처럼 쓰기 위해서 logical disk block이란 가상의 개념(원래 HDD가 쓰던 개념)을 따른단다
뭔가.. 가상 메모리 같은 개념인 거 같다(그림의 block은 그거는 아니고 진짜 하드웨어 블록임)
저런 게 OOP랑 일맥상통하는 부분이 있지만 그런 이야기는 나중에 하자..
그리고 SSD는 그림의 블록 하나를 다 지워야만 page에 데이터를 쓸 수 있다. 왜? 는 설명 안 해줌 뭐 장치가 그렇다는데 그런거겠지..
그래서 쓰는 게 읽는 거보다 느리고(읽는 건 제한 없음) 10000번을 쓰면 못 쓴댄다.
아 그리고 왜 함슬람이 요즘 뜨는지, 왜 Clojure가 미래의 언어라고 주장하는 사람이 있는지도 조금 이해가 갔다.
다음 그림을 보면
1985에서 2003년까지는 2년마다 2배씩 꾸준히 성능이 증가한다. 그런데 2003년에는 그 한계를 맞는다.
더이상 clock frequency를 증가시킬 수 없게 된 것이다. 공짜 점심은 끝났다...
이 때부터 CPU 제조사들은 코어를 늘릴 생각을 하게 된다
그래서.. 병렬 프로그래밍이 중요해진 것이고
CPU cycle time과 Effective CPU cycle time이 차이 나는 이유가 바로 병렬 프로그래밍 때문인 것이다.
그런데 그 병렬 프로그래밍을 가장 하기 쉬운 패러다임이 바로 함슬람이다.
람다후 함크바르!
Clojure가 미래의 언어라는 과격한 주장이 나오는 이유도 이걸 참 잘 해서라는 거 같다
그리고 JVM의 지원도 끝내주고..
그건 그렇구요
그다음은 지역성에 대해 이야기한다.
2. locality
지역성의 법칙:
후로그램은 최근에 사용한 인스트럭션이나 데이터들의 주소와 가깝거나
동일한 곳의 데이터를 많이 사용하는 경향이 있다.
가까운 곳의 데이터를 쓰면 spatial locality
동일한 주소의 데이터를 쓰면 temporal locality
이걸 지켜야 빠르다. 왜? 캐시를 쓰니까
멍청한 예제도 하나 소개해 준다
이런 짓은 아무도 안 하지만 어쨌든 이러면 안 되요
근데 전에 이런 거 일일이 생각하면 머머리된다는 개드립을 친 적이 있는데...
배워보니 locality 정도는 생각해야 되겠다. 너무 중요하다. 머머리가 되는 걸 강요받고 있다!
3. The Memory Hierarchy
솔직히 빠른 놈이 용량도 크고 값까지 싸다면 그놈으로 메모리를 도배하면 되겠으나
응 아니야~
그러한 현실의 제약을 해결하기 위해 cache를 사용한다.
아래쪽의 큰 용량을 가지며 느리지만 값싼 저장장치에서
위쪽의 비싸고 용량은 작지만 빠른 저장장치로
지금 쓰려는 데이터들을 옮긴다.
(지역성의 법칙에 의해 지금 쓰려는 데이터는 어차피 하부에 저장된 데이터의 일부이므로 가능)
이것이 cache이다.
그리고 k레벨의 저장장치는 k+1레벨 저장장치의 cache 역할을 한다.
cache hit는 CPU가 지금 쓰려는 데이터가 cache(즉 상위 저장장치)에 있는 경우를 의미한다
캐시 히트는 좋은 것이다!
cache miss는 CPU가 지금 쓰려는 데이터가 cache(즉 상위 저장장치)에 존재하지 않는 경우를 의미한다
당연히 더 하위의 저장장치에까지 데이터를 요청해야 되고 시간이 오래 걸린다.
이 현상은 해로운 현상이다!
그러하다.
근데 우리 후로그래머들에게 결국 중요한 것은 무엇인가?
그렇다. 후로훼셔널 후로그래머라면 코드를 딲! 보는 순간 지역성이 있는지 없는지 파악할 수 있어야 한다
아무리 메모리를 서열로 잘 구성해놔도 프로그램이 안 쓰면 말짱 황이다
이 맛에 제가 CS:APP빱니다... 후로그래머한테 진정으로 중요한 걸 말해준다 이겁니다...
끗
--------------------------------------
어제 오랜만에 개념글 뽕 맞아서 또 글 썼읍니다
그리고 머리 속에 정리도 되고 해서요.
틀린 부분이 있다면 반드시 지적해주십시오. 사실상 오늘 처음 배우고 썰 푸는 겁니다...
매일 연재 해 볼 생각입니다 가능하면 말이지요
CS:APP 읽는 여러분 모두 화이팅!
2학년 필독서! 꼭봐라 두번봐라 세번봐라 계속봐라!
https://scs.hosted.panopto.com/Panopto/Pages/Sessions/List.aspx#folderID="b96d90ae-9871-4fae-91e2-b1627b43e25e"&maxResults=50&sortColumn=1&sortAscending=true
올해동안 배웠던 내용이라서 이해가 쏙쏙됨
비록 학점은.. B+이지만..
무슨 과목에서 배웠어요?
구렇군요...
이걸 컴구에서 배우는구나
컴구에서도 배우는데 쓰신내용은 웅영체제에서 배워요
컴구는 이제 캐시 배치를 할 때 주메모리와 보조메모리 사이의 데이터 동기화가 무슨 순서로 이뤄지는지, 캐시 테이블에 있는 주소의 비트구조는 어케 된건지 뭐 그런거 배움
귀여워 ㅋㅋㅋ
하지만 난 머머리 아니지롱~
되요->돼요 (되어 = 돼임) [리듬 맞춤법 봇♬]
추가내용 감샤합니다
흠 그런 걸 배우는 군요... 한 반 년전에는 도대체 뭘 하는 과목일지 감도 안 잡혔는데 ㅎ
캐쉬 캐쉬~
잘게 짜르면 성능이 더 잘나오는 이유
내용 좋은듯
앞으로도 잘 정리해서 올리거라 엣헴
엣헴엣헴
근데 내 친구가 자꾸 CPU 레벨 컨커런시 추상화가 이루어질꺼라고 함슬람들의 3일 천하에 불과하다고 자꾸... - return 0;
굿 감사함미다
그런 연가가 이루어지고 있는지조차 의문인데 - return 0;
함슬람 부분은 다분히 내 의견이긴 한데 ㅋ 모르겠당
나도 그렇게 알고 있고 실제로 함슬람들이 떠오르고 있는 이유이기도 한데 내 친구는 삼일천하가 될꺼라고 굳게 믿는 중.. - return 0;
https://en.wikipedia.org/wiki/Loop_tiling
굳굳 하하하 개념글이다! 쎾쓰!!!
XD
씨알메리//캐쉬->캐시 (sh는 시로 표기함. 스킨십 멤버십 플래그십 플래시 등등...) [리듬 맞춤법 봇♬]
개추 - dc App
스탈링 컴구책에 나오는 거네