POPPUR爱换

 找回密码
 注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

搜索
楼主: Edison
打印 上一主题 下一主题

NVIDIA 下一代架构"Fermi" 猜测、讨论专题

 关闭 [复制链接]
101#
发表于 2008-8-20 20:16 | 只看该作者
原帖由 Edison 于 2008-8-19 13:29 发表
所有的多内核处理器本质上都可以看成是 MIMD ,但是就 SM 来说显然不是。

DX11 的 BC7/BC6 效果不错,就是不知道现在的硬件能不能实现,或者说在 shader 上的执行成本会如何。


E大能否详细说说BC6/BC7?又是如何实现地呢?:thumbsup:
回复 支持 反对

使用道具 举报

102#
发表于 2008-8-20 21:42 | 只看该作者
如果BC7/BC6 只是新的算法,并且是利用Shader来完成的,如今的DX10硬件应该可以实现,路径代码可以向DX10兼顾。纹理压缩应该不会对如今的硬件性能构成什么威胁,只是如何能更好实现而已。Hull Shader、Tessellator以及Domain Shader新加入的这三个渲染步骤看微软的意思也能在现有的DX10硬件上实现,不过我弄不明白实现的途径是什么?而且我记得AMD的Tessellator是在VS之前,现在kevin Gee提供的说法是在VS之后,这更让我糊涂了。DX10硬件无法实现的恐怕只是SM5.0而已。
回复 支持 反对

使用道具 举报

103#
发表于 2008-8-29 08:49 | 只看该作者
R600如果真如之前传说频率上G,  当初灭G80不跟玩似的
那么大规模的芯片, 不是说说就可以的

R700如果能达到R680的频率, GT200就是达到98GTX的shader频率, 也不好使

RV770多晶体管, 但是频率也要比98GTX+低不少

至于192SP, 不就是GTX260么? 448bit都干不过4870呢, 何况256bit

其实我不喜欢这样口水的, 跟你学的

原帖由 akcadia 于 2008-7-22 16:39 发表
{lol:] {lol:] {lol:]
GT200 如果SHADE频率可以达到9800GTX的层次
R700 DDR3可以回家吃便便了

RV770利用多了2亿晶体管的情况下,
也仅仅是在4AA 8AA的情况下能够领先对手,没感觉R600的架构强悍到那里去。

...
回复 支持 反对

使用道具 举报

104#
 楼主| 发表于 2008-9-4 22:44 | 只看该作者
:charles:  

在 Excel 里画了一个 G80/G100 的 SIMT 执行示意图,可能还不是很准确:



根据主要是:
“ Each multiprocessor is composed of eight processors, so that a multiprocessor is able to process the 32 threads of a warp in four clock cycles. "
" The multiprocessor maps each thread to one scalar processor core, and each scalar thread executes independently with its own instruction address and register state. "

(NVIDIA CUDA Compute Unified Device Architecture Programming Guide)。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

105#
发表于 2008-9-4 23:25 | 只看该作者
能解释一下吧?

  好像SP A在同一个cycle内同时画了四个线程? 那是同时执行的意思还是,说分配的意思?
  另外为什么一个cycle,仅有两个SP同时工作呢? 离满载差好远,才25%的效率?
  
  图上到底什么意思啊?
  SP A在同一个cycle里,应该只能执行一个线程吧?
回复 支持 反对

使用道具 举报

106#
发表于 2008-9-4 23:26 | 只看该作者
哦,换图了。
就是说啊
回复 支持 反对

使用道具 举报

107#
 楼主| 发表于 2008-9-4 23:38 | 只看该作者
原本的图受 Intel Larrabee-manycore.pdf 的说法影响了一下,画成了 SIMD 32 的,现在上面更新的是依照 NVIIDA 的说法画的,应该更准确一些。
回复 支持 反对

使用道具 举报

108#
发表于 2008-9-4 23:44 | 只看该作者
是跑完一个warp,然后才能跑下一个warp吧?   warp跑到一半的时候可以切换到另一个warp吧?
回复 支持 反对

使用道具 举报

109#
 楼主| 发表于 2008-9-4 23:57 | 只看该作者
如果遇到分支的话,就可能得装另一个 warp 跑。
回复 支持 反对

使用道具 举报

110#
发表于 2008-9-4 23:59 | 只看该作者
原帖由 Edison 于 2008-9-4 23:57 发表
如果遇到分支的话,就可能得装另一个 warp 跑。
除了分支外,其他情况还能切换吧?例如wait for memory的时候?
回复 支持 反对

使用道具 举报

111#
发表于 2008-9-5 00:03 | 只看该作者
一个warp 可以对应 一个fiber
fiber可以其实是随时切换的,有延迟就可以切换到另一个HW thread里的fiber里去了。
回复 支持 反对

使用道具 举报

112#
发表于 2008-9-5 00:11 | 只看该作者
哦,明白了,warp是基于寄存器register的计算。 如果memory没有全部ready  to register, 那个warp是不会被激活的。
所以到等所有需要的memory都装好了都已经进入到寄存器register后,warp才会启动。 所以一旦warp开始执行了,所有所需数据都来自寄存器register,一般情况下就没有warp切换,也没有wait for memory的情况。
回复 支持 反对

使用道具 举报

113#
发表于 2008-9-5 01:53 | 只看该作者
举个例子:larrabee确实是可以有4个cycles跑出64个GPU线程/fiber,但是会和GPU有点区别,往大处说larrabee,甚至是可以仅仅是用一个HW thread里的一个fiber就可以实现了(底层的原因--是因为larrabee可以做到在同一个线程里面的向量指令吞吐率为1cycle,而非一定需要4个HW thread配合下才能实现), 但是要发射4条指令。
回复 支持 反对

使用道具 举报

114#
发表于 2008-9-5 11:48 | 只看该作者
原帖由 Edison 于 2008-9-4 22:44 发表
" The multiprocessor maps each thread to one scalar processor core, and each scalar thread executes independently with its own instruction address and register state. " 

  看那个pdf V1.0的时候,nv是说G80是SIMD来的。 V2.0的就改了--SIMT。

  那应该是对抽象层的描述,而非--同一个cycle内的硬件层的情况。

 对SIMT的硬件实现,nv说了关键的一句话,
"A warp executes one common instruction at a time, so full efficiency is realized when all 32 threads of a warp agree on their execution path."


而nv认为SIMD与SIMT的本质区别是"A
key difference is that SIMD vector organizations expose the SIMD width to the software, whereas SIMT instructions specify the execution and branching behavior of a single thread."

话说用这个抽象层的标准,larrabee也是SIMT了啊。

[ 本帖最后由 gaiban 于 2008-9-5 11:49 编辑 ]
回复 支持 反对

使用道具 举报

115#
发表于 2008-9-5 15:35 | 只看该作者
原帖由 Edison 于 2008-9-4 23:57 发表
如果遇到分支的话,就可能得装另一个 warp 跑。


A warp executes
one common instruction at a time, so full efficiency is realized when all 32 threads
of a warp agree on their execution path. If threads of a warp diverge via a data-
dependent conditional branch, the warp serially executes each branch path taken,
disabling threads that are not on that path, and when all paths complete, the threads
converge back to the same execution path. Branch divergence occurs only within a
warp; different warps execute independently regardless of whether they are
executing common or disjointed code paths.

这里边说的非常清楚了。首先wrap中所有线程执行的是一样的代码。
比如下面这段代码:
if (condition) {
    a;
}
else {
    b;
}
这种代码,如果wrap中的一半线程condition成立,那么第一个cycle,这一半就先执行语句a,另外一半线程停滞,第二个cycle,前一半语句停滞,后一半执行b,执行过程是串行的。
同样的逻辑,写成LRB的代码就是
condition -> mask_reg
(mask_reg) a;
~(mask_reg) b;

[ 本帖最后由 Prescott 于 2008-9-5 15:39 编辑 ]
回复 支持 反对

使用道具 举报

头像被屏蔽
116#
发表于 2008-9-5 15:51 | 只看该作者
提示: 该帖被管理员或版主屏蔽
回复 支持 反对

使用道具 举报

117#
发表于 2008-9-5 16:28 | 只看该作者
1024sp,1024bit显存,双核心甚至4核心
回复 支持 反对

使用道具 举报

118#
发表于 2008-9-5 16:31 | 只看该作者
偶看一个wrap其实就是一条SIMD指令--是32路的SIMD指令,由于只有8个ALU,ALU的延迟为4,为了跑满载,所以要分成4批来执行。
一个计算类wrap是无法半路切换的,而是必须执行完,然后是执行下一个wrap。 下一个wrap是谁,由调度器决定。

调度器就像乱序OOO-E调度器,发射激活就绪的wrap-SIMD指令而已。  

对于分支类 wrap就要很惨很惨了。。, 运气差的话,会需要很多wrap(--指令)替他擦屁股。



一个wrap就是一条指令。SP主频除以4,什么都清楚了。


--即一个wrap是一条32SIMD指令(支持G/S),单周期延迟,单周期吞吐的小强指令。一般向量计算都很难做到单周期延迟。确实小强了。

SIMT
是虚的打打广告,而SIMD是真的。32路哦。

 


--
回一下楼下。
偶说"像"乱序OOO-E调度器。
说乱序OOO-E调度器就是CPU的OOO,那是楼下的发明。
另外,模仿一下楼下的腔调--CPU的OOO调度器实现方法较多,利用CAM来实现是其一种而已,多去看看书,寒一个。
另外“像”与“是”是两个字,楼下太激动了。  
原帖由 predaking 于 2008-9-5 16:24 发表 
你说我好心提示你,却……呵呵 果然不搞技术的思路就是不一样 牛了

还有,搞了N年Arch今天学会一个新名词“物理线程”,所以感谢楼上:〉


搞了N年Arch都没听说过物理线程?
话说回来,intel够无知的。
看这里就有你眼里的草包Intel的话
The threads you create with a threading package are logical threads, which map onto the
physical threads of the hardware.
--Threading Building Blocks.pdf


[ 本帖最后由 gaiban 于 2008-9-5 22:04 编辑 ]
回复 支持 反对

使用道具 举报

RacingPHT 该用户已被删除
119#
发表于 2008-9-6 02:15 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

RacingPHT 该用户已被删除
120#
发表于 2008-9-6 02:18 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-8-29 03:11

Powered by Discuz! X3.4

© 2001-2017 POPPUR.

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