2023/12/14 6
-
컴퓨터 쉐이딩 우선, 컴퓨터 쉐이딩을 알기 위해서는 스레드와 멀티프로세스를 이해해야한다. 스레드는 작업 한개를 처리하는 단위이고, 멀티프로세스는 멀티스레드 를 사용해서 동작하는 프로세스를 여러개 돌린다고 이해하면 된다. DriectX에서 스레드와 뮤텍스 라이브러리로 다중 스레드 프로그래밍을 사용할 수 있다. 쓰레드와 뮤텍스 라이브러리로 다중쓰레드를 사용할 수 있다. #include #include #include DirectXCollision은, 비효율적이지만, 다중처리방식을 사용하면 큰 부하를 일으키지 않고 사용할 수 있다. 위와같은 멀티프로세스 방식의 코딩을 사용하면, 비동기 방식의 데이터처리 시 더 효율적으로 사용할 수 있다. 예를들어 플레이어가 아이템을 주워서 인벤토리에 넣었다고 가정해보자. 그렇..
-
컴퓨터 쉐이더 라고 하는 방식이다. 이름이 조금구리기는 한데, 컴퓨팅 연산을 그래픽카드에서 진행하는 쉐이더를 의미한다. 데이터를 전부 Shader에 전달하고, 쉐이더에서 데이터연산을 처리하는 과정을 이야기한다. Buffer형태로 데이터를 전달하고, DeviceContext->Map형태로 데이터가 제공된다. //ComputePicking.hlsl cbuffer RayBuffer : register(b0) { float3 pos; uint triangleSize; float3 dir; } struct InputDesc { float3 v0, v1, v2; }; StructuredBuffer input : register(t0); struct OutputDesc { int picked; float distan..
-
Map과 Unmap은 동적으로 데이터를 매핑하여 CPU에서 GPU메모리에 직접 엑세스 할 수 있게 해준다. 즉, CPU에서 GPU메모리의 포인터를 관리한다고 생각하면 이해하기가 편할것이다. 그렇기 때문에, 큰 데이터를 업데이트할 때 효과적이다. 동적으로 메모리를 매핑하고 CPU에서 데이터를 직접 변경한 뒤, 다시 언매핑하여 GPU로 복사해줄 수 있다. 장점 대량의 데이터를 효율적으로 업데이트 할 수있다. GPU와 CPU간의 직접적인 메모리 엑세스가 가능함으로, 특별한 복사대입과정이 필요가 없다. 단점 코드가 UndateSubresource에 비해 더 복잡해진다. 동기화와 메모리 일관성이 해쳐지면 문제가 발생할 수 있다. 주의점! MAP을 선언하고, 데이터를 수정하고 난뒤, Unmap을 해야 데이터가 정상..
-
-
-
스레드(Therad) 프로세스 내에서 실행되는 실행 단위를 의미한다. 각 프로세스는 최소한 하나의 스레드, 메인스레드를 가지고있다. 스레드는 각자 독립적인 레지스터 집합을 가지지만, 같은 프로세스 내의 스레드들은 같은 메모리공간을 공유한다. 그리하여, 같은 프로세스 내의 스레드간 통신이 간단해지며, 데이터 공유가 가능해진다. 멀티스레딩(Multithreading) 하나의 프로세스 내에서 여러 스레드가 동시에 실행되는것 을 의미한다. 이로써 프로세스는 여러 작업을 동시에 수행할 수 있게 된다. 멀티스레딩은 병렬성을 활용하여, 작업을 효율적으로 처리할 수 있다. 여러 스레드가 동시에 작업을 처리함으로 전체 시스템의 응답성과 성능을 향상시킬 수 있다. 멀티스레드 = 여러작업을 동시에 수행하는것. 스레드 = 이..