3월, 2026의 게시물 표시

[Multi-Core & GPU Programming] Thread Programming

이미지
"Thread Programming" [Programming Model] · 병렬 프로그래밍은 여러 실행 주체가 아래와 같은 협력 방법을 통해 서로 협력해야 함 > Shared Memory Model · 모든 Thread가 같은 메모리 공간을 공유 → 어떤 Thread가 변수 x를 바꾸면, 다른 Thread도 해당 x를 확인 가능 > Message-Passing Model · 각 실행 주체가 자기 메모리를 따로 가지고 , 서로 메세지를 주고 받으면서 통신 → A Process가 B Process에게 "이 데이터 사용해"라고 메세지를 전송 [Memory] ※ Byte-Addressable : 1-Byte 단위로 직접 접근 가능한 메모리 (Ex. 0x1000, 0x1001, 0x1002, …) · HDD/SSD는 CPU처럼 1-Byte씩 직접 접근하지 못하고, 덩어리로 Read/Write (보조기억장치) (HDD : Block / SSD : Page, Block) · Flash Memory는 비휘발성 메모리로 SSD의 핵심 (읽기 : Page / 쓰기 : Page / 삭제 : Block) · DRAM(Dynamic RAM)은 휘발성 메모리로 싸고 용랑이 크며 Cache보다 느림 (Main Memory 역할) · SRAM(Static RAM)은 휘발성 메모리로 빠르고 비쌈 (Cache 또는 Register에 사용) · CPU는 DRAM 주소만 사용 → Cache는 해당 주소를 복사해서 저장      = Cache는 자기만의 주소는 없고 Main Memory 주소를 기반으로 자동 Mapping [Shared Memory Model] · 모든 Thread는 같은 Address Space를 공유 →  같은 주소에 접근하면 같은 값을 확인 = 어떤 Thread가 값을 쓰면, 다른 Thread도 해당 값을 확인 가능 △ 데이터 전달이 쉬움 & 같은 배열, 같은 객체를 같이 사용 가능 ▼ 동시에 건드리면 충돌 가능 ...