DirectX 12 공부하면서 다뤘던 내용들이라 헷갈렸던 내용만 다시 정리한다.

 

4.4 사원수

https://lemonyun.tistory.com/63

 

22. 사원수 (quaternion)

사원수를 쓰는 이유 x y z 축을 순서에 따라 회전시키게 되면 축이 겹치게 되는 현상(gimbal lock)이 생기기 때문 복소수와 사원수 사원수 곱셈은 교환법칙을 만족하지 않지만 결합법칙은 만족한다.

lemonyun.tistory.com

 

4.7 하드웨어 가속 SIMD

비주얼 스튜디오 컴파일러는 __m128이라는 데이터 타입을 지원한다.

__m128 타입 변수는 일반적으로 RAM에 저장된다. 하지만 연산에 사용될 때는 CPU의 SSE 레지스터에서 처리된다.

실제로 지역 변수나 함수 인자를 __m128 타입으로 선언하면 컴파일러가 이 값을 프로그램 스택에 저장하기보다는 바로 SSE 레지스터에 저장하는 경우가 많다.

 

4.7.2.1 __m128 변수의 정렬

__m128 타입의 변수가 RAM에 저장될 때 프로그래머는 이 변수가 16바이트 메모리 주소 경계에 위치하게 보장해야 된다.

__m128 변수를 한 개라도 포함하고 있는 구조체나 클래스를 자동 혹은 전역 변수로 선언하면 컴파일러가 알아서 정렬한다. 하지만 동적으로 할당된 메모리에 있는 자료구조의 정렬에 대해서는 프로그래머가 책임져야 한다.

 

4.7.3 SSE 내장 명령어로 코드 짜기

컴파일러가 지원하는 내장 명령어(외관이나 사용법은 일반적인 C 함수와 같지만 컴파일러가 알아서 인라인 어셈블리 코드로 바꿔주는 명령어)를 사용하여 SSE 연산을 할 수 있다.

 

4.8 난수 생성

4.8.1 선형 합동 생성기

ㄴ 처음 주어진 시드 값이 같으면 생성되는 숫자들은 정확히 똑같다.

 

4.8.2 메르센 트위스터

ㄴ 선형 합동 생성기의 여러 단점을 개선하기 위해 고안된 유사난수 생성 알고리즘,

SIMD 벡터 명령을 사용해 속도를 높인 SFMT(SIMD-oriented fast mersenne twister)를 많이 사용한다.

'읽은 책 > 게임 엔진 아키텍처' 카테고리의 다른 글

6. 리소스 시스템과 파일 시스템  (0) 2022.08.08
5. 엔진 지원 시스템  (0) 2022.08.06
3. 게임을 위한 소프트웨어 엔지니어링 기초  (0) 2022.08.03
2. 도구  (0) 2022.07.31
1. 소개  (0) 2022.07.30

+ Recent posts