일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 스마트포인터
- Multithread
- Unreal
- material
- 유니크포인터
- Atomic
- 메모리관리
- MultiCore
- random access
- 게임공학과
- 멀티코어 프로그래밍
- 복사생성자
- 옵저버 패턴
- thread
- 멀티쓰레드
- 쓰레드
- sequential
- vector
- 옵저버
- c++
- multi-core
- observer pattern
- 프레임워크
- 멀티코어
- EFFECTIVE C++
- stl
- Design Pattern
- 디자인패턴
- 한국산업기술대학교
- C
- Today
- Total
목록멀티코어 (8)
태크놀로지
논블로킹 자료구조 Linked List 뮤텍스를 사용한 자료구조부터해서 논블로킹 자료구조까지 여러 단계 변화를 하며 각각에 대해서 성능향상을 비교해본다. 목표자료구조 - Set 아이템의 중복을 허용하지 않음 검색의 효율성을 위해 아이템은 정렬되어 저장됨 삽입 삭제의 효율성을 위해 링크드리스트로 구현된다. 값을 저장하고 있는 노드 뿐만 아니라, 무한대값을 갖고있는 보조노드를 두어 검색할때마다 널체크를 하지 않아도 된다. 구현할 메서드 Add Remove Contains(집합에 x가 있다면 true 반환) 실습 - 성긴동기화 성긴동기화 - Lock 하나로 동기화 객체 전체를 감싸는 경우 리스트는 하나의 잠금을 갖고 있으며 모든 메서드호출은 이 잠금을 통해 Critical Section으로 진행된다. 모든 메..
이전시간 리뷰 현실의 공유 메모리는 Atomic 하지 않다. 하지만 프로그래밍은 Atomic Memory를 가정해야한다. 성능 향상을 위해 멀티쓰레드 프로그래밍을 해야한다. -> Data Race 발생 Data Race를 최소화 해야한다. -> Data Race는 모든 오동작의 근원 어쩔 수 없이 남은 Data Race를 Lock 없이 해결해야한다. -> Data race를 모두 없앨 순 없고, lock으로 해결하는 것은 성능 패널티가 크다. Data Race는 공유 객체 때문에 발생한다. -> 객체 int, float, struct, class, container ,,, 따라서 논블로킹 멀티쓰레드 객체가 필요하다. Q. 기존의 싱글쓰레드 자료구조도 Atomic Memory를 사용해서 멀티쓰레드 자료구조..
메모리 일관성 지금까지의 프로그램은 공유메모리에 대한 접근(쓰기/읽기)는 Atomic 하다고 가정하고 있습니다. 하지만 PC에서의 메모리 접근은 Atomic이 아닙니다. 메모리에 쓴 순서대로 메모리가 수정되지 않습니다. 매우 낮은 확률로 atomic하지 않게 나옵니다. -> 정확히는 메모리에 쓴 순서대로 메모리의 내용이 관측되지 않음. ※ Atomic : 메모리의 접근이 순간적으로 행해지며, 서로 겹쳐지지 않고(메모리상에 읽거나 쓸때 서로 겹쳐지지 않음) 정해진 순서로 발생하며 모든 쓰레드에서 같은 순를 보인다. 피터슨 알고리즘 / 빵집 알고리즘의 문제점 컴파일러는 문제가 없다. (volatile과 디스어셈블리코드를 살펴봤을때 문제없음) 쓰고 읽는데, 옆에 쓰레드가 쓰기전에 값을 읽음 정말 Atomic하..
다음의 멀티쓰레드 프로그램에 어떠한 문제점이 있을까? bool data_ready = false; int g_data; void Consumer() { while (data_ready == false); int my_data = g_data; cout
실제 멀티쓰레드 프로그래밍은 어디서 사용되고 있는가? 과학기술계산 멀티미디어 동영상 인코딩, 디코딩 멀티쓰레드 구현이 매우 쉬움 (독립된 키프레임) 게임 멀티쓰레드 프로그래밍의 종류 Heterogeneous multithread 쓰레드마다 하는 역할이 다르다. (Renderer 쓰레드, AI 쓰레드, 오디오 쓰레드 등등) 각 쓰레드마다 다른 파트를 실행 쓰레드간의 Load Balancing이 힘들다. (Renderer 쓰레드가 하는일을 Game 쓰레드한테 할당못함) 병렬성이 제한된다. Homogeneous multithread 쓰레드가 같은역할을 한다. ( worker 쓰레드 같은경우 노는 쓰레드가 없다.) Data / Event driven 프로그래밍 ( ※Event란 이미 발생한 현상) 모든 쓰레드는..
한국산업기술대학교 게임공학부 정내훈 교수님 멀티코어 2주차 강의 멀티쓰레드 프로그래밍에서 중요한사항 올바른 결과가 나와야한다. 싱글 쓰레드보다 성능향상이 커야한다. 실습1 - 여러 쓰레드 생성 #include #include #include using namespace std; int sum = 0; void f() { for (int i = 0; i < 2500'0000; ++i) sum += 2; } int main() { vector threads; for (int i = 0; i < 2; ++i) threads.emplace_back(f); for (auto& t : threads) t.join(); cout
한국산업기술대학교 게임공학부 정내훈 교수님 멀티코어 1주차 강의 멀티 쓰레드 프로그래밍 멀티 쓰레드의 사용목적 멀티코어 CPU(or 멀티 CPU)에서의 프로그램 성능향상 (O) 성능향상이 없다면 의미가 없다. 분산 컴퓨터에서의 프로그램 성능향상 (X) 멀티쓰레드는 하나의 프로세스에서 동작하기 때문에 분산 컴퓨터에서 성능향상을 위해선 멀티프로세스를 통해 싱글코어(CPU) 컴퓨터 환경에서의 프로그램 성능향상 (X) 오히려 더 느려짐 프로그램을 모듈화해서 알아보기 쉽게 (X) 디버깅이 매우 어려움 멀티코어 프로그래밍 => 병렬컴퓨터에서의 프로그램 성능향상 멀티코어 프로세서 Intel과 ARM에서 멀티 코어 프로세서를 만드는 이유 CPU의 성능을 올려야 한다. 클럭 속도를 높일 수 없다. -> 발열문제 클럭 속..
한국산업기술대학교 게임공학부 정내훈 교수님 멀티코어 1주차 강의 교재소개 모리스 헐리히, 니르 샤비트 "멀티프로세서 프로그래밍" 한빛미디어, 2009 장점: 멀티프로세서 프로그래밍 기초를 전부 언밀하게 다룸 단점: 알고리즘 위주로 실제 구현과는 차이가 있음 기타: 치명적인 번역오류, 자바를 사용한 구현 좀더 쉬운책 -> 프로그래머가 몰랐던 멀티코어 CPU 이야기 강의의 흐름 1.멀티쓰레드 프로그래밍의 필요성 / 작성시 문제점 2. 논블록킹 알고리즘의 필요성 3. 논블로킹 알고리즘 작성 테크닉 및 실습 4. 정리 및 상용라이브러리 소개 왜 멀티코어 프로그래밍을 하냐? 요즘 멀티코어를 사용하지 않는곳이 없다. 컴퓨터의 종류 직렬 컴퓨터 (Serial computer = Single core computer)..