Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

add ch03, ch04 #10

Open
wants to merge 2 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
169 changes: 169 additions & 0 deletions understanding-software-dynamics/ch3/임수현_3장.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,169 @@
# Understanding Software Dynamics Ch.03

## 책 내용 정리
- 관측 기댓값을 예측해보자.
- 페이지 크기는 물리 주소의 L1 캐시 크기로 제한한다.
- 스트라이드 패턴은 캐시 구성을 보여준다.
- 전체 크기의 패턴은 캐시 크기를 나타낸다.
- 프리패칭, 다중 실행, 비순차적 실행, 그리고 비의존적인 로드는 메모리 측정을 어렵게 한다.
- 가상 주소 맵핑은 패턴을 부정확하게 한다.
- TLB 미스는 캐시 타이밍을 왜곡한다.
- 활용도 낮은 캐시를 만드는 패턴은 성능 문제를 야기할 수 있다.
- 측정된 값을 예상과 비교해보자. 불일치에서는 항상 배울 것이 있다.

## 새로 배운 내용
<details>
<summary>페라이트 코어 메모리 실제 모습</summary><hr>

<img width="359" alt="스크린샷 2024-08-12 오후 4 58 50" src="https://github.com/user-attachments/assets/84a0a702-854a-4d87-9685-5a6c2a57df4d">
<img width="544" alt="스크린샷 2024-08-12 오후 4 57 41" src="https://github.com/user-attachments/assets/92e8ced4-c559-4c55-9976-f49978dc3d8e">
<img width="477" alt="스크린샷 2024-08-12 오후 4 57 12" src="https://github.com/user-attachments/assets/1fd21fc4-0698-48d5-986d-dd49d679c33a">

https://youtu.be/7ozNMgx7WtQ?si=KO2_L4erqk139YWf
https://youtu.be/e9ih93tuH1k?si=eyoxD2vRBZy262G2

</details>


<details>
<summary>DRAM</summary><hr>

DRAM에 대해서: https://youtu.be/7j-UWjHpb28?si=3r8dYwxxDjzUxLTC
DRAM vs SRAM: https://youtu.be/r787m_IaR1I?si=IodKycoHrbSjcDvC

<img width="597" alt="스크린샷 2024-08-12 오후 5 00 30" src="https://github.com/user-attachments/assets/7fbf8046-808d-4ccd-a8dc-5483494874b2">

</details>



<details>
<summary>캐시메모리 사상방식</summary><hr>

1. 캐시메모리 사상방식 = 캐시메모리 매핑기법
- 캐시 메모리와 주기억장치 사이의 데이터 이동을 위하여 캐시메모리와 주기억장치를 매핑하는 기술
- 직접사상, 연관사상, 집합-연관사상이 있음
2. 직접사상(Direct Mapping)

| 구분 | 설명 |
|--------|------------------------------------------------------------|
| 특징 | 캐시메모리의 특정 라인에 주기억장치의 각 블록(Block)이 적재 <br> 캐시메모리와 주기억장치가 1:1로 대응하는 구조|
| 장점 | 회로구현이 용이하고 간단함. 처리속도 빠름 |
| 단점 | CPU 접근 시 캐시메모리 접근 실패율(Miss Rate 높음) |
- 직접사상 예시
1) 00002 접근 시, 캐시메모리 Hit, Index(002), Tag(00)
2) 00003 접근 시, 캐시메모리 Miss
-> 주기억장치 검색
-> 캐시메모리 Index 003에 Tag 00 입력, Data 2555 입력
<img width="434" alt="스크린샷 2024-08-12 오후 5 17 43" src="https://github.com/user-attachments/assets/09194f4d-dc71-462c-898a-38a77aeda461">


3. 연관사상(Associative Mapping)
| 구분 | 설명 |
|--------|------------------------------------------------------------|
| 특징 | 캐시메모리에 데이터를 적재할 시 데이터와 그 데이터의 주기억장치 주소도 함께 저장하는 방식 <br> 주기억장치 데이터가 캐시메모리 어느 곳에나 적재가 가능 |
| 장점 | 캐시 적중률(Hit Rate)이 높음 |
| 단점 | 구현회로가 복잡하고 처리속도가 느림 |

- 연관사상 예시
1) 01002 접근 시, 캐시메모리의 주소(Address) 일치하면 Hit
2) 00002 접근 시, 캐시메모리 Miss
-> 주기억장치 검색
-> 캐시메모리 Index 003에 Address와 Data 입력
<img width="505" alt="스크린샷 2024-08-12 오후 5 21 22" src="https://github.com/user-attachments/assets/f92a6018-4e76-44a8-b603-2ab88cb6d9f4">


4. 집합-연관사상(Set-Associative Mapping)
| 구분 | 설명 |
|--------|------------------------------------------------------------|
| 특징 | 직접사상과 연관사상의 조합 <br> 캐시메모리의 한 Index에 2개 이상의 서로 다른 데이터 블록 저장하여 하나의 Set 형성 |
| 장점 | 캐시 적중률(Hit Rate)이 높음 |
| 단점 | 구현회로 및 구조가 복잡 |





- 집합-연관사상 예시
1) 01002 접근 시, 캐시메모리 Hit, Index(002), Tag(01)
2) 캐시 Miss의 경우
-> 주기억장치 검색
-> 동일 Index에 Tag를 찾아 Data 입력
<img width="544" alt="스크린샷 2024-08-12 오후 5 24 35" src="https://github.com/user-attachments/assets/6954c512-cdd0-4984-a23e-d4cbd1dd01d7">


https://youtu.be/WziGa-WCtMA?si=XtAmeSgcRPcsFG9B


</details>



<details>
<summary>TLB와 MMU</summary><hr>

1. 변환 참조 버퍼(TLB, Translation Look-aside Buffer)
- TLB is a cache of page table
- 변환참조버퍼 or 변환우선참조버퍼 or 변환색인버퍼
- MMU에 소속된 칩셋으로 자주 참조되는 가상주소와 물리주소 변환정보를 저장한 고속의 캐시
- 페이지 교체정책은 LRU(Least Recently Used, 최저사용빈도) 정책을 사용함
<img width="313" alt="스크린샷 2024-08-12 오후 5 29 54" src="https://github.com/user-attachments/assets/ee289127-9a58-49ac-bb94-5aadb3e84cfe">

2. TLB의 구성요소
<img width="471" alt="스크린샷 2024-08-12 오후 5 30 30" src="https://github.com/user-attachments/assets/8cfebc89-9918-4ce4-8503-0b7c64e7a202">

3. 메모리 관리 장치(MMU, Memory Manangement Unit)
- CPU가 주기억장치에 접근하는 것을 관리하는 컴퓨터 하드웨어 부품
- 가상 메모리 주소를 실제 메모리 주소로 변환하며, 메모리 보호, 캐시 관리, 버스 중재 등의 역할
- 메모리 영역을 구분하고 읽기/쓰기 차단 역할 수행
- 별도의 칩으로 사용되는 경우가 있지만, 일반적으로 CPU의 일부분으로 구성됨
- 가상 메모리 주소와 실제 메모리 주소 사이의 변환을 위해 MMU는 변환 참조 버퍼(TLB, Translation Look-aside Buffer)라는 고속의 보조기억장치를 참조
<img width="343" alt="스크린샷 2024-08-12 오후 5 32 23" src="https://github.com/user-attachments/assets/8bc29b84-9f7b-4138-b1ac-935473fb6389">

4. MMU의 주요 역할
<img width="510" alt="스크린샷 2024-08-12 오후 5 34 21" src="https://github.com/user-attachments/assets/17daec66-ff29-407d-9bf7-feea34df8c92">


https://youtu.be/MC_GBOf5KI8?si=G6N318aXY3OL1Y_C
https://youtu.be/_9YQReuhAv8?si=RxGllT5v4KrYc34d

</details>



<details>
<summary>프리패치 추가 설명</summary><hr>

https://answers.microsoft.com/ko-kr/windows/forum/all/prefetch%ec%97%90-%eb%8c%80%ed%95%b4/e8bc5175-9fe1-4946-a95e-de72cfda3786

</details>


<details>
<summary>DIMM</summary><hr>

Dual in-line memory module

https://youtu.be/SjkJc8cVF_c?si=5js8fNZr_MvGJUUc

</details>




















52 changes: 52 additions & 0 deletions understanding-software-dynamics/ch4/임수현_4장.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
# Understanding Software Dynamics Ch.04

## 책 내용 정리
많은 양의 데이터를 처리할 때 캐시를 잘 사용하는 조직은 그렇지 않은 조직에 비해 성능을 비약적으로 향상할 수 있다. 동시에 함께 접근되는 데이터는 메모리에 함께 보관하는 것도 도움이 된다.
이것은 행렬뿐만 아니라 해시 테이블, 비-트리(B-tree), 연결 리스트 노드(Linked-list nodes), 네트워크 메시지와 수많은 자료구조에도 적용된다.

## 새로 배운 내용

<details>
<summary>배정밀도</summary><hr>

단정밀도(single precision)는 `32비트` 를 사용하는 것을 이야기하며, 배정밀도(double precision)는 `64비트`를 사용하는 것을 이야기한다.

https://hellvelopment.tistory.com/66

</details>



<details>
<summary>memory access pattern</summary><hr>

<img width="554" alt="스크린샷 2024-08-12 오후 6 00 53" src="https://github.com/user-attachments/assets/de01ed47-4587-457d-91a8-d8c4be4e6bd7">

<img width="583" alt="스크린샷 2024-08-12 오후 6 01 41" src="https://github.com/user-attachments/assets/01d847c8-bef0-4f6c-b1f3-6ac70effd958">

<img width="581" alt="스크린샷 2024-08-12 오후 6 01 56" src="https://github.com/user-attachments/assets/9eabdb89-8b34-454b-a5fb-2282b9489237">

<img width="582" alt="스크린샷 2024-08-12 오후 6 02 09" src="https://github.com/user-attachments/assets/3b9509bf-de51-4983-920b-b32d5ad4b4c7">


https://youtu.be/ualcIR5pmsg?si=GrdsEzLYgsemaLUM

</details>

<details>
<summary>p113 예시 설명</summary><hr>

> 예를 들어 8바이트 포인터와 8바이트 데이터가 있는 노드로 구성된 16바이트 연결 리스트 대신 하나의 포인터와 4개 이상의 데이터가 들어있는 64바이트의 노드로 구성된 연결 리스트를 사용하면 캐시 성능을 4배나 향상할 수 있다.


기존 연결 리스트 구조에서 각 노드는 8바이트의 포인터(다음 노드를 가리키는 포인터)와 8바이트의 데이터로 구성되어 있다. 따라서 한 노드의 크기는 16바이트이며 해당 16바이트 노드를 사용할 경우, 캐시는 연속적인 데이터를 가져오지 못하므로 노드를 따라가면서 메모리 접근을 여러 번 해야 한다.

반면, 각 노드가 64바이트의 크기를 가지며, 한 개의 포인터와 4개 이상의 데이터로 구성되도록 변경된 연결 리스트 구조는 더 많은 데이터를 하나의 노드에 포함시킨다. 따라서 64바이트 노드를 사용하면 캐시는 연속된 데이터(하나의 큰 노드)를 한 번에 가져올 수 있어, 메모리 접근 횟수가 줄어들고 속도가 빨라진다.

즉, 64바이트 노드는 16바이트 노드의 4배 크기이므로, 캐시 블록 하나에 4개의 16바이트 노드에 해당하는 데이터를 한 번에 담을 수 있다. 따라서 이론적으로 캐시 효율이 4배까지 개선될 수 있다.

</details>