https://mp.weixin.qq.com/s/Vyn1bKaBMHommxbnFPPQeg

Unity对Shader文件进行编译的时候,DX9和DX11的版本会直接生成汇编码。

?

 
length(i.worldPos)

DX9

DX11

由于这些代码是最终的指令,大部分指令执行时间是“差不多”的,可以用来预估计算量。但移动平台则是各厂商驱动各自进行的编译,各家都不一样,不好判断。

但DX9毕竟针对的是非常古老的硬件,很难想象现代GPU还会和它保持一样。实际的指令应该会更接近于DX11。

以下为列表(用|隔开的数据,前面的部分是计算单分量时的指令数,后面的部分是计算float4时的指令数)

总结一下便是:

  • 反三角函数非常费

  • abs和saturate是免费的

  • 除了反三角函数外,fmod和smoothstep比预期更费

  • log,exp,sqrt(单分量)的成本实际上很低,所以由他们组合成的pow也不高

  • sin,cos在DX11使用了专门一条单指令,成为了低成本函数

另外还有个基本常识:绝大部分GPU是一次性计算4个分量,计算一个float4和只计算单个float耗时是一样的。当计算float时,剩下三个分量的时长会被浪费。

然而,每条指令的时间成本确实可能是不一样的。这个和具体硬件有关。

很难找到移动平台具体GPU的数据,可以参考下文看看一些主流GPU的情况,相信他们总是有一些共性的。

结果是,1/x, sin(x), cos(x), log2(x), exp2(x), 1/sqrt(x)这些指令的时间成本是一样的,而且和普通的四则运算很接近(个人猜测是通过查表实现的)。

但是sin,cos毕竟在旧硬件上成本较高,由于不清楚硬件的具体情况,还是要尽可能少用。


预估成本还有一个办法,是根据公开的GPU的GFLOPS(Floating-point Operations Per Second每秒执行浮点运算次数)来评估每个着色器理论极限算力,便能知道一个着色器里可以允许多少条基本指令。

这当然很不精确,因为纹理采样,顶点,光栅化等等众多成本都没有考虑在内,但是有一定的参考价值。

iPhone 4s使用的芯片是Apple A5,它的FLOPS是12.8G,屏幕分辨率是960x640,分到一帧的一个像素后,结果是

12.8*1024^3/960/640/60 = 372。

根据FLOPS的定义,时间最短的基本指令“乘加(MAD)”需要花掉2FLOPS,那么单个屏幕像素能执行186条指令。

假设Overdraw是5,那么一个像素着色器能执行37指令。

虽然37指令这个结果显然比实际多多了,但起码是在合适的数量级范围内。可以通过帧率测试来计算“损耗比例”到底是多少。

而且,这样做我们其实得到了一个上限值。如果你在像素单元的指令数超过了37(比如用了两次atan2),那从物理角度是绝对不可能达到满帧的。

知乎@flashyiyi

[内容分享]粗略判断Shader每条代码的成本的更多相关文章

  1. Android 应用程序之间内容分享详解(一)

    一个Andoird应用程序的重要的地方是他们有相互沟通和整合的能力,一个应用程序可以和另一个应用程序交互,接下来我们来看看Android应用之间的内容分享 当你构建Intent的时候,必须要指定Int ...

  2. ABP架构设计交流群-上海线下交流会的内容分享(有高清录像视频的链接)

    点这里进入ABP系列文章总目录 ABP架构设计交流群-7月18日上海线下交流会内容分享 因为最近工作特别忙,很久没有更新博客了,真对不起关注我博客和ABP系列文章的朋友! 原计划在7月11日举行的AB ...

  3. 基于jQuery滑动分步式进度导航条代码

    分享一款基于jQuery滑动分步式进度导航条代码.这是一款基于jquery实现的网站注册动态步骤导航条代码.效果图如下: 在线预览   源码下载 实现的代码. html代码: <div id=& ...

  4. Phpcms v9 实现首页|列表页|内容页调用点击量的代码

    很多朋友经常问Phpcms v9的首页.列表页.内容页点击量如何调用.今天给大家分享phpcms V9如何分别在首页.列表页.内容页调用点击量代码 1,Phpcms v9首页调用点击量 {pc:con ...

  5. Ajax (Asynchronous javascript xml) 搜索框核心代码(JQuery) Ajax判断用户名存在核心代码 附:原生js的Ajax代码 其中有json的一句话解释

    前端 <script type="text/javascript"> $(function(){ $("#tid").keyup(function( ...

  6. iOS的应用程序实现之间的内容分享

    前言 我们在iOS的平台上想要实现不同应用之间的内容分享一般有几种常用方式: 一种第的英文通过AirDrop实现不同设备的应用之间文档和数据的分享; 第二种是给每个应用程序定义一个URL方案,通过访问 ...

  7. 如何去把内容分享到whatsapp上?

    使用场景,公司利用whatsapp来推广商品,需要把商品和一些基本信息分享到WhatsApp上; 一:在html的head标签里面通过meta标签加上一些分享的基本网站信息,具体代码如下 <me ...

  8. 【转】css布局居中和CSS内容居中区别和对应DIV CSS代码

    原文地址:http://www.divcss5.com/jiqiao/j771.shtml css布局居中和CSS内容居中区别和对应DIV CSS代码教程与图文代码案例篇 对于新手来说DIV CSS布 ...

  9. RunJS - 在线编辑、展示、分享、交流你的 JavaScript 代码

    发现一个很好玩,很强大的网站 RunJS - 在线编辑.展示.分享.交流你的 JavaScript 代码   http://runjs.cn/ 比如: http://runjs.cn/detail/l ...

随机推荐

  1. Fiddler 使用技巧

    1.Host重定向,将192.10.11.12:8091的地址重新定向到127.0.0.1:8080 if (oSession.host=="192.10.11.12:8091") ...

  2. 差分IO标准

    差分标准 和单端IO不同的是,差分电平使用两根信号线来传达信号,这两根信号线在传输过程中如果遇到同样的噪声源(共模噪声)干扰,在接收端,这样的共模噪声会在两个信号相减时消除,这样并不会给接收电平造成影 ...

  3. Java-API-POI-Excel:XSSFWorkbook Documentation

    ylbtech-Java-API-POI:XSSFWorkbook Documentation 1.返回顶部 1. org.apache.poi.xssf.usermodel Class XSSFWo ...

  4. 2015.1.3 DataGridView中嵌入其它控件

    1.按正常方法绑定待嵌入列的值,先赋值为空也行. 2.添加combbox到datagrivdview中 dvaw.Controls.Add(cb_dir); 3.添加DataGridView Mous ...

  5. Solaris10安装配置LDAP(iPlanet Directory Server )

    Solaris10安装光盘自带了iPlanet Directory Server安装包,系统管理员可以利用iPlanet Directory Server在Solaris系统创建一个LDAP Serv ...

  6. List里将某字段相同的元素合并

    工作中遇到将List中某字段相同的元素合并,笔者觉得有必要记录下来,以备以后参考,好了,直接上代码 import java.util.ArrayList; import java.util.List; ...

  7. MPEG-PS封装格式

    据传输媒体的质量不同,MPEG-2中定义了两种复合信息流:传送流(TS:TransportStream)和节目流(PS:ProgramStream) PS文件分为3层:ps层(Program Stre ...

  8. [Python Study Notes]七彩散点图绘制

    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ...

  9. 关于taskaffinity属性的作用

    意味着这activity更喜欢哪个TESK,具体见下方说明 当一个包含FLAG_ACTIVITY_NEW_TASK标志的intent启动一个activity时. 一个新的activity,默认地启动到 ...

  10. zabbix监控报错zabbix server is not running: the information displayed may not be current

    zabbix监控搭建完后打开web界面http://xxx/zabbix报错: zabbix server is not running: the information displayed may ...