POPPUR爱换

 找回密码
 注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

搜索
查看: 3285|回复: 16
打印 上一主题 下一主题

想问一个问题,怎么Gpu好像没有Fpu这概念?

[复制链接]
跳转到指定楼层
1#
发表于 2007-7-8 02:39 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
不是经常说多少Flops的处理能力吗?还有就是我怎么感觉Shader里都是Alu?Alu能处理浮点数?还是难道显卡处理的都是整数,但又没这可能啊!就算Pixel shader不存在小数点但顶点应该有啊,光棚化时同样应该有小数啊(不用的话像素之间不就一格格了吗),而且Hdr不是动用浮点来计算的么?希望各位大大解答,问题比较多!对于我这些鸟来说一直都不太懂!
2#
发表于 2007-7-8 03:54 | 只看该作者
:lol: :lol: :lol: :lol:
这不是逼我发表情么……
回复 支持 反对

使用道具 举报

3#
发表于 2007-7-8 05:06 | 只看该作者
GPU里面全是FPU吧,ALU可能没有吧
回复 支持 反对

使用道具 举报

4#
发表于 2007-7-8 05:45 | 只看该作者
:a) :a) :a)
回复 支持 反对

使用道具 举报

5#
 楼主| 发表于 2007-7-8 11:06 | 只看该作者
怎么可能呢?明明以前看Shader的分解图就看见Alu,而且G7x还是超标量的Alu(两个),虽然指令并行性上并不完全一样
回复 支持 反对

使用道具 举报

6#
 楼主| 发表于 2007-7-8 21:26 | 只看该作者
小顶一下,大大们都去哪了?
回复 支持 反对

使用道具 举报

7#
 楼主| 发表于 2007-7-9 21:10 | 只看该作者
没人对这个有疑问?高手都去哪了?
回复 支持 反对

使用道具 举报

8#
发表于 2007-7-10 00:17 | 只看该作者
楼主肯定没经历过远古的386时代,,,,,,,,当时的80387就是fpu
回复 支持 反对

使用道具 举报

来不及思考 该用户已被删除
9#
发表于 2007-7-10 00:29 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

10#
发表于 2007-7-10 01:35 | 只看该作者
首先你要清楚,3D图形是可以用定点数来计算的,包括顶点、setup、z-buffer、fragment、pixel、texture等等,例如现在不少的手机跑的真3d图形都是定点数跑出来的。最初的3D图形芯片最基本的定义就是是否具备z-buffer,然后是setup、透视纠正等等,后来是multi-texture,在这个阶段里,只有setup、depth buffer也许还有透视纠正或者说纹理定址是使用到浮点。

在nvidia提出GPU后,引入了T&L,这个时候GPU开始具备了较大规模的浮点运算单元,但是T&L还只是属于固定功能的,而且无法把结果直接输出到内存里。

到了gf3的时候,人们引入了vertex shader以及所谓的texture shader开始提出,基本上就是纹理定址单元跑一些计算,纹理定址单元式fp32的,算是具备一定的浮点计算功能,vs虽然是fp32,但是作用仍然只是限于计算顶点。

nv3x/r3xx的时候,引入了fp16/fp24/fp32等多种pixel shader精度,ps可以把结果输出到内存(vs也可以但是采用的方式是r2vb,你得到的格式只能是vb),但是仍然是一个个框或者说是矩阵的格式,而不是数据流。到了这个时候,你可以把gpu看作是具备一定限制(精度、流控制等等)的fpu矩阵(事实上gpu此时能跑的不只是浮点,还有继承自前辈的定点纹理、简单的整数计算等等)。

nv4x/g7x/rx1000时代,人们在ps里引入了流控制,可以执行分支指令以及其实在nv3x时候就有的一些简单的整数、字符串指令。

g80/r600时代,配合cuda/ctm等gpgpu界面以及stream out,突破了基于frame的数据格式,能够实现数据流输出。

现在在g80/r600的shader里,不仅有fpu,还有fxu,但是为了方便和tmu、rop等简单的区分,加上其中的一些单元的指令发射端口是重叠的,我们都把fpu、fxp这类可编程资源的运算单元统称为ALU,它们不只是跑浮点。

大家看到的pixel是setup engine把3d坐标转换成屏幕光栅坐标的点,从这一刻开始3d从前面连续的顶点、图元、几何模型开始变成是离散的屏幕栅点,进入fragmet处理阶段(还没变成最终渲染结果的屏幕光栅点),经过fragmet处理、贴图、多取样后的最终结果就是pixel,大家看到的pixel都是离散的,也因为这样才需要在低精度的显示设备上作多取样降低锯齿现象。现在的显示卡提供的pixel rgb精度大都是8-bit int,三原色分别可以显示256个等距灰阶,对于22英寸屏幕大都是1600分辨率等级,跑跑游戏是基本足够了,对于你来说,就是所谓的连续吧。

gpu仍然在不断地向cpu靠拢。

最后,希望大家不要动不动就拉到google上,很多东西都不是简单靠google搜索出来的,类似这样的问题就是例子了。
回复 支持 反对

使用道具 举报

来不及思考 该用户已被删除
11#
发表于 2007-7-10 01:42 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

12#
 楼主| 发表于 2007-7-10 03:41 | 只看该作者
思考的说法果然浅显易明!不过对于E大那段,还是存在不少疑问:1,setup后不应该打去Pixel shader吗(平面)?应该是乱序的啊?怎么还要用浮点?是Setup的过程吗?2,关于纹理定址方面,他的作用是定义像素的位置?(其实我搞不懂纹理和贴图有什么分别,纹理可否理解位像素群?),是立体的原始空间定址还是转为平面空间后定址呢?如果是平面空间定址我就不太明白为什么要动用浮点数,平面坐标都是整数啊(个人猜测,毫无根据)。还是望大大们耐心教导!这些东西高中的书本基本上没接触过,很多都是平时看一些高手留言看回来的,所以有些根本的东西还不清楚!对于这方面,感觉很难连接起来(比如从小的指令,再到大的架构方面,一些操作还是很难明白),希望大大们能详细说一说!Ps:其实N年前在Gzeasy就看到了Cho的一编关于渲染管道的文章,后来发现以前的精华都没有了,实在很可惜!希望Pci能再建一个像Gz以前那样的精华区!现在这个好像成了英文翻译区了
回复 支持 反对

使用道具 举报

13#
发表于 2007-7-10 09:05 | 只看该作者


在d3d中,是把texture和fragment pragram都称作是pixel shader的。

setup完成后,一般是先作作纹理的投射和转换、计算纹理地址、纹理过滤,然后是计算fragmet。使用浮点是为了确保精度和动态范围,例如纹理坐标计算必须较高的精度。

纹理就是纹理,空间上来分有3d、2d、1d的,2d的就是一张bitmap,最常使用的是2d的纹理,人们使用纹理是为了。你也可以称之为贴图,但是贴图通常又被理解成是一个动作——纹理映射(texture mapping),就是把纹理坐标对应的texel(纹理元素)映射到光栅坐标上的fragmet上。

在你看来屏幕坐标(XY)是离散的、整数的,但是在很多情况下还是需要用到浮点或者定点的,例如纹理UV坐标和像素XY坐标的转换、子像素计算等。

...我建议你还是多看看英文的资料,但是如果你需要一些中文的参考,可以考虑一下: http://product.dangdang.com/product.aspx?product_id=8897163

实际上你还应该看看Computer Architecture - A Quantitative Approach。
回复 支持 反对

使用道具 举报

RacingPHT 该用户已被删除
14#
发表于 2007-7-10 09:32 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

15#
发表于 2007-7-10 10:19 | 只看该作者
留个名,受教育:a)
回复 支持 反对

使用道具 举报

16#
 楼主| 发表于 2007-7-10 14:33 | 只看该作者
看完E大这段话我大约明白了!谢谢E大建议!还有就是,女王所说的,怎么知道可不可预测?有什么机制做这个么(怎么那么像分支预测?)!Ps:怎么人人都说手机的3d啊,很特别么?
回复 支持 反对

使用道具 举报

17#
 楼主| 发表于 2007-7-10 14:36 | 只看该作者
哦,忘了问!E大介绍的那本书,广州图书馆有没有?或者什么地方才有?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

广告投放或合作|网站地图|处罚通告|

GMT+8, 2025-12-1 05:20

Powered by Discuz! X3.4

© 2001-2017 POPPUR.

快速回复 返回顶部 返回列表