POPPUR爱换

标题: PCWatch --以完全相反的方法論來對決的ATI與NVIDIA [打印本页]

作者: Eji    时间: 2006-7-30 16:20
标题: PCWatch --以完全相反的方法論來對決的ATI與NVIDIA
http://pc.watch.impress.co.jp/docs/2006/0727/kaigai291.htm
以完全相反的方法論來對決的ATI與NVIDIA。

本篇提到,G80的狀況"可能是80nm或90nm、並且很確實地是VS/PS分離設計"。
相反地R600當然就是ATI宣傳很久的US結構....也就是說,和NV30/R300時剛好相反,
這回ATI的位置剛好是NVIDIA當時站的位置、採取全新的結構與新的製程,負擔主要的風險。

G80有主要幾個改進:
(1)Common Shader Model
(2)Geometry Shader
(3)Stream out
(4)Orthogonalized Frame Buffer

G80做了既有管線的功能擴充、以primitive processing為基礎的GS、增設在Geometry pipeline上的Steam Out等等。
組態的部份因為情報混亂的關係還尚未明瞭,但是PS應該在24~32之間,而VS也有大幅的增設。
雖然沒什麼確切的支持,但是至少這是合理的。
增設VS的理由部分,過去因為主要都限制在CPU - FSB - Host bus等部分的頻寬、以及CPU的horse power的限制關係,沒有過大的必要;但是當GS內建於GPU之內後,VS就有可能大幅增加工作的關係,所以必須要作相關的對策。

G80做了這些增設之後,目前看來電晶體部分的需求應該不會大幅成長,die size應該也不會大幅成長,所以80nm甚至90nm也可以適當地處理,簡單講就是走在安全區的戰略。

ATI就不必提了,有趣的是本文提到S3的Destination1/2是US結構。
因為長期的宣傳表現的自信,後藤認為,NVIDIA提到的US在實作上的問題,
ATI應該是已經解決了,所以ATI在US上應該會進步比較快。
不過反過來說,NVIDIA所提的US問題,大多與效能/成本有關;
但是R600至少看來成本已經幾乎保證比G80要高....
我是認為從這個角度看,顯然ATI的表現已經不能算"解決問題了"啦。

而因為為了處理這個成本問題,R600有很大的可能使用65nm。
否則的話,面對的自然會是比已經超級大的R580還要大上一圈的超級怪獸。


GPU die size整理圖。

此外,ATI的Dave Orton認為65nm的實用化會比較快,因為手機晶片組採用65nm的速度較快,
65nm並不如想像中地沒有實證;而且65nm也因為發展上有受到手機晶片組需求的控制,
在電力耗用上進步較快。
此外,NVIDIA已經對OEM廠商表示,G80的TDP max為175w,
所以再怎麼說至少G80還是比G71吃電。B)

於是問題來了:
NVIDIA在未來會採用US也是非常明顯的,但是基本上還不需要急,先推出可以對應DX10的GPU應該相當重要。
ATI已經透過C1來推行US之故,至少不能再delay太多。
而ATI的部份,反正就是用力衝了。:shifty:
到底哪個方向才是正確的,等市場告訴我們就可以了;但是一個很確實的部份是,如果要和CPU結合的話,ATI的結構比較適當。
作者: 来不及思考    时间: 2006-7-30 16:41
提示: 作者被禁止或删除 内容自动屏蔽
作者: RacingPHT    时间: 2006-7-30 16:46
提示: 作者被禁止或删除 内容自动屏蔽
作者: eblisc    时间: 2006-7-30 17:06
原帖由 来不及思考 于 2006-7-30 16:41 发表
G80非US,确定?
现在各种不同的甚至相互矛盾的消息多如牛毛 :wacko:


吊胃口的呢
作者: Eji    时间: 2006-7-30 22:33
标题: 回复 #2 来不及思考 的帖子
G80非US原文如此。
我這篇翻得有點簡略。

[ 本帖最后由 Eji 于 2006-7-30 22:36 编辑 ]
作者: 单晶硅传奇    时间: 2006-7-31 20:51
以完全相反的方法論來對決的ATI與NVIDIA

文章看完了,唯一没看懂的是标题:huh:
作者: fineday    时间: 2006-8-1 15:23
和CPU结合也早着呢……我不认为R600有十足的把握砍死G80。
不是说R600不用65nm改用80nm了么。
作者: vp    时间: 2006-8-1 21:05
不懂日文,在google帮助下看了一下原文,算了解了大概。对于楼主的一些总结谈一些看法:
G80有主要幾個改進:
(1)Common Shader Model
(2)Geometry Shader
(3)Stream out
(4)Orthogonalized Frame Buffer
其中(2)和(3)是DX10的“硬指标”,如果不支持就意味着不支持DX10,因此G80加入是理所当然的事情。至于(1)到底是什么概念,没看懂,不过看原文举了一个例子:frame buffer management is modified to flat(google的翻译,呵呵)。看上去似乎就是一些通用化的设计。由于DX10(或者说是WGF2.0)非常强调GPU的通用性,并且在runtime层以及操作系统层都对此作出了很大的改进,”没收“了很多原本属于驱动管理的东西,比如GPU的内存管理,因此GPU必须对此作出一些硬件上的调整。比如为了支持类似内存分页(你可以认为就是GPU也将开始支持虚拟内存了。)的新特性,必须加入一些类似CPU的TLB之类的东西,估计这个(1)就是这个意思,其实也是DX10的硬指标。因此前3点都没有太多新意,凡是支持DX10的硬件都必须支持,不是NV的独家新闻。
至于(4)听上去很有意思,正交frame buffer?是什么概念,呵呵,很想知道。
至于US,DX10的spec(是spec,不是sdk)上没有硬性规定,因此就算NV真的不是US也没什么好惊讶,顺便说一句,S3的D1/2肯定是US,呵呵。至于US如何调度,相信各家会有各家的方案,但是完全可以做到不像R500那样必须固定某一比例的调度。
至于VS为什么要增加,我没有看懂。文中列举了很多原来VS不用很多的理由,比如CPU - FSB - Host bus频率等等,很有道理。不过到了DX10这些瓶颈依然不会有所变化,因此增加VS看上去没有什么意义。此外增加了GS的目的之一也是为了减轻VS的负荷和总线传输瓶颈。因为GS可以自定义规则增加primitive的定点数量,你传入3个点组成一个平面,经过GS之后可能已经是6个甚至更多顶点了,因此VS的负荷应该是减轻了,而不是加大了,相反GS肯定会分到很多负荷。不过最终情况还要看游戏开发者的意图,因为GS还有一个特性是可以直接pass掉,就仿佛它不存在,那就回到了vs/ps的时代。有人说NV可能是vs/gs公用,那未尝不是一种很好的选择,二者本来就非常相似,此外也可以随着应用程序的需要而动态改变比例。

[ 本帖最后由 vp 于 2006-8-1 21:06 编辑 ]
作者: gzeasy2006    时间: 2006-8-2 13:35
原帖由 vp 于 2006-8-1 21:05 发表
不懂日文,在google帮助下看了一下原文,算了解了大概。对于楼主的一些总结谈一些看法:
G80有主要幾個改進:
(1)Common Shader Model
(2)Geometry Shader
(3)Stream out
(4)Orthogonalized Frame Buffer
其 ...


第4个是什么东西?
作者: RacingPHT    时间: 2006-8-2 17:00
提示: 作者被禁止或删除 内容自动屏蔽
作者: 来不及思考    时间: 2006-8-2 17:57
提示: 作者被禁止或删除 内容自动屏蔽
作者: gzeasy2006    时间: 2006-8-4 13:33
原帖由 RacingPHT 于 2006-8-2 17:00 发表
Orthogonalized:
"在纯粹的正交设计中,任何操作均无副作用;每一个动作只改变一件事,不会影响其它。"
-- The art of unix programming

其实很好理解, FP16, FP32, MRT的FrameBuffer与MSAA就是例 ...


还是不能理解。
作者: Eji    时间: 2006-8-6 01:59
原帖由 PCINLIFE2006 于 2006-8-4 13:33 发表


还是不能理解。


每個動作不會影響其他、另一個意思就是每個動作都是可逆的。

----
> 如果不支持就意味着不支持DX10,因此G80加入是理所当然的事情。

基本上目前DX10既然取消caps bit,其實代表兩件事情:
1. 少做的話就會被視為不支援DX10
2. 多做的話,DX10反正也看不到,所以實質上不會多做
(或者說,要是"多做了什麼",就會變成"另一份DX10規格",如DX10.1 for R600)

所以,要說"這不是G80的改進、而是DX10的規格"的話,我是覺得不適當;
因為畢竟DX10本來就是MS和其他廠商研討歸納的東西,仍然算是"繪圖工業的改進"。

另外,這代表一件事情:DX10取銷caps bit,代表從低階到高階產品,
只會有效能差異、而不會有功能差異,是故render出來的結果,必然是一樣的。
甚至還包含了廠商之間的不同產品所產生的結果差異也會縮小(不敢說完全相同),
這能夠真正有效地鼓勵廠商使用DX所提供的特殊功能。

[ 本帖最后由 Eji 于 2006-8-6 02:02 编辑 ]
作者: Eji    时间: 2006-8-6 02:08
原帖由 vp 于 2006-8-1 21:05 发表
至于VS为什么要增加,我没有看懂。文中列举了很多原来VS不用很多的理由,比如CPU - FSB - Host bus频率等等,很有道理。不过到了DX10这些瓶颈依然不会有所变化,因此增加VS看上去没有什么意义。此外增加了GS的目的之一也是为了减轻VS的负荷和总线传输瓶颈。因为GS可以自定义规则增加primitive的定点数量,你传入3个点组成一个平面,经过GS之后可能已经是6个甚至更多顶点了,因此VS的负荷应该是减轻了,而不是加大了,相反GS肯定会分到很多负荷。不过最终情况还要看游戏开发者的意图,因为GS还有一个特性是可以直接pass掉,就仿佛它不存在,那就回到了vs/ps的时代。有人说NV可能是vs/gs公用,那未尝不是一种很好的选择,二者本来就非常相似,此外也可以随着应用程序的需要而动态改变比例。


GS的增加為什麼會導因至VS的增設,問題在於GS本身會使得vertex的數量產生增減。

DX9之前因為沒有GS,對VS輸入1個vertex,只會輸出1個vertex。
也就是VS的工作只有加速"一個vertex在空間中的位置改變"這個工作而已;
但是,GS提供了增減頂點的功能(規格中是0~1024個vertex),
所以GS的使用,大部分情況下會增加"需要被處理的vertex數",
而且是與CPU/Host(代表輸入的vertex數)無關的,
所以與過去的GPU相比,理應會需要更多的VS,
以對應GPU的GS生成的vertex數量成長。

所以,既然GS會產生vertex,那當然VS的負荷也會跟著增加,因為這兩者的工作完全是不同的。

為什麼要這樣設計呢?因為這樣一來CPU的效能高低對GPU的影響會越來越小....
而且本來interconnection的成本本來就比chip內部傳輸要來得高,
那自然全部在GPU內處理掉是個合理的作法,只要製程能繼續推的話就能硬塞的意思。:rolleyes:

[ 本帖最后由 Eji 于 2006-8-6 02:13 编辑 ]
作者: vp    时间: 2006-8-6 09:22
还是不能苟同Eji的意见。
关键在于GS在硬件pipeline中的位置,它存在于vs之后,而不是之前,因此采用GS增加vertex数量的操作是vs操作完成之后,一般不会增加vs的负荷,而对于光栅化单元到的确会增加不少负荷。只有一种情况例外,那就是通过GS的stream out特性将GS输出的vertex回流到VS,才可能出现vs负荷增加的情况。
换个思路,在DX9中就存在所谓的tessellation单元(其实这个单元功能有限,而且除了ATI之外似乎找不到别人支持这个可选特性),其作用就是增加顶点个数(但是功能非常有限),它的位置在DX9中是存在于VS之前的。在DX10中由于GS的出现,tessellation已经取消,但是值得回味的是GS并没有简单的继承了tessellation在渲染流程中的位置,而是被ms放到了vs之后。这说明ms的初衷并不是想通过GS来增加VS的负荷,相反是想让GS减轻VS的负荷。目前的问题在于GS之后设置了stream out特性,导致vertex回流的可能性出现。如果象dx9那样不存在stream out特性,那vs负担加重的说法是100%不成立的。
再看stream out的特性,它使得你直接拿到T&L和vertex blend的结果成为可能。但是拿到这些结果有什么用呢?我不知道。但是如果你不把vs当作图形处理单元看待,而是当作一个通用的矢量计算单元看的话,stream out的特性就非常有意义。由于GS还有一个特性,就是可以直接pass掉,即当作GS不存在,因此通过stream out功能你就直接拿到了vs的结果。你在做物理运算,dxva运算的时候这个特性就显出了它的实用价值。而且由于dx10 spec统一了计算精度为IEEE754单精度标准,因此将shader作为通用矢量计算单元就更为可行。
作者: ayanamei    时间: 2006-8-6 15:28
GS的存在目的是可以摆脱CPU的限制 增加顶点,改变模型,
但是增加几何和细节的模型是否是直接交给Rasterzier? 如果这个模型还需要进行动作,哪怕是最基本Tranform 也需要stream out回到VS单元去。
如果不能做到这样的互动,那么GS的作为和tessellation又能有多大的区别呢

[ 本帖最后由 ayanamei 于 2006-8-6 15:35 编辑 ]
作者: ayanamei    时间: 2006-8-6 15:32
原帖由 来不及思考 于 2006-7-30 16:41 发表
G80非US,确定?
现在各种不同的甚至相互矛盾的消息多如牛毛 :wacko:

从上次发的NV50执行流水图来看
我还是认为VS/PS是要分配到不同的执行单元去的
不然不需要这样繁琐的鉴定thread 是VS或是PS
作者: vp    时间: 2006-8-6 18:07
GS的位置正是位于VS和rasterizer之间,他的输出可以直接送给rasterizer。为什么凡是顶点就必须是没有进行过T&L过?经过T&L,vertex blending等处理的vertex送到GS之后也可以直接变形,光照的结果,纹理坐标都可以通过某些差值得到,由于差值不用一定是线性的(开发者可以任意控制),就可以保证在GS中增加出来的vertex也可以认为已经是经过T&L的结果了。
GS和tessellation完全不同,tessellation只提供了个位数的顶点生成方法,比如ATI那种在CS里让人变得圆滑和胖胖的感觉就是tessellation的一种。而GS提供的是通用方法,利用GS单元,你可以做出任意的vertex变化。
如果GS出来的vertex必须再来VS做T&L,那么我还是要问为什么不直接把GS放到VS前面去,而是象目前这样放到了VS和rasterizer之间?
ayanamei认为频繁判断是VS还是PS正是说明了NV不是US,这个观点是不正确的。虽然我不知道NV50是什么,但是据我所知的某个US结构也需要判断送来的thread究竟是VS还是PS。因为有几个原因:首先硬件会根据不同的shader做出不同的prefech动作,显然对于VS和PS来说这种prefech是完全不同的,你不判断怎么知道去prefech什么东西?此外硬件上的限制也会导致即使是US也不可能任意执行VS/GS/PS。当前都是以所谓的EU来封装VS/GS/PS的,每个EU中会有4个shader管线,但是一般来说即使是US也不可能让这4个shader可以同时做出不同的shader动作,一般都是把一个EU或者一个EU的一半作为基本单元来进行shader的调度。这样有利于节省gate count。
作者: ayanamei    时间: 2006-8-6 18:22
原帖由 vp 于 2006-8-6 18:07 发表
GS的位置正是位于VS和rasterizer之间,他的输出可以直接送给rasterizer。为什么凡是顶点就必须是没有进行过T&L过?经过T&L,vertex blending等处理的vertex送到GS之后也可以直接变形,光照的结果,纹理坐 ...

我的意思是说  GS之后的数据未必直接给 rasterizer,也可能重复丢给VS这样复杂的动作,从而加重VS负怠#应该不会是死板的VS-GS-PS  
至于认为NV50 不是US,上面的知识比较直观的感觉,其实细节也不是很清楚:whistling:
作者: gzeasy2006    时间: 2006-8-7 13:28
原帖由 ayanamei 于 2006-8-6 18:22 发表

我的意思是说  GS之后的数据未必直接给 rasterizer,也可能重复丢给VS这样复杂的动作,从而加重VS负怠#应该不会是死板的VS-GS-PS  
至于认为NV50 不是US,上面的知识比较直观的感觉,其实细节也不是很清楚:whis ...


NV50肯定不是US吗?

[ 本帖最后由 gzeasy2006 于 2006-8-7 19:16 编辑 ]
作者: gzeasy2006    时间: 2006-8-7 19:20
原帖由 fineday 于 2006-8-1 15:23 发表
和CPU结合也早着呢……我不认为R600有十足的把握砍死G80。
不是说R600不用65nm改用80nm了么。


65nm今年是不可能了。
作者: gzeasy2006    时间: 2006-8-9 12:35
原帖由 单晶硅传奇 于 2006-7-31 20:51 发表
以完全相反的方法論來對決的ATI與NVIDIA

文章看完了,唯一没看懂的是标题:huh:


我也是
作者: ayanamei    时间: 2006-8-9 21:19
原帖由 PCINLIFE2006 于 2006-8-7 13:28 发表


NV50肯定不是US吗?

除了NV谁能拍着胸脯说g80肯定是什么构架呢 #
作者: ayanamei    时间: 2006-8-9 21:20
原帖由 PCINLIFE2006 于 2006-8-7 13:28 发表


NV50肯定不是US吗?

除了NV谁能拍着胸脯说g80肯定是什么构架呢 #
作者: angelion    时间: 2006-8-10 21:55
原帖由 PCINLIFE2006 于 2006-8-4 13:33 发表


还是不能理解。


  Orthogonal 是一个非常好的条件,简单的说就是 垂直

  如初中所学的 X Y 座标系,那就是一个 Orthogonal 的坐标系

  为什么定义他是 Orthogonal 的,原因在于坐标点沿着 X 轴方向数值发生变化时,

  不会影响 Y 轴上的数值变化

  这一定义可以推广到多维空间内

  数学上建立 Orthogonal 的优势在于,人们可以对 Orthogonal 即垂直坐标系里的点做精确定量分析

  再者,将这一性质使用到工程学领域内,

  大概的意思可能就是说各个处理单元可以彼此独立互不干扰的处理自己的任务吧...

[ 本帖最后由 angelion 于 2006-8-10 21:57 编辑 ]
作者: angelion    时间: 2006-8-10 22:15
原帖由 来不及思考 于 2006-8-2 17:57 发表
很有意思的一个东西 :p


   一个近似的二次插值,文中对近似插值误差的极小化极大值做了下评估,

   这种近似插值是一个针对硬件和实际应用的算法设计

   貌似意图在于降低占有带宽(减少运算占用的处理单元),获得更高的计算效率

   这个大概是对硬件驱动的算法设计有好处吧,

   小心又有人拿来说 NV “作弊”了,哈哈 ...:lol:

[ 本帖最后由 angelion 于 2006-8-10 22:17 编辑 ]
作者: gzeasy2006    时间: 2006-8-12 10:19
原帖由 angelion 于 2006-8-10 21:55 发表


  Orthogonal 是一个非常好的条件,简单的说就是 垂直

  如初中所学的 X Y 座标系,那就是一个 Orthogonal 的坐标系

  为什么定义他是 Orthogonal 的,原因在于坐标点沿着 X 轴方向数值发生变化时,

...


能不能说得通俗一些?太难了,我无法理解。
作者: Eji    时间: 2006-8-12 11:49
原帖由 ayanamei 于 2006-8-6 15:32 发表

从上次发的NV50执行流水图来看
我还是认为VS/PS是要分配到不同的执行单元去的
不然不需要这样繁琐的鉴定thread 是VS或是PS


ATI當初提出的一些關於US的結構,也是有對thread進行pixel or vertex的辨別耶?
作者: Eji    时间: 2006-8-12 14:28
标题: 回复 #6 单晶硅传奇 的帖子
抱歉,把標題改成這樣好了:
以相反的手法來對決的ATI與NV。
這樣會不會比較容易了解?
這指的當然就是一個先衝US、一個不衝的態度。
作者: Eji    时间: 2006-8-12 14:38
原帖由 vp 于 2006-8-6 09:22 发表
还是不能苟同Eji的意见。
关键在于GS在硬件pipeline中的位置,它存在于vs之后,而不是之前,因此采用GS增加vertex数量的操作是vs操作完成之后,一般不会增加vs的负荷,而对于光栅化单元到的确会增加不少负荷。只 ...


如果GS做完的model分割不送回VS,你要它們怎麼去處理那些大幅增加的model複雜性?
1會變2、2會變3.....可以消滅vertex, 就是代表可以"分割model",
如果你不送回VS的話,這幾個model就只能共用一個T&L的結果了耶。

光作tessellation的話,你可以視為一種Modeling data的資料壓縮,
可是它還是不能刪去頂點,刪去頂點的作用就像我上面說的,可以作為分割model的作用,
分割model的話自然就是要把這幾個model做進一部的分離、加上個別的物理性質,
所以不增設VS的話,GS就不需要加上刪除頂點的功能了,因為不會分割model。

反過來說,也因為GS加上刪除頂點的功能、可以實作model分割,
所以我們可以透過增設更多的VS,來實作GPU內的較大規模物理模擬,
而不像PS3一樣要透過Cell的浮點資源來處理物理。
當然,這麼一點點的VS增設,只能說取代部分的細部分子物理,
而不是像Cell那樣可以在伺服器的範疇作整個遊戲內的超大規模物理.....
但是你可以把Cell視為巨觀、DX10的VS與GS互動視為微觀。

再進一部要進化的話,就得把US、multiple fequency domain、CPU+GPU等等結構都考慮進去了。

[ 本帖最后由 Eji 于 2006-8-12 14:40 编辑 ]
作者: vp    时间: 2006-8-12 18:27
原帖由 Eji 于 2006-8-12 14:38 发表

如果GS做完的model分割不送回VS,你要它們怎麼去處理那些大幅增加的model複雜性?
1會變2、2會變3.....可以消滅vertex, 就是代表可以"分割model",
如果你不送回VS的話,這幾個model就只能共用一個T&L的結果了耶。

这样的话还是没法解释为什么MS把GS放到VS后面而不是前面。
VS做了T&L,GS完全可以对其进行差值,然后得到新增加的点的T&L结果。否则GS出来的结果有的已经做过T&L,有的是新增加出来的,然后回到VS再重新做一遍T&L,那第一遍T&L不是无用功吗?
似乎DX10 sdk中已经给出了一些GS的用途示例,去看一下就知道MS的原始想法了,就是最近老是没空。
作者: vp    时间: 2006-8-12 18:34
摘录了一段DX10 sdk preview中对于GS应用的一个教程中的文字:
The geometry shader exists between the vertex and the pixel shaders in the graphics pipeline. Since new geometry can potentially be created by the geometry shader, we must ensure that they are also properly transformed to projection space before we pass them off to the pixel shader. This can either be done by the vertex shader before it enters the geometry shader, or it can be done within the geometry shader itself.
可见微软的本意没有让GS出来的点仅仅是为了做T&L而重新回到VS中。如果是这样,他希望你在之前的VS中就已经算完,或者在GS中去做新添加点的T&L。
作者: RacingPHT    时间: 2006-8-12 20:14
提示: 作者被禁止或删除 内容自动屏蔽
作者: gzeasy2006    时间: 2006-8-13 16:26
原帖由 vp 于 2006-8-12 18:27 发表

这样的话还是没法解释为什么MS把GS放到VS后面而不是前面。
VS做了T&L,GS完全可以对其进行差值,然后得到新增加的点的T&L结果。否则GS出来的结果有的已经做过T&L,有的是新增加出来的,然后回到VS ...


GS的用途主要是?
作者: ayanamei    时间: 2006-8-14 01:46
原帖由 Eji 于 2006-8-12 11:49 发表


ATI當初提出的一些關於US的結構,也是有對thread進行pixel or vertex的辨別耶?

没有涉及到这方面
C1 的时候,貌似
只是相当引人注目的强劲Threading manage
具体其操作细节好像没有发现
作者: 来不及思考    时间: 2006-8-14 14:06
提示: 作者被禁止或删除 内容自动屏蔽
作者: gzeasy2006    时间: 2006-8-19 10:05
看看G80怎么对抗R600的64条“真实”流水线!




欢迎光临 POPPUR爱换 (https://we.poppur.com/) Powered by Discuz! X3.4