※ 引述《KotoriCute (Lovelive!)》之铭言:
: 推 a951l753vin : 请JK大解释 01/03 17:12
以我的理解,GCN是一种VLIW架构的变形(或者说,VLIW+SIMT的特化形式)
他具有VLIW本身的好处 而VLIW会有的缺点它只是稍微轻微一点
但还是会受到影响
什么情况?假如把战场先拉回VLIW vs 其他竞争者
那其他竞争者最典型的就是Superscalar的设计
我们先做个比喻 假设有一个货运站 他要不断的送货出去
而工具是车头跟车斗 两个各要一百万元
所以 两百万元 可以单个时间内送完一趟货
如果有一天 跟上面老板申请说要增加一些经费 先多买一些
设备 以后赚钱会赚回来
那么有几种方式?
1. 全部升级成 一个车头+5个车斗 这样六百万元只比原本贵三倍
可是号称可以载5倍的数量喔
(VLIW思维)
2. 增加三倍的车头+车斗的数量 六百万元 帐面上数字为三倍
(Superscalar思维),也许还要其他看不见的成本使得实际成本超过三倍
看起来1.比较好吧 数字增加得很快又比较便宜
基本上VLIW的思维就是1.
可是.真的是这样吗 除了数字好看(vobor会比较爱)之外
对不起 送货的需求如果单笔来 不一定是每次都有一样多的
货斗量的需求 不管他叫一车还是叫两车三车 你都要把这五个车斗
开出去一趟 所以实际数据就取决于 你到底能不能让出货
量都能载到第四车第五车 不然你就是用三倍的成本但常常
载不到三倍.
有没有什么好办法?在真实世界 就是设计好后 期待软件比较努力
让你不会空掉 以这个例子比喻 就是要求客户不要送急件 最好累积
东西满了四倍五倍再来叫货.真实世界中有这一点可行 就是用loop unroll
或者software pipeline累积平行度 一次排四份五份平行的工作到
不同的VLIW 执行单元上就不会空掉
但真实世界也会因为VLIW设计的其他舍弃掉的部分 造成
不能常常排这些平行的code
通常啦,有稍微一点涉及到VLIW的时候 就是硬件设计
的部门和做编译器的部门开始内战的时候...
软件的人认为硬件只是想制造自己帐面上的业绩
(硬件面积只成长几十趴 帐面数字可以增加好几倍)
硬件的人认为软件的想早点下班 不肯努力排指令
(两边都认为对方只想省自己的10%工作量 害自己
增加50%的工作量 但是互相又不懂对方的工作所以无法继续沟通下去 XD)
比较可能的情况就是VLIW之后会边做边修
或者发现问题很大就砍掉了.
到目前有提到VLIW的问题其实不见得对应到GCN的情况
不过GCN的前身的前身,VLIW5确实有这么惨没错
还在用VLIW5的年代,ATI toochain有一个后门,可以
不只看虚拟的CAL IL,可以把DX or GL的Shading Language
以及OpenCL弄去看他真的进driver排成VLIW5的时候的样子
当时是真的很惨,排成1~3几乎三分天下,4/5都看不太到...
不过等我要用这个后门做计划骗钱的时候后门就不见了.
那.......又回到原本问题
1. 全部升级成 一个车头+5个车斗 这样六百万元只比原本贵三倍
可是号称可以载5倍的数量喔
2. 增加三倍的车头+车斗的数量 六百万元 帐面上数字为三倍
也不是只有这两个方向可以选
比如说可以
3. 增加新车 1/4的车有一个车斗 1/2的车有2个,1/4的车有5个车斗
等客户叫货就依照需求 派不同的车去