일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 프레임워크
- multi-core
- material
- 유니크포인터
- 스마트포인터
- random access
- 게임공학과
- 멀티코어
- stl
- Design Pattern
- 메모리관리
- thread
- 멀티코어 프로그래밍
- Atomic
- 디자인패턴
- 옵저버
- EFFECTIVE C++
- sequential
- 멀티쓰레드
- 쓰레드
- c++
- Multithread
- vector
- observer pattern
- C
- Unreal
- MultiCore
- 한국산업기술대학교
- 옵저버 패턴
- 복사생성자
- Today
- Total
목록멀티코어 프로그래밍 (4)
태크놀로지
메모리 일관성 지금까지의 프로그램은 공유메모리에 대한 접근(쓰기/읽기)는 Atomic 하다고 가정하고 있습니다. 하지만 PC에서의 메모리 접근은 Atomic이 아닙니다. 메모리에 쓴 순서대로 메모리가 수정되지 않습니다. 매우 낮은 확률로 atomic하지 않게 나옵니다. -> 정확히는 메모리에 쓴 순서대로 메모리의 내용이 관측되지 않음. ※ Atomic : 메모리의 접근이 순간적으로 행해지며, 서로 겹쳐지지 않고(메모리상에 읽거나 쓸때 서로 겹쳐지지 않음) 정해진 순서로 발생하며 모든 쓰레드에서 같은 순를 보인다. 피터슨 알고리즘 / 빵집 알고리즘의 문제점 컴파일러는 문제가 없다. (volatile과 디스어셈블리코드를 살펴봤을때 문제없음) 쓰고 읽는데, 옆에 쓰레드가 쓰기전에 값을 읽음 정말 Atomic하..
실제 멀티쓰레드 프로그래밍은 어디서 사용되고 있는가? 과학기술계산 멀티미디어 동영상 인코딩, 디코딩 멀티쓰레드 구현이 매우 쉬움 (독립된 키프레임) 게임 멀티쓰레드 프로그래밍의 종류 Heterogeneous multithread 쓰레드마다 하는 역할이 다르다. (Renderer 쓰레드, AI 쓰레드, 오디오 쓰레드 등등) 각 쓰레드마다 다른 파트를 실행 쓰레드간의 Load Balancing이 힘들다. (Renderer 쓰레드가 하는일을 Game 쓰레드한테 할당못함) 병렬성이 제한된다. Homogeneous multithread 쓰레드가 같은역할을 한다. ( worker 쓰레드 같은경우 노는 쓰레드가 없다.) Data / Event driven 프로그래밍 ( ※Event란 이미 발생한 현상) 모든 쓰레드는..
멀티쓰레드 프로그래밍으로 덧셈프로그램 만들기:1-taek-gameprogramming.tistory.com/27?category=889762 멀티쓰레드 프로그래밍으로 덧셈프로그램 만들기 한국산업기술대학교 게임공학부 정내훈 교수님 멀티코어 2주차 강의 멀티쓰레드 프로그래밍에서 중요한사항 올바른 결과가 나와야한다. 싱글 쓰레드보다 성능향상이 커야한다. 실습1 - 여러 쓰 1-taek-gameprogramming.tistory.com 이전 포스팅에서 로컬변수를 사용하여 멀티쓰레드 프로그래밍으로 덧셈프로그램을 만들었었다. 로컬 변수를 사용하지 않는 다른 방법이 있을까? -> 각 쓰레드마다 변수들을 만들어서 쓰레드 종료 후 값들을 더해보자. 방법에 대한 문제발생 쓰레드가 종료하는가? Cache Trashing I..
한국산업기술대학교 게임공학부 정내훈 교수님 멀티코어 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