Compiler Intrinsic을 사용해서 SIMD코드를 작성할때 주의할 점

어셈블리어로 SIMD를 다뤄보지 않고 Compiler Intrinsic으로 SIMD를 접하면 성능이 전혀 향상되지 않는 코드를 짜기 쉽다. 기본적으로 simd명령어로 존재하지 않는 기능은 1:1 치환이 불가능하다. 예를 들어 다음과 같은 코드는 simd명령으로 치환이 불가능하다. a.m128_f32[0] = b.m128_f32[3]; 3번째 성분을 0번째 성분으로 카피하는 명령어 같은건 존재하지 않으므로 범용 명령어의 mov기능만으로 구현된다. a.m128_f32[0] = b.m128_f32[0] + c.m128_f32[0] 이런 코드의 경우 … More Compiler Intrinsic을 사용해서 SIMD코드를 작성할때 주의할 점

WinRT, C++/CX , WRL

먼저 WinRT에 대해서 얘기해보자. Windows 8시절부터 Store App을 개발하던 프로그래머가 아니라면 좀 생소할 수도 있는데 Windows Runtime의 약자이고 Store App을 위한 새로운 Windows API이다. 공식적으로 소비자 대상으론 WinRT란 표현은 거의 쓰지 않는다. 하지만 API이름이 Windows Runtime이고 실제 개발을 하다보면 WinRT란 이름이 엄청나게 많이 나온다. Windows 8.x가 망한 탓에 Windows 10에선 WinRT란 표현을 쓰고 싶어하지 않는것 … More WinRT, C++/CX , WRL

SSE를 이용한 4샘플 무분기 치환 for SW Occlusion Culling

요 근래에 Voxel 오브젝트 컬링을 위해 SW Occlusion Culling을 사용한다고 포스팅 했었다. SW Occlusion Culling이라봐야 별거 없다. 잠깐 그 내용을 상기해보면… CPU측에서 사용할 수 있는 Z-Buffer(그냥 32bits float타입의 메모리 버퍼)를 잡는다. Voxel오브젝트의 Min박스의 z값을 그린다. z값이 기존 값보다 작거나 같을 경우만 덮어쓴다. 이후에 테스트할 다른 Voxel오브젝트의 Max 박스의 z값을 z-buffer의 값과 비교한다. 기존값보다 z값이 작으면 … More SSE를 이용한 4샘플 무분기 치환 for SW Occlusion Culling

Visual Studio 2015 Graphics Debugger 좋음.

Visual Studio 2015 Graphics Debugger 짱이다. 프레임 구성과정이 다 추척된다. 예를 들어 Draw()함수를 클릭하면 해당 함수에서 사용되는 오브젝트 리스트-텍스쳐,쉐이더,레스터스테이트,스왑체인 다 목록에 뜬다. 얘네들을 클릭하면 텍스쳐의 경우 텍스쳐 이미지를 보여주고 쉐이더를 클릭하면 쉐이더 어세블리 코드와 소스코드 보여주고 여기서 사용하지 않는 변수들 다 분석해줌. 일단 스샷 몇 장 올림. 나중에 상세하게 리뷰를 올릴 예정.