일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 멀티코어 프로그래밍
- 복사생성자
- 한국산업기술대학교
- 게임공학과
- 프레임워크
- stl
- Design Pattern
- 옵저버
- 디자인패턴
- multi-core
- Atomic
- 유니크포인터
- random access
- Multithread
- sequential
- Unreal
- vector
- thread
- 메모리관리
- 멀티쓰레드
- C
- c++
- 멀티코어
- material
- 쓰레드
- observer pattern
- 옵저버 패턴
- 스마트포인터
- EFFECTIVE C++
- MultiCore
- Today
- Total
목록분류 전체보기 (57)
태크놀로지
다음의 멀티쓰레드 프로그램에 어떠한 문제점이 있을까? bool data_ready = false; int g_data; void Consumer() { while (data_ready == false); int my_data = g_data; cout
옵저버 패턴의 단점 옵저버 패턴을 구현시 알림이 있을 때마다 동적할당을 하거나 큐잉하기 때문에 실제로 느릴 수 있습니다. 하지만 인터페이스를 통해 동기적으로 메서드를 간접호출할뿐 메시지용 객체를 할당하지도 않고, 큐잉도 하지 않습니다. 주의해야할점은 동기적이라는 점입니다. 대상이 관찰자 메서드를 직접 호출하기 때문에 모든 관찰자가 알림 메서드를 반환하기 전에는 다음 작업을 진행할 수 없습니다. 관찰자 중 하나라도 느리면 대상이 블록될 수 도있기 때문입니다. 이벤트에 동기적으로 반응한다면 최대한 빨리 작업을 끝내고 제어권을 넘겨주어 프로그램이 멈추지 않도록 해야합니다. ( 멀티쓰레드 사용시 이벤트 큐를 이용해 비동기적으로 상호작용하는것을 추천 ) 동적할당이 많이 일어날까? 게임에선 옵저버 개수가 정적인것이..
옵저버 패턴이란? 객체 사이에 일 대 다의 의존 관계를 정의해두어, 어떤 객체의 상태가 변할때 그 객체에 의존성을 가진 다른 객체들의 그 변화를 통지받고 자동으로 업데이트될 수 있게 만듭니다. 즉 한명의 상태가 변화될때 이로 인해서 변경되어야 할 다른 이벤트들을 수행해야할때 사용됩니다. 업적시스템을 예로들어 구현해보겠습니다. 작동원리 Observer 인터페이스 class Entity; class Observer { public: virtual void OnNotify(int _event, const Entity& data) = 0; public: Observer() = default; virtual ~Observer() = default; }; Observer는 Subject에서 발생하는 이벤트를 기다리..
실제 멀티쓰레드 프로그래밍은 어디서 사용되고 있는가? 과학기술계산 멀티미디어 동영상 인코딩, 디코딩 멀티쓰레드 구현이 매우 쉬움 (독립된 키프레임) 게임 멀티쓰레드 프로그래밍의 종류 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..
커맨드 패턴이란? 요청 자체를 캡슐화하는 것입니다. 이를 통해 요청이 서로 다른 사용자를 매개변수로 만들고, 요청을 대기시키거나 로깅하여, 되돌릴 수 있는 연산을 지원합니다. 쉬운말로 누가 무엇을 해야할지에 대한 명령을 객체로 만들어 관리한다는 말입니다. 이 패턴은 예시의 사진을 보고 바로 구현하며 이해해봅시다. 실습 AI는 로직에 따라 대상에게 명령들을 내리면, 명령들이 큐에 차례대로 싸여 명령이 내려진 순서대로 대상이 명령을 수행하게 됩니다. 실습코드 Command 인터페이스 class GameObject; class Command abstract { protected: GameObject* m_Subject; int m_Message; public: v..
컴포넌트 패턴이란? 한 개체가 여러 분야를 서로 커플링 없이 다룰 수 있게 한다. 라고 책에 적혀있다. 내가 이해한 방식으로 쉽게 풀어서 말해보자면 탈부착이 가능한 클래스라고 설명하고 싶다. 유니티를 사용한 분이 계신다면 컴포넌트에 개념을 더 쉽게 이해할수 있을거다. 컴포넌트 패턴을 왜 사용하는가? 게임을 개발하다보면 물리코드 렌더링코드, AI코드 등등을 작성하게되는데, 만약 한 클래스안에 모든 코드들이 섞여있다면 정말 끔찍할것이다. 또한 협업에 있어서 개발속도가 늦춰지고 디버깅에 많은 어려움을 겪게된다. 이러한 상황을 피하기 위해 분야별로 담당하는 파트를 나눠 설계해야 할 필요가 있다. 컴포넌트 패턴의 특성1 - 분야 나누기 게임 캐릭터는 조작을 담당하는 파트, 애니메이션을 담당하는 상태머신 컨트롤러,..
한국산업기술대학교 게임공학부 정내훈 교수님 멀티코어 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