TECHARTNOMAD | TECHARTFLOWIO.COM

GRAPHICS PROGRAMMING

[최적화]IPC with GPU.

jplee 2024. 7. 12. 13:21
작성자의 회고 : 2015년 PC 기반의 OPENWORLD MMORPG 개발을 담당하다가 2016년 다시 모바일 MMORPG 까지 담당하게 되었을 때로 기억 되는데요... 셰이더 최적화 메서드 중에서 가장 기초가 되는 부분을 살펴 봤던 기억이 나서 티스토리 페이지에 참조를 위해 리포스팅을 해 보게되었네요.

작성일 : 2016년 8월.
 
Installation of SDK.
POWEVR
 
 
OVERVIEW.
Excution time (Response time) : GPU 가 어떤 일을 완료 하는데 걸리는 시간.
 
GPU Excution time : GPU 가 어떤 일을 수행 하는데 걸리는 실제 시간.(입출력 시간 제외)
 
Clock period : 각 Clock cycle 을 완료 하는데 걸리는 시간. Clock cycle time 이라고도 한다.
 
Clock rate : Clock period(Clock cycle time) 의 역수. 1초 동안 존재하는 Clock cycle의 수.
 
GPU 클럭 주기 = 프로그램 명령어 x 명령어당 평균 클럭 주기
 
명령어당 클록 주기 : 각 명령을 실행하는데 걸리는 Clock cycle 의 수.
 
SIMT : Single instruction Multiple-thread의 약어로 하나의 instruction을 여러개의 thread에서 동시에 돌린다는 의미인 것 같다. 즉, 하나의 프로그램을 여러개의 thread에서 동시에 돌린다는 의미로 생각하면 될 듯. 
 
warp의 크기가 32이므로, 하나의 instruction은 한 warp안에서는 32개의 operation으로 구성된다. (SIMT모델이고, 한 warp의 크기가 32라는 것은, 32개의 thread가 있다는 이야기이므로, 하나의 instruction은 32개의 thread에서 32번 동시에 실행되게 된다. 그것이 32 operations의 의미)
 
Exmaple of IPC. (PowerVR)

 

기본적인 이해를 위해 Lambert 조명 모델을 사용 하였다.
 
PVRShaderEditor 2.9 실행. (X64)

 

 
Compiler setup.
 
void main()
{
vec4 diffuseTex = texture(DiffuseTexture, TexCoord);
//Ordinary coding this type.
diffuseTex = pow(diffuseTex , powVal);
oColor = diffuseTex * DestColor;
}

void main()
{
vec4 diffuseTex = texture(DiffuseTexture, TexCoord);
//Optimizing with Approximated pow math
diffuseTex = 5.0 * (diffuseTex * diffuseTex) * 0.19875; 
oColor = diffuseTex * DestColor;
}
 
Fresnel 함수를 직접 만들어 보고 IPC 를 줄일 수 있도록 하라.
Hint.

최적화 관련 주제입니다.