SlideShare ist ein Scribd-Unternehmen logo
1 von 60
Downloaden Sie, um offline zu lesen
http://ozlael.egloos.com


 Modern
  GPU
Optimize
    In
DirectX 9
              사실은 GPU 프로그래밍 가이드 문서 정리
       ATI Radeon HD 2000 programming guide
GPU Programming Guide GeForce 8 and 9 Series
Modern
    GPU
  Optimize
      In
  DirectX 9
현대의 H/W의 기준 이야기이므로
석기시대의 H/W에서는 역효과인 것도 존재
                          이미지 출처 : ndc11
Modern
     GPU
   Optimize
       In
   DirectX 9
열린글도 아니고 DX10도 아니고 DX11도 아니고...
병목 측정
API Overhead
Vertex Processing
Shaders
Texture
ETC
병목 측정

   병목을 찾기 위해서는 정확한 측정 환경 필요




                       이미지 출처 : http://www.hellodd.com
병목 측정
 DirectX retail runtime

                                 DirectX 최종 version

 어플리케이션 release versions

            디스플레이 컨트롤 패널 기본 값
            Anisotropic filtering, Anti aliasing, Vertical sync

                               평균 값으로 벤치마킹

   타겟 하드웨어에서 실행
   하드웨어마다 병목이 다름
병목 측정
 DirectX retail runtime

심지어 프레임 마다도 바뀜 최종 version
             DirectX

 어플리케이션 release versions

                   병목을 찾는다 =
            디스플레이 컨트롤 패널 기본 값
            Anisotropic filtering, Anti aliasing, Vertical sync
                   현 시나리오에서의벤치마킹 찾는다
                        평균 값으로
                               병목을
   타겟 하드웨어에서 실행
   하드웨어마다 병목이 다름
병목 측정

        간단한 테스트
병목 측정

CPU 스피드를 낮춰서 돌려본다.




                     속도가 저하되면 CPU limited
병목 측정

GPU 코어 클럭을 낮춰서 돌려본다.




                                 Vertex Shader
                                 Pixel Shader
                                 Rasterization

                       속도가 저하되면 Shader Limited
병목 측정

GPU 메모리 클럭을 낮춰서 돌려본다.




                                    Texture
                                    Frame buffer


                        속도가 저하되면 Bandwidth Limited
병목 측정

        PerfHUD




                  이미지 출처 : PurfHUD6 UserGuide
병목 측정

 Ctrl + T: 텍스쳐 유닛을 고립.
  2x2 사이즈로 바꾸어 텍스쳐 대역폭 제한인지 확인

 Ctrl + V: 버텍스 유닛을 고립.
  버텍스 트랜스폼, CPU 워크로드, 버스 트랜잭션 제한인지 확인

 Ctrl + N: GPU 제거
  모든 DP calls을 무시하여 로직 오버헤드인지 확인
병목 측정
타이밍 그래프




Driver Time (ms)
 CPU가 처리한 드라이버 코드 시간. Driver Sleeping 포함.
GPU Idle (ms)
 GPU가 idle였던 시간.
Driver Sleeping (ms)
 드라이버가 GPU를 위해 기다린 시간                이미지 출처 : PurfHUD6 UserGuide
병목 측정
                                   Q:
   CPU
                               드라이버가 GPU를
 command
                                기다리는 이유 ?
                   Push Buffer Queue

   command   command   command    command   command



                                               command



                                                      GPU
병목 측정
                                            A:
      CPU
                                         요게 꽉 차서
  command


                          Push Buffer Queue

     command      command     command    command   command



                                                      command



                                                             GPU

* Lock(): 은 Push Buffer가 비워지길 기다림
병목 측정




        이미지 출처 : http://www.patsnap.com/patents/view/US7773090.html
병목 측정




Driver Sleeping이 높다면            컬링 ,
                                       물리,
                                           로직,
 CPU의 할 일을 추가해도 FPS가 줄지 않을 것.                  AI


Driver Sleeping이 적당하지 않다면
 GPU 로드를 가볍게 하기 위해 장변의 복잡도를 줄여야 함.

GPU Idle이 존재한다면
 GPU로 데이터를 보내지 않고 있는 경우 발생.
병목 측정




Driver Time과 Frame Time이 같이 튄다면,
 드라이버가 텍스쳐 등을 CPU에서 GPU로 업로딩 중..

Driver Time은 정상이고 Frame Time만 튄다면,
 CPU가 빡신 일 하던가, 하드를 긁거나, OS가 딴짓 하거나..

Driver Time과 Frame Time의 차이가 크다면,
 CPU 의존적
병목 측정

        프레임 프로파일러
병목 측정

        PerfStudio




                     이미지 출처 : http://developer.amd.com/
병목 측정

        PIX




              이미지 출처 : http://mynameismjp.wordpress.com/
API Overhead 는 CPU 병목




                        이미지 출처 : http://blog.naver.com/seiclub
API Overhead

     배치를 줄이자
API Overhead



 상태 및 상수 변화를 줄일 것.

 필요치 않을 시 상태를 재 설정 하지 말 것.

 셰이더 상수를 개개로 많이 설정 하는 것 보다는 그룹으로 한번에.
API Overhead

텍스쳐 아틀라스
여러 텍스쳐를 하나로 묶어서 상태 변화 및 call 절약




            이미지 출처 : http://www.gamasutra.com/view/feature/2530/practical_texture_atlases.php
API Overhead

인스턴싱
여러 DP call을 하나의 DP call로 합침




                  이미지 출처 : http://http.developer.nvidia.com/GPUGems2, http://blog.csdn.net/
Vertex Processing



 Indexed Primitive 사용.

 버텍스 캐시 성능을 위해 ID3DXMesh Optimize() 사용.

 Attribute 병목 제거 (input assembly)




                                    이미지 출처 : http://blog.naver.com/seiclub
Vertex Processing

      Attribute 병목이 뭐야 ?
Vertex Processing




         Setup 시 각 버텍스의 float 데이터를
         버텍스 스트림과 오프셋 정보에 기반하여
         비디오 메모리의 적절한 위치에서 가져옴.


Setup : single data chunk에 assembled vertex를 설정
Vertex Processing

                               한 싸이클 내 처리
     Attribute                 양이 정해져 있음.

         Setup 시 각 버텍스의 float 데이터를
         버텍스 스트림과 오프셋 정보에 기반하여
         비디오 메모리의 적절한 위치에서 가져옴.


Setup : single data chunk에 assembled vertex를 설정
Vertex Processing

          Attribute 병목 탐지

 버텍스 선언의 사이즈 늘림 :
 셰이더 코드를 변경하지 말고 더미 데이터만 추가
 버텍스 선언의 사이즈 줄임 :
 셰이더 로직이 변경되지 않게 주의. 셰이더 바운드와 겹치면 시ㅋ망ㅋ
Vertex Processing

           Attribute 병목 해결
 미 사용 Attribute 제거 :
 ex> 포지션으로 float4를 사용하지만 w 속성을 사용 안하는 경우

 하나의 벡터에 그룹화:
 ex> 텍스쳐 좌표 float2 두개를 하나의 float4에 담기

 Attribute 재 연산:
 ex> 노말과 탄젠트만 데이터에 담고 바이노말은 셰이더에서 재 연산
Shaders
 최신 셰이더 모델 사용:
 석기 시대에는 낮은 버젼을 사용 하는 것이 미덕이였으나,
 통합(Unified) 모델 이후부터는 최신 버젼을 권장
                   최신 버젼의 fxc 사용: 최적화




      SM 2                   SM 3
Shaders

  낮은 정밀도 사용:
  위치 등 고 정밀 연산은 float. 색상 등의 연산은 half로도 충분

  필요시에만 Uniform 파라미터:
  런타임 동안 변하지 않는 값은 const 키워드로 사용

  Uniform 파라미터 접기:
  Ex > return tex2d( sampler, uv) * g_color * 3.0f;
                                     애초에 3.0을 곱해서 셋팅
Shaders

             연산 최적화

    대수학 사용
Shaders

             연산 최적화

    대수학 사용

                      노말라이즈가
                        딱!
Shaders


   범용 함수 남발 금지
   float3 reflect(float3 I, float3 N)
   {
    Return ( 2 * dot(I,N) / dot(N,N) ) * N – I;
   }
Shaders


   범용 함수 남발 금지
   float3 reflect(float3 I, float3 N)
   {
    Return ( 2 * dot(I,N) / dot(N,N) ) * N – I;
   }
             2 * dot(I,N) * N - I

                                                  노말라이즈가
                                                    딱!
   단위 벡터의 길이를 구하지 않도록
Shaders

               병렬 코드 사용


          float x = a + b + c + d;



                     == ?

          float x = ( a + b ) + ( c + d );
Shaders

               병렬 코드 사용


          float x = a + b + c + d;           3 operation

                     !=

          float x = ( a + b ) + ( c + d );   2 operation
Shaders

               타입 혼용 금지

          int4 main(int4 a: TEXCOORD)
          {
             return a + 1.0f;
          }



                    == ?

          int4 main(int4 a: TEXCOORD)
          {
             return a + 1;
          }
Shaders

               타입 혼용 금지

          int4 main(int4 a: TEXCOORD)
          {
             return a + 1.0f;
          }                  타입 캐스팅을 위한 추가 연산

                    !=
          int4 main(int4 a: TEXCOORD)
          {
             return a + 1;
          }
Shaders

  스탠다드 라이브러리 함수:
  Ex > 벡터와 매트릭스의 곱은 mul().


  어드레싱 직접 구현 금지:
  saturate()대신 D3DTADDRESS_CLAMP


  적절한 타입 사용:
  tex2d()가 float4 리턴한다고 해서 꼭 float4로 사용 할 필요 없음
Shaders

               픽셀 셰이더 병목
스카이 박스를 마지막에:
대부분의 스카이는 가려지므로 최후에 랜더하여 픽셀 연산 및 대역폭 절약
Early Z:
한 패스를 추가하여 깊이만을 먼저 그려서 은면의 비싼 연산 방지
Front to Back 정렬:
앞의 오브젝트에 의해 가려지는 픽셀의 오버드로우 방지
지연 랜더: 보이는 픽셀만 라이팅 연산
Shaders
          PS 연산의 VS로 이동
              픽셀 셰이더의 연산은 비싸다.
              그러므로,
              선형 보간으로 가능 한 연산은 무조건
              버텍스 셰이더에서 연산하고
              픽셀 셰이더로 넘겨줘라!
Shaders
                     PS 연산의 VS로 이동
 그건 옛날 이야기!
 요즘은 셰이더 연산이 짱 쎄서 오히려
 버텍스 캐시 퍼포먼스나 어트리뷰트 병목이
 방해가 될 수 있다구요!
 밸런스를 잘 판단하고 사용해야되욧!

     픽셀 셰이더의 연산은 비싸다.
     그러므로,
     선형 보간으로 가능 한 연산은 무조건
     버텍스 셰이더에서 연산하고
     픽셀 셰이더로 넘겨줘라!
Shaders
                    PS 연산의 VS로 이동
  VS:
  Out.position = mul(mvp, In.vertex);
  Out.lightVec = lightPos - In.vertex.xyz;
  Out.viewVec = camPos – In.vertex.xyz;




                          VS:
                          Out.position = mul(mvp, In.vertex);
                          Out.vertex = In.vertex.xyz;

                          PS:
                          float3 lightVec = lightPos – In.vertex;
                          float3 viewVec = camPos – In.vertex;
Shaders

  Vertex Texture Fatch:
  VTF를 죄악으로 여기던 시절은 지남.
  통합 셰이더 모델에서는 VTF가 느리지 않음.

                              NDC11, VPPF




       GPU gems 3
Shaders

  통합 셰이더( Unified Shader) 모델




                      이미지 출처 : PurfHUD6 UserGuide
Shaders

   DX10을 지원하기 위한 아키텍쳐
   모든 셰이더 타입이 같은 하드웨어 유닛을 사용
   GPU가 셰이더 로드 밸런싱을 조절




                               이미지 출처 : PurfHUD6 UserGuide
Shaders

            동적 분기
  현대의 GPU는 다이나믹 브랜치의 퍼포먼스가 우왕ㅋ굿
  이를 이용하여 성능 향상을 볼 수 있음

  ex>
  -라이팅 연산이 필요 없는 그림자 영역은 연산을 건너 뜀
  -N dot L 이 0 이하면 스페큘라 연산 건너 뜀
Shaders

  주의점:
  최소 64개의 버텍스 또는 픽셀(8x8)이 연속적이어야 함.
  아니면 오히려 성능 저하를 초래 할 수도 있음
                         넓은 범
  ex>                         위가 아
                                   닐 경우
  -라이팅 연산이 필요 없는 그림자 영역은 연산을 건너 뜀 는 부적합
  -N dot L 이 0 이하면 스페큘라 연산 건너 뜀
                             말맵에는 부적합
                      고 주파 노
Shaders

            Uber-shaders
  동적 분기의 성능을 활용
  여러 매터리얼의 처리를 한 셰이더로 몰아넣어
  셰이더 설정 비용을 줄임.

  셰이더가 길어지면 셰이더 캐시 문제가 발생 할 수도 있음
Shaders

              텍스쳐 룩업
  라이팅 등 복잡한 연산을 텍스쳐에 미리 그려넣어 사용




       Tera                  StarWars : The Old Republic


  log(), exp()로등은 마이크로 인스트럭션이므로 그냥 사용 해도 됨
Texture

  밉맵 사용

  비싼 필터링은 필요 시만 사용
                    Bilinear의 두배
  •   Trilinear
  •   Anisotropic        Max anisotropic 만큼 느림
  •   Wide texture formats
  •   Volume
  •   Cubemap
  •   Texture projection
Texture


 RGBA8
 예전 세대의 하드웨어는 한 싸이클에 32bit 처리

 RGBA16F
 요즘 세대의 하드웨어는 한 싸이클에 64bit 처리


 Fixed poinf RGBA16은 여전히 두 싸이클
ETC



 clear()
 석기 시대에는 clear()를 건너 뛰는 것이 트릭 중 하나였음.
 하지만, 현대의 하드웨어에서는 항상 클리어 되어야 함.

             nVIDIA : Hyper Z
             ATI : Fine-grained Z



 풀 스크린 쿼드 시에는 불필요.
ETC

 메모리 할당

 다음과 같은 순위로 메모리 할당

 1. 랜더타겟 pitch ( 폭 X 픽셀비트 ) 에 의한 정렬로 할당
 2. 셰이더 생성
 3. 남은 텍스쳐 로드
끗
  To be continue :
벤더 의존적인 최적화 기법

Weitere ähnliche Inhalte

Was ist angesagt?

[조진현] [Kgc2011]direct x11 이야기
[조진현] [Kgc2011]direct x11 이야기[조진현] [Kgc2011]direct x11 이야기
[조진현] [Kgc2011]direct x11 이야기진현 조
 
GPGPU(CUDA)를 이용한 MMOG 캐릭터 충돌처리
GPGPU(CUDA)를 이용한 MMOG 캐릭터 충돌처리GPGPU(CUDA)를 이용한 MMOG 캐릭터 충돌처리
GPGPU(CUDA)를 이용한 MMOG 캐릭터 충돌처리YEONG-CHEON YOU
 
박기헌 NDC12 초보 클라이언트 프로그래머의 병렬 프로그래밍 도전기
박기헌 NDC12 초보 클라이언트 프로그래머의 병렬 프로그래밍 도전기박기헌 NDC12 초보 클라이언트 프로그래머의 병렬 프로그래밍 도전기
박기헌 NDC12 초보 클라이언트 프로그래머의 병렬 프로그래밍 도전기Kiheon Park
 
[Ndc11 박민근] deferred shading
[Ndc11 박민근] deferred shading[Ndc11 박민근] deferred shading
[Ndc11 박민근] deferred shadingMinGeun Park
 
Visual Studio를 이용한 어셈블리어 학습 part 1
Visual Studio를 이용한 어셈블리어 학습 part 1Visual Studio를 이용한 어셈블리어 학습 part 1
Visual Studio를 이용한 어셈블리어 학습 part 1YEONG-CHEON YOU
 
프레임레이트 향상을 위한 공간분할 및 오브젝트 컬링 기법
프레임레이트 향상을 위한 공간분할 및 오브젝트 컬링 기법프레임레이트 향상을 위한 공간분할 및 오브젝트 컬링 기법
프레임레이트 향상을 위한 공간분할 및 오브젝트 컬링 기법YEONG-CHEON YOU
 
[0312 조진현] good bye dx9
[0312 조진현] good bye dx9[0312 조진현] good bye dx9
[0312 조진현] good bye dx9진현 조
 
[조진현]Kgc2012 c++amp
[조진현]Kgc2012 c++amp[조진현]Kgc2012 c++amp
[조진현]Kgc2012 c++amp진현 조
 
[KGC2014] DX9에서DX11로의이행경험공유
[KGC2014] DX9에서DX11로의이행경험공유[KGC2014] DX9에서DX11로의이행경험공유
[KGC2014] DX9에서DX11로의이행경험공유Hwan Min
 
[데브루키/141206 박민근] 유니티 최적화 테크닉 총정리
[데브루키/141206 박민근] 유니티 최적화 테크닉 총정리[데브루키/141206 박민근] 유니티 최적화 테크닉 총정리
[데브루키/141206 박민근] 유니티 최적화 테크닉 총정리MinGeun Park
 
Hierachical z Map Occlusion Culling
Hierachical z Map Occlusion CullingHierachical z Map Occlusion Culling
Hierachical z Map Occlusion CullingYEONG-CHEON YOU
 
Tips and experience of DX12 Engine development .
Tips and experience of DX12 Engine development .Tips and experience of DX12 Engine development .
Tips and experience of DX12 Engine development .YEONG-CHEON YOU
 
Unity performanceoptimzation
Unity performanceoptimzationUnity performanceoptimzation
Unity performanceoptimzationegohim
 
게임프로젝트에 적용하는 GPGPU
게임프로젝트에 적용하는 GPGPU게임프로젝트에 적용하는 GPGPU
게임프로젝트에 적용하는 GPGPUYEONG-CHEON YOU
 
[KGC2014] 울프나이츠 엔진 프로그래밍 기록
[KGC2014] 울프나이츠 엔진 프로그래밍 기록 [KGC2014] 울프나이츠 엔진 프로그래밍 기록
[KGC2014] 울프나이츠 엔진 프로그래밍 기록 JiUng Choi
 
Implements Cascaded Shadow Maps with using Texture Array
Implements Cascaded Shadow Maps with using Texture ArrayImplements Cascaded Shadow Maps with using Texture Array
Implements Cascaded Shadow Maps with using Texture ArrayYEONG-CHEON YOU
 
Python의 계산성능 향상을 위해 Fortran, C, CUDA-C, OpenCL-C 코드들과 연동하기
Python의 계산성능 향상을 위해 Fortran, C, CUDA-C, OpenCL-C 코드들과 연동하기Python의 계산성능 향상을 위해 Fortran, C, CUDA-C, OpenCL-C 코드들과 연동하기
Python의 계산성능 향상을 위해 Fortran, C, CUDA-C, OpenCL-C 코드들과 연동하기Ki-Hwan Kim
 
리얼타임 렌더링에 대해
리얼타임 렌더링에 대해리얼타임 렌더링에 대해
리얼타임 렌더링에 대해필성 권
 
Voxel based game_optimazation_relelase
Voxel based game_optimazation_relelaseVoxel based game_optimazation_relelase
Voxel based game_optimazation_relelaseYEONG-CHEON YOU
 
GPU를 위한 병렬 음원 방향 추정 알고리즘
GPU를 위한 병렬 음원 방향 추정 알고리즘GPU를 위한 병렬 음원 방향 추정 알고리즘
GPU를 위한 병렬 음원 방향 추정 알고리즘Taewoo Lee
 

Was ist angesagt? (20)

[조진현] [Kgc2011]direct x11 이야기
[조진현] [Kgc2011]direct x11 이야기[조진현] [Kgc2011]direct x11 이야기
[조진현] [Kgc2011]direct x11 이야기
 
GPGPU(CUDA)를 이용한 MMOG 캐릭터 충돌처리
GPGPU(CUDA)를 이용한 MMOG 캐릭터 충돌처리GPGPU(CUDA)를 이용한 MMOG 캐릭터 충돌처리
GPGPU(CUDA)를 이용한 MMOG 캐릭터 충돌처리
 
박기헌 NDC12 초보 클라이언트 프로그래머의 병렬 프로그래밍 도전기
박기헌 NDC12 초보 클라이언트 프로그래머의 병렬 프로그래밍 도전기박기헌 NDC12 초보 클라이언트 프로그래머의 병렬 프로그래밍 도전기
박기헌 NDC12 초보 클라이언트 프로그래머의 병렬 프로그래밍 도전기
 
[Ndc11 박민근] deferred shading
[Ndc11 박민근] deferred shading[Ndc11 박민근] deferred shading
[Ndc11 박민근] deferred shading
 
Visual Studio를 이용한 어셈블리어 학습 part 1
Visual Studio를 이용한 어셈블리어 학습 part 1Visual Studio를 이용한 어셈블리어 학습 part 1
Visual Studio를 이용한 어셈블리어 학습 part 1
 
프레임레이트 향상을 위한 공간분할 및 오브젝트 컬링 기법
프레임레이트 향상을 위한 공간분할 및 오브젝트 컬링 기법프레임레이트 향상을 위한 공간분할 및 오브젝트 컬링 기법
프레임레이트 향상을 위한 공간분할 및 오브젝트 컬링 기법
 
[0312 조진현] good bye dx9
[0312 조진현] good bye dx9[0312 조진현] good bye dx9
[0312 조진현] good bye dx9
 
[조진현]Kgc2012 c++amp
[조진현]Kgc2012 c++amp[조진현]Kgc2012 c++amp
[조진현]Kgc2012 c++amp
 
[KGC2014] DX9에서DX11로의이행경험공유
[KGC2014] DX9에서DX11로의이행경험공유[KGC2014] DX9에서DX11로의이행경험공유
[KGC2014] DX9에서DX11로의이행경험공유
 
[데브루키/141206 박민근] 유니티 최적화 테크닉 총정리
[데브루키/141206 박민근] 유니티 최적화 테크닉 총정리[데브루키/141206 박민근] 유니티 최적화 테크닉 총정리
[데브루키/141206 박민근] 유니티 최적화 테크닉 총정리
 
Hierachical z Map Occlusion Culling
Hierachical z Map Occlusion CullingHierachical z Map Occlusion Culling
Hierachical z Map Occlusion Culling
 
Tips and experience of DX12 Engine development .
Tips and experience of DX12 Engine development .Tips and experience of DX12 Engine development .
Tips and experience of DX12 Engine development .
 
Unity performanceoptimzation
Unity performanceoptimzationUnity performanceoptimzation
Unity performanceoptimzation
 
게임프로젝트에 적용하는 GPGPU
게임프로젝트에 적용하는 GPGPU게임프로젝트에 적용하는 GPGPU
게임프로젝트에 적용하는 GPGPU
 
[KGC2014] 울프나이츠 엔진 프로그래밍 기록
[KGC2014] 울프나이츠 엔진 프로그래밍 기록 [KGC2014] 울프나이츠 엔진 프로그래밍 기록
[KGC2014] 울프나이츠 엔진 프로그래밍 기록
 
Implements Cascaded Shadow Maps with using Texture Array
Implements Cascaded Shadow Maps with using Texture ArrayImplements Cascaded Shadow Maps with using Texture Array
Implements Cascaded Shadow Maps with using Texture Array
 
Python의 계산성능 향상을 위해 Fortran, C, CUDA-C, OpenCL-C 코드들과 연동하기
Python의 계산성능 향상을 위해 Fortran, C, CUDA-C, OpenCL-C 코드들과 연동하기Python의 계산성능 향상을 위해 Fortran, C, CUDA-C, OpenCL-C 코드들과 연동하기
Python의 계산성능 향상을 위해 Fortran, C, CUDA-C, OpenCL-C 코드들과 연동하기
 
리얼타임 렌더링에 대해
리얼타임 렌더링에 대해리얼타임 렌더링에 대해
리얼타임 렌더링에 대해
 
Voxel based game_optimazation_relelase
Voxel based game_optimazation_relelaseVoxel based game_optimazation_relelase
Voxel based game_optimazation_relelase
 
GPU를 위한 병렬 음원 방향 추정 알고리즘
GPU를 위한 병렬 음원 방향 추정 알고리즘GPU를 위한 병렬 음원 방향 추정 알고리즘
GPU를 위한 병렬 음원 방향 추정 알고리즘
 

Andere mochten auch

Modern gpu optimize blog
Modern gpu optimize blogModern gpu optimize blog
Modern gpu optimize blogozlael ozlael
 
Unity & VR (Unity Roadshow 2016)
Unity & VR (Unity Roadshow 2016)Unity & VR (Unity Roadshow 2016)
Unity & VR (Unity Roadshow 2016)ozlael ozlael
 
[0521 박민근] [udk] material example
[0521 박민근] [udk] material example[0521 박민근] [udk] material example
[0521 박민근] [udk] material exampleMinGeun Park
 
Landscape 구축, Unreal Engine 3 의 차세대 terrain system
Landscape 구축, Unreal Engine 3 의 차세대 terrain systemLandscape 구축, Unreal Engine 3 의 차세대 terrain system
Landscape 구축, Unreal Engine 3 의 차세대 terrain systemdrandom
 
Udk]static mesh & material
Udk]static mesh & materialUdk]static mesh & material
Udk]static mesh & materialYoung-jun Jeong
 
Volumetric Lighting for Many Lights in Lords of the Fallen
Volumetric Lighting for Many Lights in Lords of the FallenVolumetric Lighting for Many Lights in Lords of the Fallen
Volumetric Lighting for Many Lights in Lords of the FallenBenjamin Glatzel
 
어플리케이션 성능 최적화 기법
어플리케이션 성능 최적화 기법어플리케이션 성능 최적화 기법
어플리케이션 성능 최적화 기법Daniel Kim
 
Unreal summit 2014 다시 보기
Unreal summit 2014 다시 보기Unreal summit 2014 다시 보기
Unreal summit 2014 다시 보기Dong Chan Shin
 
2nd ignite masan 이그나이트마산 09 설미정_ 기부, 기발함과 발칙함사이
2nd ignite masan   이그나이트마산 09 설미정_ 기부, 기발함과 발칙함사이2nd ignite masan   이그나이트마산 09 설미정_ 기부, 기발함과 발칙함사이
2nd ignite masan 이그나이트마산 09 설미정_ 기부, 기발함과 발칙함사이Ignite Masan
 
스크래치와 역사
스크래치와 역사스크래치와 역사
스크래치와 역사Seung Joon Choi
 
기본 회전 공식
기본 회전 공식 기본 회전 공식
기본 회전 공식 cancan21st
 
[0611 박민근] 신입 게임 개발자가 알아야 할 것들
[0611 박민근] 신입 게임 개발자가 알아야 할 것들[0611 박민근] 신입 게임 개발자가 알아야 할 것들
[0611 박민근] 신입 게임 개발자가 알아야 할 것들MinGeun Park
 
Data Structure - 1st Study
Data Structure - 1st StudyData Structure - 1st Study
Data Structure - 1st StudyChris Ohk
 
GPG Study 4.3 카메라 제어기법
GPG Study 4.3 카메라 제어기법GPG Study 4.3 카메라 제어기법
GPG Study 4.3 카메라 제어기법연우 김
 
실전프로젝트 정서경 양현찬
실전프로젝트 정서경 양현찬실전프로젝트 정서경 양현찬
실전프로젝트 정서경 양현찬현찬 양
 

Andere mochten auch (20)

Modern gpu optimize blog
Modern gpu optimize blogModern gpu optimize blog
Modern gpu optimize blog
 
Inferred lighting
Inferred lightingInferred lighting
Inferred lighting
 
Unity & VR (Unity Roadshow 2016)
Unity & VR (Unity Roadshow 2016)Unity & VR (Unity Roadshow 2016)
Unity & VR (Unity Roadshow 2016)
 
[0521 박민근] [udk] material example
[0521 박민근] [udk] material example[0521 박민근] [udk] material example
[0521 박민근] [udk] material example
 
Landscape 구축, Unreal Engine 3 의 차세대 terrain system
Landscape 구축, Unreal Engine 3 의 차세대 terrain systemLandscape 구축, Unreal Engine 3 의 차세대 terrain system
Landscape 구축, Unreal Engine 3 의 차세대 terrain system
 
신광섭
신광섭신광섭
신광섭
 
Udk]static mesh & material
Udk]static mesh & materialUdk]static mesh & material
Udk]static mesh & material
 
Volumetric Lighting for Many Lights in Lords of the Fallen
Volumetric Lighting for Many Lights in Lords of the FallenVolumetric Lighting for Many Lights in Lords of the Fallen
Volumetric Lighting for Many Lights in Lords of the Fallen
 
어플리케이션 성능 최적화 기법
어플리케이션 성능 최적화 기법어플리케이션 성능 최적화 기법
어플리케이션 성능 최적화 기법
 
Unreal summit 2014 다시 보기
Unreal summit 2014 다시 보기Unreal summit 2014 다시 보기
Unreal summit 2014 다시 보기
 
Id142 plan
Id142 planId142 plan
Id142 plan
 
2nd ignite masan 이그나이트마산 09 설미정_ 기부, 기발함과 발칙함사이
2nd ignite masan   이그나이트마산 09 설미정_ 기부, 기발함과 발칙함사이2nd ignite masan   이그나이트마산 09 설미정_ 기부, 기발함과 발칙함사이
2nd ignite masan 이그나이트마산 09 설미정_ 기부, 기발함과 발칙함사이
 
스크래치와 역사
스크래치와 역사스크래치와 역사
스크래치와 역사
 
Shader Driven
Shader DrivenShader Driven
Shader Driven
 
Mesh slice 1
Mesh slice 1Mesh slice 1
Mesh slice 1
 
기본 회전 공식
기본 회전 공식 기본 회전 공식
기본 회전 공식
 
[0611 박민근] 신입 게임 개발자가 알아야 할 것들
[0611 박민근] 신입 게임 개발자가 알아야 할 것들[0611 박민근] 신입 게임 개발자가 알아야 할 것들
[0611 박민근] 신입 게임 개발자가 알아야 할 것들
 
Data Structure - 1st Study
Data Structure - 1st StudyData Structure - 1st Study
Data Structure - 1st Study
 
GPG Study 4.3 카메라 제어기법
GPG Study 4.3 카메라 제어기법GPG Study 4.3 카메라 제어기법
GPG Study 4.3 카메라 제어기법
 
실전프로젝트 정서경 양현찬
실전프로젝트 정서경 양현찬실전프로젝트 정서경 양현찬
실전프로젝트 정서경 양현찬
 

Ähnlich wie Modern gpu optimize

[shaderx6] 3.7 Robust Order-Independent Transparency via Reverse Depth Peelin...
[shaderx6] 3.7 Robust Order-Independent Transparency via Reverse Depth Peelin...[shaderx6] 3.7 Robust Order-Independent Transparency via Reverse Depth Peelin...
[shaderx6] 3.7 Robust Order-Independent Transparency via Reverse Depth Peelin...종빈 오
 
Shaderstudy Motion Blur
Shaderstudy Motion BlurShaderstudy Motion Blur
Shaderstudy Motion Bluryong gyun im
 
NDC11_김성익_슈퍼클래스
NDC11_김성익_슈퍼클래스NDC11_김성익_슈퍼클래스
NDC11_김성익_슈퍼클래스Sungik Kim
 
NDC2016 프로젝트 A1의 AAA급 캐릭터 렌더링 기술
NDC2016 프로젝트 A1의 AAA급 캐릭터 렌더링 기술NDC2016 프로젝트 A1의 AAA급 캐릭터 렌더링 기술
NDC2016 프로젝트 A1의 AAA급 캐릭터 렌더링 기술Ki Hyunwoo
 
[0326 박민근] deferred shading
[0326 박민근] deferred shading[0326 박민근] deferred shading
[0326 박민근] deferred shadingMinGeun Park
 
[14.10.21] Far Cry and DX9 번역(shaderstudy)
[14.10.21] Far Cry and DX9 번역(shaderstudy)[14.10.21] Far Cry and DX9 번역(shaderstudy)
[14.10.21] Far Cry and DX9 번역(shaderstudy)해강
 
니시카와젠지의 3 d 게임 팬을 위한 ps4
니시카와젠지의 3 d 게임 팬을 위한 ps4니시카와젠지의 3 d 게임 팬을 위한 ps4
니시카와젠지의 3 d 게임 팬을 위한 ps4민웅 이
 
[2B2]기계 친화성을 중심으로 접근한 최적화 기법
[2B2]기계 친화성을 중심으로 접근한 최적화 기법[2B2]기계 친화성을 중심으로 접근한 최적화 기법
[2B2]기계 친화성을 중심으로 접근한 최적화 기법NAVER D2
 
전형규, 가성비 좋은 렌더링 테크닉 10선, NDC2012
전형규, 가성비 좋은 렌더링 테크닉 10선, NDC2012전형규, 가성비 좋은 렌더링 테크닉 10선, NDC2012
전형규, 가성비 좋은 렌더링 테크닉 10선, NDC2012devCAT Studio, NEXON
 
Mapreduce tuning
Mapreduce tuningMapreduce tuning
Mapreduce tuningGruter
 
Compute shader DX11
Compute shader DX11Compute shader DX11
Compute shader DX11민웅 이
 
[Kgc2013] 모바일 엔진 개발기
[Kgc2013] 모바일 엔진 개발기[Kgc2013] 모바일 엔진 개발기
[Kgc2013] 모바일 엔진 개발기changehee lee
 
NDC11_슈퍼클래스
NDC11_슈퍼클래스NDC11_슈퍼클래스
NDC11_슈퍼클래스noerror
 
전형규, M2 클라이언트 스레딩 아키텍쳐, NDC2013
전형규, M2 클라이언트 스레딩 아키텍쳐, NDC2013전형규, M2 클라이언트 스레딩 아키텍쳐, NDC2013
전형규, M2 클라이언트 스레딩 아키텍쳐, NDC2013devCAT Studio, NEXON
 
나만의 엔진 개발하기
나만의 엔진 개발하기나만의 엔진 개발하기
나만의 엔진 개발하기YEONG-CHEON YOU
 
Optimizing the graphics_pipeline_
Optimizing the graphics_pipeline_Optimizing the graphics_pipeline_
Optimizing the graphics_pipeline_ozlael ozlael
 
Introduction to DirectX 12 Programming , Ver 1.5
Introduction to DirectX 12 Programming , Ver 1.5Introduction to DirectX 12 Programming , Ver 1.5
Introduction to DirectX 12 Programming , Ver 1.5YEONG-CHEON YOU
 
[박민근] 3 d렌더링 옵티마이징_nv_perfhud
[박민근] 3 d렌더링 옵티마이징_nv_perfhud[박민근] 3 d렌더링 옵티마이징_nv_perfhud
[박민근] 3 d렌더링 옵티마이징_nv_perfhudMinGeun Park
 
헤테로지니어스 컴퓨팅 : CPU 에서 GPU 로 옮겨가기
헤테로지니어스 컴퓨팅 :  CPU 에서 GPU 로 옮겨가기헤테로지니어스 컴퓨팅 :  CPU 에서 GPU 로 옮겨가기
헤테로지니어스 컴퓨팅 : CPU 에서 GPU 로 옮겨가기zupet
 
2015 제2회 동아리 해커 세미나 - 병렬컴퓨팅 소개 (16기 김정현)
2015 제2회 동아리 해커 세미나 - 병렬컴퓨팅 소개 (16기 김정현)2015 제2회 동아리 해커 세미나 - 병렬컴퓨팅 소개 (16기 김정현)
2015 제2회 동아리 해커 세미나 - 병렬컴퓨팅 소개 (16기 김정현)khuhacker
 

Ähnlich wie Modern gpu optimize (20)

[shaderx6] 3.7 Robust Order-Independent Transparency via Reverse Depth Peelin...
[shaderx6] 3.7 Robust Order-Independent Transparency via Reverse Depth Peelin...[shaderx6] 3.7 Robust Order-Independent Transparency via Reverse Depth Peelin...
[shaderx6] 3.7 Robust Order-Independent Transparency via Reverse Depth Peelin...
 
Shaderstudy Motion Blur
Shaderstudy Motion BlurShaderstudy Motion Blur
Shaderstudy Motion Blur
 
NDC11_김성익_슈퍼클래스
NDC11_김성익_슈퍼클래스NDC11_김성익_슈퍼클래스
NDC11_김성익_슈퍼클래스
 
NDC2016 프로젝트 A1의 AAA급 캐릭터 렌더링 기술
NDC2016 프로젝트 A1의 AAA급 캐릭터 렌더링 기술NDC2016 프로젝트 A1의 AAA급 캐릭터 렌더링 기술
NDC2016 프로젝트 A1의 AAA급 캐릭터 렌더링 기술
 
[0326 박민근] deferred shading
[0326 박민근] deferred shading[0326 박민근] deferred shading
[0326 박민근] deferred shading
 
[14.10.21] Far Cry and DX9 번역(shaderstudy)
[14.10.21] Far Cry and DX9 번역(shaderstudy)[14.10.21] Far Cry and DX9 번역(shaderstudy)
[14.10.21] Far Cry and DX9 번역(shaderstudy)
 
니시카와젠지의 3 d 게임 팬을 위한 ps4
니시카와젠지의 3 d 게임 팬을 위한 ps4니시카와젠지의 3 d 게임 팬을 위한 ps4
니시카와젠지의 3 d 게임 팬을 위한 ps4
 
[2B2]기계 친화성을 중심으로 접근한 최적화 기법
[2B2]기계 친화성을 중심으로 접근한 최적화 기법[2B2]기계 친화성을 중심으로 접근한 최적화 기법
[2B2]기계 친화성을 중심으로 접근한 최적화 기법
 
전형규, 가성비 좋은 렌더링 테크닉 10선, NDC2012
전형규, 가성비 좋은 렌더링 테크닉 10선, NDC2012전형규, 가성비 좋은 렌더링 테크닉 10선, NDC2012
전형규, 가성비 좋은 렌더링 테크닉 10선, NDC2012
 
Mapreduce tuning
Mapreduce tuningMapreduce tuning
Mapreduce tuning
 
Compute shader DX11
Compute shader DX11Compute shader DX11
Compute shader DX11
 
[Kgc2013] 모바일 엔진 개발기
[Kgc2013] 모바일 엔진 개발기[Kgc2013] 모바일 엔진 개발기
[Kgc2013] 모바일 엔진 개발기
 
NDC11_슈퍼클래스
NDC11_슈퍼클래스NDC11_슈퍼클래스
NDC11_슈퍼클래스
 
전형규, M2 클라이언트 스레딩 아키텍쳐, NDC2013
전형규, M2 클라이언트 스레딩 아키텍쳐, NDC2013전형규, M2 클라이언트 스레딩 아키텍쳐, NDC2013
전형규, M2 클라이언트 스레딩 아키텍쳐, NDC2013
 
나만의 엔진 개발하기
나만의 엔진 개발하기나만의 엔진 개발하기
나만의 엔진 개발하기
 
Optimizing the graphics_pipeline_
Optimizing the graphics_pipeline_Optimizing the graphics_pipeline_
Optimizing the graphics_pipeline_
 
Introduction to DirectX 12 Programming , Ver 1.5
Introduction to DirectX 12 Programming , Ver 1.5Introduction to DirectX 12 Programming , Ver 1.5
Introduction to DirectX 12 Programming , Ver 1.5
 
[박민근] 3 d렌더링 옵티마이징_nv_perfhud
[박민근] 3 d렌더링 옵티마이징_nv_perfhud[박민근] 3 d렌더링 옵티마이징_nv_perfhud
[박민근] 3 d렌더링 옵티마이징_nv_perfhud
 
헤테로지니어스 컴퓨팅 : CPU 에서 GPU 로 옮겨가기
헤테로지니어스 컴퓨팅 :  CPU 에서 GPU 로 옮겨가기헤테로지니어스 컴퓨팅 :  CPU 에서 GPU 로 옮겨가기
헤테로지니어스 컴퓨팅 : CPU 에서 GPU 로 옮겨가기
 
2015 제2회 동아리 해커 세미나 - 병렬컴퓨팅 소개 (16기 김정현)
2015 제2회 동아리 해커 세미나 - 병렬컴퓨팅 소개 (16기 김정현)2015 제2회 동아리 해커 세미나 - 병렬컴퓨팅 소개 (16기 김정현)
2015 제2회 동아리 해커 세미나 - 병렬컴퓨팅 소개 (16기 김정현)
 

Mehr von ozlael ozlael

뭣이 중헌디? 성능 프로파일링도 모름서 - 유니티 성능 프로파일링 가이드 (IGC16)
뭣이 중헌디? 성능 프로파일링도 모름서 - 유니티 성능 프로파일링 가이드 (IGC16)뭣이 중헌디? 성능 프로파일링도 모름서 - 유니티 성능 프로파일링 가이드 (IGC16)
뭣이 중헌디? 성능 프로파일링도 모름서 - 유니티 성능 프로파일링 가이드 (IGC16)ozlael ozlael
 
Optimizing mobile applications - Ian Dundore, Mark Harkness
Optimizing mobile applications - Ian Dundore, Mark HarknessOptimizing mobile applications - Ian Dundore, Mark Harkness
Optimizing mobile applications - Ian Dundore, Mark Harknessozlael ozlael
 
그래픽 최적화로 가...가버렷! (부제: 배치! 배칭을 보자!) , Batch! Let's take a look at Batching! -...
그래픽 최적화로 가...가버렷! (부제: 배치! 배칭을 보자!) , Batch! Let's take a look at Batching! -...그래픽 최적화로 가...가버렷! (부제: 배치! 배칭을 보자!) , Batch! Let's take a look at Batching! -...
그래픽 최적화로 가...가버렷! (부제: 배치! 배칭을 보자!) , Batch! Let's take a look at Batching! -...ozlael ozlael
 
유니티 그래픽 최적화, 어디까지 해봤니 (Optimizing Unity Graphics) Unite Seoul Ver.
유니티 그래픽 최적화, 어디까지 해봤니 (Optimizing Unity Graphics) Unite Seoul Ver.유니티 그래픽 최적화, 어디까지 해봤니 (Optimizing Unity Graphics) Unite Seoul Ver.
유니티 그래픽 최적화, 어디까지 해봤니 (Optimizing Unity Graphics) Unite Seoul Ver.ozlael ozlael
 
유니티 그래픽 최적화, 어디까지 해봤니 (Optimizing Unity Graphics) NDC15 Ver.
유니티 그래픽 최적화, 어디까지 해봤니 (Optimizing Unity Graphics) NDC15 Ver.유니티 그래픽 최적화, 어디까지 해봤니 (Optimizing Unity Graphics) NDC15 Ver.
유니티 그래픽 최적화, 어디까지 해봤니 (Optimizing Unity Graphics) NDC15 Ver.ozlael ozlael
 
Infinity Blade and beyond
Infinity Blade and beyondInfinity Blade and beyond
Infinity Blade and beyondozlael ozlael
 
스티브잡스처럼 프레젠테이션하기
스티브잡스처럼 프레젠테이션하기스티브잡스처럼 프레젠테이션하기
스티브잡스처럼 프레젠테이션하기ozlael ozlael
 
유니티의 라이팅이 안 이쁘다구요? (A to Z of Lighting)
유니티의 라이팅이 안 이쁘다구요? (A to Z of Lighting)유니티의 라이팅이 안 이쁘다구요? (A to Z of Lighting)
유니티의 라이팅이 안 이쁘다구요? (A to Z of Lighting)ozlael ozlael
 
Introduce coco2dx with cookingstar
Introduce coco2dx with cookingstarIntroduce coco2dx with cookingstar
Introduce coco2dx with cookingstarozlael ozlael
 
Deferred rendering case study
Deferred rendering case studyDeferred rendering case study
Deferred rendering case studyozlael ozlael
 
Bickerstaff benson making3d games on the playstation3
Bickerstaff benson making3d games on the playstation3Bickerstaff benson making3d games on the playstation3
Bickerstaff benson making3d games on the playstation3ozlael ozlael
 
Hable uncharted2(siggraph%202010%20 advanced%20realtime%20rendering%20course)
Hable uncharted2(siggraph%202010%20 advanced%20realtime%20rendering%20course)Hable uncharted2(siggraph%202010%20 advanced%20realtime%20rendering%20course)
Hable uncharted2(siggraph%202010%20 advanced%20realtime%20rendering%20course)ozlael ozlael
 
Deferred rendering in_leadwerks_engine[1]
Deferred rendering in_leadwerks_engine[1]Deferred rendering in_leadwerks_engine[1]
Deferred rendering in_leadwerks_engine[1]ozlael ozlael
 
Deferred Rendering in Killzone 2
Deferred Rendering in Killzone 2Deferred Rendering in Killzone 2
Deferred Rendering in Killzone 2ozlael ozlael
 

Mehr von ozlael ozlael (20)

뭣이 중헌디? 성능 프로파일링도 모름서 - 유니티 성능 프로파일링 가이드 (IGC16)
뭣이 중헌디? 성능 프로파일링도 모름서 - 유니티 성능 프로파일링 가이드 (IGC16)뭣이 중헌디? 성능 프로파일링도 모름서 - 유니티 성능 프로파일링 가이드 (IGC16)
뭣이 중헌디? 성능 프로파일링도 모름서 - 유니티 성능 프로파일링 가이드 (IGC16)
 
Optimizing mobile applications - Ian Dundore, Mark Harkness
Optimizing mobile applications - Ian Dundore, Mark HarknessOptimizing mobile applications - Ian Dundore, Mark Harkness
Optimizing mobile applications - Ian Dundore, Mark Harkness
 
그래픽 최적화로 가...가버렷! (부제: 배치! 배칭을 보자!) , Batch! Let's take a look at Batching! -...
그래픽 최적화로 가...가버렷! (부제: 배치! 배칭을 보자!) , Batch! Let's take a look at Batching! -...그래픽 최적화로 가...가버렷! (부제: 배치! 배칭을 보자!) , Batch! Let's take a look at Batching! -...
그래픽 최적화로 가...가버렷! (부제: 배치! 배칭을 보자!) , Batch! Let's take a look at Batching! -...
 
유니티 그래픽 최적화, 어디까지 해봤니 (Optimizing Unity Graphics) Unite Seoul Ver.
유니티 그래픽 최적화, 어디까지 해봤니 (Optimizing Unity Graphics) Unite Seoul Ver.유니티 그래픽 최적화, 어디까지 해봤니 (Optimizing Unity Graphics) Unite Seoul Ver.
유니티 그래픽 최적화, 어디까지 해봤니 (Optimizing Unity Graphics) Unite Seoul Ver.
 
유니티 그래픽 최적화, 어디까지 해봤니 (Optimizing Unity Graphics) NDC15 Ver.
유니티 그래픽 최적화, 어디까지 해봤니 (Optimizing Unity Graphics) NDC15 Ver.유니티 그래픽 최적화, 어디까지 해봤니 (Optimizing Unity Graphics) NDC15 Ver.
유니티 그래픽 최적화, 어디까지 해봤니 (Optimizing Unity Graphics) NDC15 Ver.
 
Infinity Blade and beyond
Infinity Blade and beyondInfinity Blade and beyond
Infinity Blade and beyond
 
스티브잡스처럼 프레젠테이션하기
스티브잡스처럼 프레젠테이션하기스티브잡스처럼 프레젠테이션하기
스티브잡스처럼 프레젠테이션하기
 
유니티의 라이팅이 안 이쁘다구요? (A to Z of Lighting)
유니티의 라이팅이 안 이쁘다구요? (A to Z of Lighting)유니티의 라이팅이 안 이쁘다구요? (A to Z of Lighting)
유니티의 라이팅이 안 이쁘다구요? (A to Z of Lighting)
 
Introduce coco2dx with cookingstar
Introduce coco2dx with cookingstarIntroduce coco2dx with cookingstar
Introduce coco2dx with cookingstar
 
Deferred rendering case study
Deferred rendering case studyDeferred rendering case study
Deferred rendering case study
 
mssao presentation
mssao presentationmssao presentation
mssao presentation
 
Bickerstaff benson making3d games on the playstation3
Bickerstaff benson making3d games on the playstation3Bickerstaff benson making3d games on the playstation3
Bickerstaff benson making3d games on the playstation3
 
DOF Depth of Field
DOF Depth of FieldDOF Depth of Field
DOF Depth of Field
 
Hable uncharted2(siggraph%202010%20 advanced%20realtime%20rendering%20course)
Hable uncharted2(siggraph%202010%20 advanced%20realtime%20rendering%20course)Hable uncharted2(siggraph%202010%20 advanced%20realtime%20rendering%20course)
Hable uncharted2(siggraph%202010%20 advanced%20realtime%20rendering%20course)
 
Deferred rendering in_leadwerks_engine[1]
Deferred rendering in_leadwerks_engine[1]Deferred rendering in_leadwerks_engine[1]
Deferred rendering in_leadwerks_engine[1]
 
Deferred shading
Deferred shadingDeferred shading
Deferred shading
 
Deferred Rendering in Killzone 2
Deferred Rendering in Killzone 2Deferred Rendering in Killzone 2
Deferred Rendering in Killzone 2
 
Deferred lighting
Deferred lightingDeferred lighting
Deferred lighting
 
DOF
DOFDOF
DOF
 
Stereoscopic 3D
Stereoscopic 3DStereoscopic 3D
Stereoscopic 3D
 

Modern gpu optimize

  • 1. http://ozlael.egloos.com Modern GPU Optimize In DirectX 9 사실은 GPU 프로그래밍 가이드 문서 정리 ATI Radeon HD 2000 programming guide GPU Programming Guide GeForce 8 and 9 Series
  • 2. Modern GPU Optimize In DirectX 9 현대의 H/W의 기준 이야기이므로 석기시대의 H/W에서는 역효과인 것도 존재 이미지 출처 : ndc11
  • 3. Modern GPU Optimize In DirectX 9 열린글도 아니고 DX10도 아니고 DX11도 아니고...
  • 4. 병목 측정 API Overhead Vertex Processing Shaders Texture ETC
  • 5. 병목 측정 병목을 찾기 위해서는 정확한 측정 환경 필요 이미지 출처 : http://www.hellodd.com
  • 6. 병목 측정 DirectX retail runtime DirectX 최종 version 어플리케이션 release versions 디스플레이 컨트롤 패널 기본 값 Anisotropic filtering, Anti aliasing, Vertical sync 평균 값으로 벤치마킹 타겟 하드웨어에서 실행 하드웨어마다 병목이 다름
  • 7. 병목 측정 DirectX retail runtime 심지어 프레임 마다도 바뀜 최종 version DirectX 어플리케이션 release versions 병목을 찾는다 = 디스플레이 컨트롤 패널 기본 값 Anisotropic filtering, Anti aliasing, Vertical sync 현 시나리오에서의벤치마킹 찾는다 평균 값으로 병목을 타겟 하드웨어에서 실행 하드웨어마다 병목이 다름
  • 8. 병목 측정 간단한 테스트
  • 9. 병목 측정 CPU 스피드를 낮춰서 돌려본다. 속도가 저하되면 CPU limited
  • 10. 병목 측정 GPU 코어 클럭을 낮춰서 돌려본다. Vertex Shader Pixel Shader Rasterization 속도가 저하되면 Shader Limited
  • 11. 병목 측정 GPU 메모리 클럭을 낮춰서 돌려본다. Texture Frame buffer 속도가 저하되면 Bandwidth Limited
  • 12. 병목 측정 PerfHUD 이미지 출처 : PurfHUD6 UserGuide
  • 13. 병목 측정 Ctrl + T: 텍스쳐 유닛을 고립. 2x2 사이즈로 바꾸어 텍스쳐 대역폭 제한인지 확인 Ctrl + V: 버텍스 유닛을 고립. 버텍스 트랜스폼, CPU 워크로드, 버스 트랜잭션 제한인지 확인 Ctrl + N: GPU 제거 모든 DP calls을 무시하여 로직 오버헤드인지 확인
  • 14. 병목 측정 타이밍 그래프 Driver Time (ms) CPU가 처리한 드라이버 코드 시간. Driver Sleeping 포함. GPU Idle (ms) GPU가 idle였던 시간. Driver Sleeping (ms) 드라이버가 GPU를 위해 기다린 시간 이미지 출처 : PurfHUD6 UserGuide
  • 15. 병목 측정 Q: CPU 드라이버가 GPU를 command 기다리는 이유 ? Push Buffer Queue command command command command command command GPU
  • 16. 병목 측정 A: CPU 요게 꽉 차서 command Push Buffer Queue command command command command command command GPU * Lock(): 은 Push Buffer가 비워지길 기다림
  • 17. 병목 측정 이미지 출처 : http://www.patsnap.com/patents/view/US7773090.html
  • 18. 병목 측정 Driver Sleeping이 높다면 컬링 , 물리, 로직, CPU의 할 일을 추가해도 FPS가 줄지 않을 것. AI Driver Sleeping이 적당하지 않다면 GPU 로드를 가볍게 하기 위해 장변의 복잡도를 줄여야 함. GPU Idle이 존재한다면 GPU로 데이터를 보내지 않고 있는 경우 발생.
  • 19. 병목 측정 Driver Time과 Frame Time이 같이 튄다면, 드라이버가 텍스쳐 등을 CPU에서 GPU로 업로딩 중.. Driver Time은 정상이고 Frame Time만 튄다면, CPU가 빡신 일 하던가, 하드를 긁거나, OS가 딴짓 하거나.. Driver Time과 Frame Time의 차이가 크다면, CPU 의존적
  • 20. 병목 측정 프레임 프로파일러
  • 21. 병목 측정 PerfStudio 이미지 출처 : http://developer.amd.com/
  • 22. 병목 측정 PIX 이미지 출처 : http://mynameismjp.wordpress.com/
  • 23. API Overhead 는 CPU 병목 이미지 출처 : http://blog.naver.com/seiclub
  • 24. API Overhead 배치를 줄이자
  • 25. API Overhead 상태 및 상수 변화를 줄일 것. 필요치 않을 시 상태를 재 설정 하지 말 것. 셰이더 상수를 개개로 많이 설정 하는 것 보다는 그룹으로 한번에.
  • 26. API Overhead 텍스쳐 아틀라스 여러 텍스쳐를 하나로 묶어서 상태 변화 및 call 절약 이미지 출처 : http://www.gamasutra.com/view/feature/2530/practical_texture_atlases.php
  • 27. API Overhead 인스턴싱 여러 DP call을 하나의 DP call로 합침 이미지 출처 : http://http.developer.nvidia.com/GPUGems2, http://blog.csdn.net/
  • 28. Vertex Processing Indexed Primitive 사용. 버텍스 캐시 성능을 위해 ID3DXMesh Optimize() 사용. Attribute 병목 제거 (input assembly) 이미지 출처 : http://blog.naver.com/seiclub
  • 29. Vertex Processing Attribute 병목이 뭐야 ?
  • 30. Vertex Processing Setup 시 각 버텍스의 float 데이터를 버텍스 스트림과 오프셋 정보에 기반하여 비디오 메모리의 적절한 위치에서 가져옴. Setup : single data chunk에 assembled vertex를 설정
  • 31. Vertex Processing 한 싸이클 내 처리 Attribute 양이 정해져 있음. Setup 시 각 버텍스의 float 데이터를 버텍스 스트림과 오프셋 정보에 기반하여 비디오 메모리의 적절한 위치에서 가져옴. Setup : single data chunk에 assembled vertex를 설정
  • 32. Vertex Processing Attribute 병목 탐지 버텍스 선언의 사이즈 늘림 : 셰이더 코드를 변경하지 말고 더미 데이터만 추가 버텍스 선언의 사이즈 줄임 : 셰이더 로직이 변경되지 않게 주의. 셰이더 바운드와 겹치면 시ㅋ망ㅋ
  • 33. Vertex Processing Attribute 병목 해결 미 사용 Attribute 제거 : ex> 포지션으로 float4를 사용하지만 w 속성을 사용 안하는 경우 하나의 벡터에 그룹화: ex> 텍스쳐 좌표 float2 두개를 하나의 float4에 담기 Attribute 재 연산: ex> 노말과 탄젠트만 데이터에 담고 바이노말은 셰이더에서 재 연산
  • 34. Shaders 최신 셰이더 모델 사용: 석기 시대에는 낮은 버젼을 사용 하는 것이 미덕이였으나, 통합(Unified) 모델 이후부터는 최신 버젼을 권장 최신 버젼의 fxc 사용: 최적화 SM 2 SM 3
  • 35. Shaders 낮은 정밀도 사용: 위치 등 고 정밀 연산은 float. 색상 등의 연산은 half로도 충분 필요시에만 Uniform 파라미터: 런타임 동안 변하지 않는 값은 const 키워드로 사용 Uniform 파라미터 접기: Ex > return tex2d( sampler, uv) * g_color * 3.0f; 애초에 3.0을 곱해서 셋팅
  • 36. Shaders 연산 최적화 대수학 사용
  • 37. Shaders 연산 최적화 대수학 사용 노말라이즈가 딱!
  • 38. Shaders 범용 함수 남발 금지 float3 reflect(float3 I, float3 N) { Return ( 2 * dot(I,N) / dot(N,N) ) * N – I; }
  • 39. Shaders 범용 함수 남발 금지 float3 reflect(float3 I, float3 N) { Return ( 2 * dot(I,N) / dot(N,N) ) * N – I; } 2 * dot(I,N) * N - I 노말라이즈가 딱! 단위 벡터의 길이를 구하지 않도록
  • 40. Shaders 병렬 코드 사용 float x = a + b + c + d; == ? float x = ( a + b ) + ( c + d );
  • 41. Shaders 병렬 코드 사용 float x = a + b + c + d; 3 operation != float x = ( a + b ) + ( c + d ); 2 operation
  • 42. Shaders 타입 혼용 금지 int4 main(int4 a: TEXCOORD) { return a + 1.0f; } == ? int4 main(int4 a: TEXCOORD) { return a + 1; }
  • 43. Shaders 타입 혼용 금지 int4 main(int4 a: TEXCOORD) { return a + 1.0f; } 타입 캐스팅을 위한 추가 연산 != int4 main(int4 a: TEXCOORD) { return a + 1; }
  • 44. Shaders 스탠다드 라이브러리 함수: Ex > 벡터와 매트릭스의 곱은 mul(). 어드레싱 직접 구현 금지: saturate()대신 D3DTADDRESS_CLAMP 적절한 타입 사용: tex2d()가 float4 리턴한다고 해서 꼭 float4로 사용 할 필요 없음
  • 45. Shaders 픽셀 셰이더 병목 스카이 박스를 마지막에: 대부분의 스카이는 가려지므로 최후에 랜더하여 픽셀 연산 및 대역폭 절약 Early Z: 한 패스를 추가하여 깊이만을 먼저 그려서 은면의 비싼 연산 방지 Front to Back 정렬: 앞의 오브젝트에 의해 가려지는 픽셀의 오버드로우 방지 지연 랜더: 보이는 픽셀만 라이팅 연산
  • 46. Shaders PS 연산의 VS로 이동 픽셀 셰이더의 연산은 비싸다. 그러므로, 선형 보간으로 가능 한 연산은 무조건 버텍스 셰이더에서 연산하고 픽셀 셰이더로 넘겨줘라!
  • 47. Shaders PS 연산의 VS로 이동 그건 옛날 이야기! 요즘은 셰이더 연산이 짱 쎄서 오히려 버텍스 캐시 퍼포먼스나 어트리뷰트 병목이 방해가 될 수 있다구요! 밸런스를 잘 판단하고 사용해야되욧! 픽셀 셰이더의 연산은 비싸다. 그러므로, 선형 보간으로 가능 한 연산은 무조건 버텍스 셰이더에서 연산하고 픽셀 셰이더로 넘겨줘라!
  • 48. Shaders PS 연산의 VS로 이동 VS: Out.position = mul(mvp, In.vertex); Out.lightVec = lightPos - In.vertex.xyz; Out.viewVec = camPos – In.vertex.xyz; VS: Out.position = mul(mvp, In.vertex); Out.vertex = In.vertex.xyz; PS: float3 lightVec = lightPos – In.vertex; float3 viewVec = camPos – In.vertex;
  • 49. Shaders Vertex Texture Fatch: VTF를 죄악으로 여기던 시절은 지남. 통합 셰이더 모델에서는 VTF가 느리지 않음. NDC11, VPPF GPU gems 3
  • 50. Shaders 통합 셰이더( Unified Shader) 모델 이미지 출처 : PurfHUD6 UserGuide
  • 51. Shaders DX10을 지원하기 위한 아키텍쳐 모든 셰이더 타입이 같은 하드웨어 유닛을 사용 GPU가 셰이더 로드 밸런싱을 조절 이미지 출처 : PurfHUD6 UserGuide
  • 52. Shaders 동적 분기 현대의 GPU는 다이나믹 브랜치의 퍼포먼스가 우왕ㅋ굿 이를 이용하여 성능 향상을 볼 수 있음 ex> -라이팅 연산이 필요 없는 그림자 영역은 연산을 건너 뜀 -N dot L 이 0 이하면 스페큘라 연산 건너 뜀
  • 53. Shaders 주의점: 최소 64개의 버텍스 또는 픽셀(8x8)이 연속적이어야 함. 아니면 오히려 성능 저하를 초래 할 수도 있음 넓은 범 ex> 위가 아 닐 경우 -라이팅 연산이 필요 없는 그림자 영역은 연산을 건너 뜀 는 부적합 -N dot L 이 0 이하면 스페큘라 연산 건너 뜀 말맵에는 부적합 고 주파 노
  • 54. Shaders Uber-shaders 동적 분기의 성능을 활용 여러 매터리얼의 처리를 한 셰이더로 몰아넣어 셰이더 설정 비용을 줄임. 셰이더가 길어지면 셰이더 캐시 문제가 발생 할 수도 있음
  • 55. Shaders 텍스쳐 룩업 라이팅 등 복잡한 연산을 텍스쳐에 미리 그려넣어 사용 Tera StarWars : The Old Republic log(), exp()로등은 마이크로 인스트럭션이므로 그냥 사용 해도 됨
  • 56. Texture 밉맵 사용 비싼 필터링은 필요 시만 사용 Bilinear의 두배 • Trilinear • Anisotropic Max anisotropic 만큼 느림 • Wide texture formats • Volume • Cubemap • Texture projection
  • 57. Texture RGBA8 예전 세대의 하드웨어는 한 싸이클에 32bit 처리 RGBA16F 요즘 세대의 하드웨어는 한 싸이클에 64bit 처리 Fixed poinf RGBA16은 여전히 두 싸이클
  • 58. ETC clear() 석기 시대에는 clear()를 건너 뛰는 것이 트릭 중 하나였음. 하지만, 현대의 하드웨어에서는 항상 클리어 되어야 함. nVIDIA : Hyper Z ATI : Fine-grained Z 풀 스크린 쿼드 시에는 불필요.
  • 59. ETC 메모리 할당 다음과 같은 순위로 메모리 할당 1. 랜더타겟 pitch ( 폭 X 픽셀비트 ) 에 의한 정렬로 할당 2. 셰이더 생성 3. 남은 텍스쳐 로드
  • 60. 끗 To be continue : 벤더 의존적인 최적화 기법