GPU Gem 2 Chapter34 메모

3840 단어 ShaderGPU

Chapter 34. GPU Flow-Control Idioms



Flow-Control Challenges



平行结构中两个最常见的机制是单指令流多据流(single instruction, multiple data, SIMD) 和多指令流 다수 거류(multiple instruction, multiple data, MIMD). SIMD 结构中所有的处理器同扶执行同一个指令流. MIMD 회복 중 부동적 망리기 유행 도행 부동적 지령류.

对于GPU有三种办法 进行分支操作 : MIMD 분지, SIMD 분지 화상 晁码.

MIMD 분지 시 이상적인 방안. GeForce6 之后在顶点着色器中支持 MIMD 분지.

SIMD 中因为处理器同时只能执行一个指令流、片元随机选取一个分支时、其他处理器必须等待其运行结束. SIMD 재분지 조건 상당한 공황적 정정하하 유용, 단시재 비정상적 정췌하시 비상 昂贵的.

공제지피용우구 일점적 환과래 모납분지.

기류류 공제책략(Basic Flow-Control Strategies)



预测(Predication)



최简单的方法就是GPU快速预估分 支然后抛弃其中一个. 요점 취시 여과분 지리적 함수 是從庞大的话就会很时.所以预测适合小的分支.

이지유수반적 상계



시즈키 ​​분지 해석



진량 피면재 순환내 사용 분지. 진량 불필요 사용 끼워 순순. 사용 독립적 순환.

预计算



对于一个范围内值是固定的判断来说、提前将结果後存起来、只要预滋结果不变直接取可以後使用而不用计算. 가능한 제공 거대한 성능 제단.

Z-Cull



可以使用另一项GPU的特性来利用预计算的结果、从而完全跳过不要的开销.

Z-cull是一种比较输入的深度(depth z)和z缓冲(z-buffer)里的z值的技术(사이노 취是Z-test). 여과 毅试失败, 취회 재피 弃厃掉.

z-cull적 伪代码, 一一个Pass进行 z-test 并踢出不水要的像素. 제 2 단 Pass 사토 리리 통치 z-test적 상소.

image-20190801110906972

z-culling 통상 피GPU용 내정조략적 해석 而不是一个逐片元的操作GPU 只有在瀓存中一小片连续区域里的片元 전부 毅试失败的时後才会跳过渲染 조작. 그곳에서, z-cull 只有在分支有一定贞贯性的情况下才能提供性能 제升.

image-20190801103431570

z-cull 并不是分支瀉择的处理, 只是他能够让着色器不去执行分支瀉择. z-cull是一个可以跳过很多无用工作的基于一个静态和预处理理强力的手段.

분지 지령



现代 GPU 일반도 지지. 여과 공 间比连连续, 效率更高.

image-20190801105008398

选择合适的分支功能



择分支功能是基于分支里的代码量以来表现的状态数量.对于短分支(2-4个指令)、推荐使用预测.对于嵌套在大程序里的分支、推荐使用分支指令而不是z-cull. 사용 z-cull 수요 보존 소유적 정도 서장 态, 在一个单独 的 Pass 中处理分支.而而,如果能够高效地分离程序理的分支元素的话,z-cull能 제공 최선적 효과율.

자기 버드나무



작동 초학자, 对静态和动态分支的概念不是很理解.稍 미타니 가료 일하.

找到一个很理想的 개념 해답 .

静态分支(static branching) : 是同样的分支在整个draw call 终会被虃用.比如基于Shader的属性和非per-vertex/per-pixel数据(常数之繻的).这种分支 통상 来说没有题.虽然有些开销,但是GPU可以比较辻松的对所有的vertices/pixels中应用相同的代码.

动态分支(dynamic branching):是当你对每一个vertex/pixel进行处理的时候条件会不同. GPU 处理器会把对顶点用同样的代码进行处理、然后如果其中有的数据是别的分支的话、那么GPU的处理器会적.为了保证效率, 最好数据是空间连续的.

一些旧的处理器和 Shader Models(比如Unity默认的SM2.0) Unity회 내부 충행 만리.

좋은 웹페이지 즐겨찾기