|
本帖最后由 ic.expert 于 2009-5-22 03:04 编辑
kernel和Shader还是有区别的,Kernel主要的是依靠Prefetch来隐藏延迟,而Shader是依靠TLP。Brook在GPU上面做了很多妥协,这是Brook在GPU上面做的妥协之一。严格意义上来说,SM3下层的实现和SM4有本质不同,SM3可以通过对Prefetch-based Graphics Pipeline 进行简单改进从而得到想要的设计,而SM4则必须使用基于Multi-threading的TLP模型作为体系结构的设计基础。所以从这个角度上来说,Brook的妥协并不大。 所以,关于SM3和SM4的实现还是有很大区别的。之前我并没有特意强调这一点。
至于SPE上使用C++,被有些观点认为是一件费力不讨好的事情,至少面向的DLP学术领域是这样的。而且Cell本身的设计就是Stream Arch的设计,可以说它是一种IPL(命令式语言)下的Dataflow模型,如果还是使用C++这种所谓的“老旧的”IPL,那开发DLP也根本无从谈起。包括Cell在的SPE之间使用了Message Passing和Ring NOC来组建他的Hierarchical Storage Structure,也是为了DLP的考虑。所以StreamC是Cell最好的编程模型之一。而不是C++。
至于“一般, GPU会准备好G-buffer, 这样CELL只需要做很确定的寻址, 几乎没有什么性能损失.”可能我理解有误,我的条件是说,没有GPU参与的情况下,单凭Cell来Rendering。如果GPU填充好纹理数据到G-buffer,那倒是无所为,但是这会影响到灵活度。G-buffer的Size毕竟有限。不知道LS怎么看?
最后,CS我实在不敢恭维,就是CUDA翻版,是典型的SM4的进化版本,其实SM4就是导致GPU设计复杂度的最大的醉鬼祸首。从编程模型角度上来说,Graphics Pipeline本身就是一个Data-driven的东西,包括Shader也一样,微软却一再在这里大搞IPL来提高所谓的“灵活性”。的确,灵活度是提高了,同时复杂度也直线上升,并且在大规模并行的情况下,由于纹理部分的存储接口很难得到改进,所以更加导致随着并行性不断提高 ,复杂度和功耗呈几何级数增长。在某些学术界人士着这边看来,这并不是一个明智之举,Imagine的老大曾经大致这样说,“我们失去了最重要的东西,那就是带宽”。带宽不但会制约性能,还会给设计的复杂度添加无尽的麻烦。而且带宽在Graphics应用上更显得珍贵,所以如此下去,恐怕DX会在不久将来的某天终将彻底推倒了重来。实际上,前几年我们就有了这样的认识,并且去年NV美国方面已经有其他的工程师,就DX12的实现,给微软发过多封Email了,来探讨如何Data-Driven。当然,不仅仅为了简化,这也是Raytracing的目的之一。
回到主题上来,如果说PS3仅仅是在一个GPU的环境下坐位一种Image-based rendering 平台,而我们称之为基于Cell的Deferred Shading,那的确和TMU和Tile是一点关系也没有。实际上,这种类图像处理的工作,这也是Cell的强项之一,这也是无需商量的事情。 |
|