-
The Art of Multiprocessor Programming - 개요
제목의 서적을 읽고 멀티스레드 프로그래밍을 하는 데 고려하거나 구현해야할 요소들을 알아보자. 우선 책은 아래와 같이 Principles과 Practices 두 파트로 나뉘어져 있다. 1. Introduction [Principles] 2. Mutual Exclusion 3. Concurrent Objects 4. Foundations of shared memory 5. The relative power of primitive synchronization operations 6. Universality of consensus [Practices] 7. Spin locks and contention 8. Monitors and blocking synchronization 9. Linked lists: The..
-
[번역] part2 : GPU memory architecture and the Command Processor (WIP)
Not so fast 이전 파트에서 3D 렌더링 커맨드가 GPU로 전달되기 전 PC에서 거치게 되는 여러 스테이지에 대해 설명했습니다. 이 설명은 짧은 버전입니다. command processor의 이름을 들먹이며 커맨드 버퍼와 관련해 무엇을 어떻게 하는지에 대해 언급하며 끝냈었는데 사실은 거짓말입니다. 우리는 사실 command processor를 처음 만나는 것이고 command buffer는 메모리를 통한다는 것을 알아야 합니다(PCI Express를 통해 접근되는 시스템 메모리 혹은 로컬 비디오 메모리). 우리는 순서대로 파이프라인을 살펴볼것이기 때문에 command processor 전에 메모리에 대해 먼저 이야기할 것입니다. The memory subsystem GPU는 통상적인 memory ..
-
[번역] part1 : Introduction; the Software stack (WIP1)
2011년의 그래픽스 하드웨어와 소프트웨어에 대한 일반적인 사항들을 정리한 글입니다. 하드웨어의 세세한 사항들에 대해서 다루기 보다는 현 시대의 그래픽 스택이 무엇을 하는지에 대한 기능적인 설명들을 다뤘습니다. 윈도우에서 D3D9/10/11을 돌릴 수 있는 DX11 급의 하드웨어에 대해 이야기합니다. The application 우리가 작성하는 코드입니다. The API runtime API를 통해 리소스 생성 / State 세팅 / 드로우 콜을 보낼 수 있습니다. 런타임 API는 당신의 App이 세팅한 현재 State를 기록하고 파라미터를 검증하고 에러/일관성 체크를 하고 user-visible 리소스를 관리하고 쉐이더 코드와 쉐이더 연결성을 검증하고(D3D API는 하고 OpenGL은 드라이버 레벨에..
-
Niagara VectorVM (WIP)
개요 VectorVM은 Niagara system의 파티클 시뮬레이션(CPU / GPU Sim) 중 CPU Sim에 사용되는 쉐이더 언어이다. VectorVM의 번역 과정(NiagaraScript → HLSL → VectorVM)과 쉐이더 컴파일 과정을 살펴보자.
-
[번역] Life of a Triangle - NVIDIA's logical pipeline (WIP)
아래 원글의 번역을 통해 GPU architecture를 간단히 살펴보고 병렬 실행되는 GPU(Fermi 이후부터)에서 삼각형이 렌더링되기 위해 거치는 Logical Pipeline을 살펴보겠습니다. 원글 : https://developer.nvidia.com/content/life-triangle-nvidias-logical-pipeline Fermi 아키텍쳐가 발매된 이후, 그 근간의 기본 그래픽 아키텍쳐가 재정립되었습니다. Fermi는 완전히 scalable한 첫번째 Nvidia GPU 이고 그 코어 아키텍쳐는 Maxwell 뿐만 아니라 Kepler에서도 확인할 수 있습니다. 다음 아티클과 특히 "compressed pipeline knowledge" 이미지는 GPU 아키텍쳐에 관한 GTC 튜토리얼..
-
[ClothSimulation] 스프링과 댐퍼
1. 스프링과 댐퍼에 대해 알아보자. 아래 내용은 데이비드 버그 아저씨의 'Physics for Game Developers'의 내용을 정리한 것이다. 2. 스프링 스프링 : 두 물체 사이에서 정반대 방향으로 동일한 크기의 힘을 가하는 구조 요소이다. 스프링의 탄성력 : Hooke's law을 따르고 이는 스프링의 현재 길이와 원래 길이의 비율 / 스프링 상수의 함수입니다. 스프링의 압축 및 늘어나는 정도는 물체에 가해지는 힘에 비례한다. 스프링 상수는 스프링의 변형과 스프링에서 발생하는 힘 사이의 관계를 나타낸다. Hooke's law에 대해 알아보자. 단위는 미터법을 따른다. F = K(L - r) F : 탄성력 ( 1N = 1kg X m/s^2) K : 스프링 상수 (kg/s^2) L : 스프링의 ..
-
pragma란
1. pragma란 사전적 의미로 만능이란 의미를 가진다. VS C++에서 컴파일러에게 그 뒤에 오는 내용에 따라 어떤 일을 하라는 전처리 명령어로 사용된다. 2. 종류 (1) #pragma once 한번 컴파일 되면 더이상 컴파일 하지 않는다. (2) #pragma comment(lib, "ws2_32") obj 파일에 커멘트를 남기라는 명령어. 이 명령어는 linker가 그 obj파일을 처리할 때 읽힌다. 특히, 위와 같은 경우는 해당 라이브러리를 library dependencies list에 추가하라는 뜻이다. ( 이는 프로젝트 속성 창 -> Linker -> Input -> Additional Dependencies 에서 추가하는 것과 같은 기능을 한다.) (3) #pragma pack(n) n..
-
컴퓨터 메모리 종류와 메모리 영역
1. 메모리의 종류 - 하드디스크 - 램 (메인 메모리) - 레지스터 - 캐쉬 메모리의 이동은 하드디스크 -> RAM -> 캐쉬(L1, L2) -> 레지스터 순으로 이뤄진다. 오른쪽으로 갈수록 속도는 빨라지지만 용량은 작아진다. 이런 식으로 구조가 만들어진 이유는 CPU로 필요한 데이터를 빠르게 전달하기 위함이다. 이 전달 속도를 위해서 메모리의 공간적 지역성, 교체 알고리즘 등 고려할 것들이 있으니 이 내용은 OS 포스팅에서 따로 정리하도록 하자. 각 메모리들의 역할을 정리해보자. - 캐쉬 : 자주 사용되는 데이터를 임시로 저장해두는 장소. L1, L2캐시 이외에 RAM 또한 캐시로 볼 수 있다. - 레지스터 : CPU 안에 존재하는 작지만 엄청 빠른 속도로 동작하는 초고속 경량 메모리 2. 메모리 영..