1. PowerVR
Low Level GLSL Optimisation
이민웅
Shader Study
http://cdn.imgtec.com/sdk-documentation/PowerVR%20Low%20level%20GLSL%20Optimisation.pdf
2. Low Level GLSL Optimisation
• https://www.imgtec.com/blog/low-level-glsl-optimisation-for-
powervr/
• 원문
• PowerVR Series 6 기준
• Low Level 마지막 최적화용
• http://www.humus.name/Articles/Persson_LowLevelThinking.pdf
• 재원씨발표
• http://www.humus.name/Articles/Persson_LowlevelShaderOptimizat
ion.pdf
• 개발자가 놓칠 수 있는 저 수준 최적화
3. PowerVR Rogue architecture
• 셰이더를 실행하는 데 필요한 사이클 수에 따라 달라짐
• 아키텍처는 물론 구성에 따라 단일 사이클 내에서 USC (통합 쉐
이더 클러스터), ALU (산술 및 논리 유닛) 파이프 라인에서 여러
명령어를 실행하기위한 다양한 옵션을 제공
• 두 개의 F16 SOP (Sum of Products) 명령
• F32 - F16 변환 및 이동 / 출력 / 팩 명령을 모두 한 번에 실행
• FP32 / INT32 MAD / UNPACK 명령어, 테스트 (조건부) 명령어 및
move / output / pack 명령어와 함께 FP32 Multiply-Add 명령어
(MAD)를 한 사이클 만에 실행
• USC 코어를 활용하기 위해 MAD 형식으로 작성
4. USC(Unified Shader Cluster)
통합 쉐이더 클러스터
ALU (Arithmetic and Logic Unit)
산술 및 논리 유닛
SOP (Sum of Products)
Multiply-Add instruction (MAD)
14. Mixed Scalar/Vector math
• Normalize () / length () / distance
() / reflect () 등의 함수는 dot ()과
같은 함수를 많이 포함
• 두 작업에 공유 하위 표현식이 있다
는 것을 알면 사이클수를 줄일 수
있음
• 그러나 입력 순서가 허용하는 경우에
만 발생
fragColor.x = length(t-v); //7 cycles
fragColor.y = distance(v, t);
{sopmad, sopmad, sopmad, sopmad}
{sop, sop, sopmov}
{sopmad, sopmad, sopmad, sopmad}
{sop, sop, sopmov}
{sop, sop}
{frsq}
{frcp}
-->
fragColor.x = length(t-v); //9 cycles
fragColor.y = distance(t, v);
{mov}
{wdf}
{sopmad, sopmad, sopmad, sopmad}
{sop, sop, sopmov}
{sop, sop, sopmov}
{sop, sop}
{frsq}
{frcp}
{mov}
일반적으로 PowerVR Rogue 아키텍처 GPU의 쉐이더 성능은 쉐이더를 실행하는 데 필요한 사이클 수에 따라 달라집니다.
구성에 따라 PowerVR Rogue 아키텍처는 단일 사이클 내에서 USC ALU 파이프 라인에서 여러 명령어를 실행하기위한 다양한 옵션을 제공
2 개의 F16 SOP 명령어와 F32 <-> F16 변환, mov / output / pack 명령어를 한 번에 실행
FP32 MAD 및 FP32 / INT32 MAD / UNPACK 명령어와 테스트 (조건부) 명령어와 mov / output / pack 명령어를 한 사이클에 실행
수행 할 비트 작업이있는 경우 한 번의 사이클에서 비트 단위 SHIFT / COUNT, 비트 단위 논리 연산, 비트 단위 시프트, 테스트 및 mov / 출력 / 팩 명령어를 실행할 수 있습니다.
한 번의 복잡한 작업 (예 : rcp)과 mov / output / pack 명령을 한 번에 실행할 수도 있습니다.
마지막으로 보간 / 샘플 명령과 일반 mov / output / pack 명령을 한 사이클에서 실행할 수 있습니다.
아래 그림과 같이 ALU를 최대한 활용하려면 아래의 파이프 라인에서 한 경로의 모든 단계를 사용하는 것이 가장 좋습니다.