일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 한국산업기술대학교
- MultiCore
- 옵저버
- random access
- stl
- material
- EFFECTIVE C++
- 멀티코어
- multi-core
- vector
- 디자인패턴
- observer pattern
- 프레임워크
- 복사생성자
- c++
- 멀티코어 프로그래밍
- 쓰레드
- 옵저버 패턴
- sequential
- 유니크포인터
- thread
- 멀티쓰레드
- C
- Atomic
- Multithread
- 스마트포인터
- Design Pattern
- 메모리관리
- 게임공학과
- Unreal
- Today
- Total
목록Atomic (3)
태크놀로지
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/b3mlyX/btqMvfC6rtG/Wz95bXPqXiNfDKXVNhCkPK/img.png)
이전시간 리뷰 현실의 공유 메모리는 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를 사용해서 멀티쓰레드 자료구조..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/bEmQI1/btqJiix1hGT/M85hzPHaLrzTcQDKeBfqlK/img.png)
메모리 일관성 지금까지의 프로그램은 공유메모리에 대한 접근(쓰기/읽기)는 Atomic 하다고 가정하고 있습니다. 하지만 PC에서의 메모리 접근은 Atomic이 아닙니다. 메모리에 쓴 순서대로 메모리가 수정되지 않습니다. 매우 낮은 확률로 atomic하지 않게 나옵니다. -> 정확히는 메모리에 쓴 순서대로 메모리의 내용이 관측되지 않음. ※ Atomic : 메모리의 접근이 순간적으로 행해지며, 서로 겹쳐지지 않고(메모리상에 읽거나 쓸때 서로 겹쳐지지 않음) 정해진 순서로 발생하며 모든 쓰레드에서 같은 순를 보인다. 피터슨 알고리즘 / 빵집 알고리즘의 문제점 컴파일러는 문제가 없다. (volatile과 디스어셈블리코드를 살펴봤을때 문제없음) 쓰고 읽는데, 옆에 쓰레드가 쓰기전에 값을 읽음 정말 Atomic하..
한국산업기술대학교 게임공학부 정내훈 교수님 멀티코어 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