分类: LINUX
2013-02-04 18:54:51
说来我也不是正经做GPU架构的,不过耳濡目染了很久写一写自己的心得。GPU架构设计其实算是一个多学科交叉的领域,尤其是今天这种GPGPU改朝换代的年代,更需要多多吸收相关领域的知识。这包含了计算机体系结构,图形算法,编译技术,集成电路,以及各种流计算应用等五部分~~我也会分五个帖子讲完~~。其实我主要聚焦在计算机体系结构,图形算法方面,就这两个领域还算是二把刀。其他领域也是不熟悉到当不上二把刀~~所以估计我会写前两个章节,分别介绍计算机体系结构,图形算法方面的书籍。其他方面欢迎大牛补充~~~ 第一阶段步入先做一个CPU架构师~ 首先是计算机体系结构(Computer Architecture),因为无论是GPU还是CPU归根到底都是处理器(Processor),而计算机体系结构就是讲解处理器如何工作以及如何权衡取舍各个模块特性参数的一门课程。主要参考书目如下:(读书顺序如编号,参考书目可以根据兴趣穿插在其中~) 1.计算机组成和设计:硬件/软件接口 Computer Organization & Design:The Hardware/Software Interface 本书就不多说了,组成原理是体系结构的专业基础课程,本书必读! 2.《大型RISC处理器设计——用描述语言Verilog设计VLSI芯》 本书的阅读要包括没有翻译的高级本,这本书是教你如何组一个工业级别的CPU。可以获得很多硬件上的定量分析的知识。 3.量化方法第四版英文版 读要包括附录和习题以及参考论文,这本书是体系结构领域的圣经,不读不足以成学过体系结构。 4. Modern Processor Design:Fundamentals of Superscalar Processors 《现代处理器设计——超标量处理器基础》 这本书也必须做习题,本书讲解了很多处理器设计的实例,要结合书后的参考论文一一阅读。 5. Chip Multiprocessor Architecture: Techniques to Improve Throughput and Latency 本书主要讲解了面向Web Server的事务处理器的架构应该如何权衡,书中的研究成果来自SUN Niagara得第一手材料。非常具有代表性~书也不厚,可以当做小说来看。 6. Embedded Computing: A VLIW Approach to Architecture, Compilers and Tools 作为VILW的代表作,必须阅读,其实对VLIW支持可以算在编译器领域,因为VLIW处理器在架构上没有太多难懂的地方。不过这里作为预览,稍后再编译技术学习的时候可以轻松一些。 7. VLSI Digital Signal Processing Systems:Design and Implementation 本书作为DSP里面最经典的微体系结构教材,必读!这本书很工程,没有太多废话,写作效率很高~~~ 8. Stream Processor Architecture 本书主要是斯坦福的对于流处理器设计的总结,其中大部份人都去了AMD或是NV做架构,对于研究GPGPU来说,本书必看!从目前已经有过的研究来看,GPGPU还是难以胜任流计算之外的通用计算任务。 9. Parallel Computer Architecture A Hardware/Software Approach(Second Edition) 本书作为体系结构扩展学习的材料,对于并行计算机讲解的相当深入浅出,虽然年代老了一些,但是技术是不分先进与落后的。要博观约取,日后才能厚积薄发~~。此书我没有通读,所以留下遗憾,导致并行架构方面的知识大大欠缺,不足引经据典。日后有时间要补上~~ 10.See MIPS RUN Second RD 《MIPS体系结构透视(英文影印版)(第2版) 》 这本书其实不是讲解CPU如何设计的,但是讲解了CPU如何与软件互动,作为一本补充阅读的材料是非常的好的。即便软件工程师也推荐阅读。 另外,还包括各种总线技术,毕竟总线技术在未来的处理器以及处理器阵列中有不可或缺的意义!必须要搞明白,包括AXI、OCP、PCI、PCI-E,之后就可以看一些关于片上网络(Network on Chip)的书籍和论文(主要是论文。) 另外还包括网格等技术相关的书籍和论文都要多多阅读。体系结构的书籍还是相当多的,数目很多,面向方向包括目前非常火爆的低功耗技术如何与处理器架构联系在一起,也包括专门用于网络传输的网络处理器,容错技术,可重构技术等。一脚下去深不见底……学无止境的。所以读书前要确立好目标,千万别看什么NB就学什么,来回换山头。其实读书永远是一个人入门的阶段,做到熟练之后就是大量的阅读论文了,尤其是ACM的论文,不读论文的话就不可能做到一个好的研究成果,因为只有相对稳定和陈旧的理论才回写入书本。最新的科技都是写在论文当中。多读论文可以节省自己大量的时间。 ps:另外推荐几本有代表意义的书 Computer Architecture Techniques for Power-Efficiency 必读!未来的计算是属于嵌入式的,所以低功耗计算是未来的趋势~~~ Fault Tolerant Computer Architecture 研究容错体系结构必读,未来的处理器必定会建立在容错片上网络的基础之上,这个技术对于Manycore来说必不可少。 Network Processors_Architectures, Protocols and Platforms 网络处理器,可以观摩一下另一种架构~~ :> Virtual Machines: Versatile Platforms for Systems and Processes 虚拟机技术,其实可以算在编译系统中,不过这里也牵扯到不少架构的东西,这是未来云计算的关键,必须读~~! |
第二步,图形算法:在已有体系结构知识的基础上了解目标应用是一群什么样的特性?
CPU作为通用处理器并不需要对某一种应用特别优化,但是图形处理器并非如此。顾名思义,GPU虽然也是Processor,但是他是针对Graphics特别优化的一种处理器。所以不了解图形算法是没有办法设计GPU的,你了解的图形算法越是深入,做应用做得越多,就越是对GPU哪里应该被优化了解得更加深入!当然,我们也通过OpenGL /D3D Specification是可以设计出一个完整功能的GPU来,从而在不懂图形算法的情况下也照样设计GPU。但是对于高级的GPU Architect,你是不可能不参加OGL/D3D Spec定制会议的(虽然微软的开放程度有待商榷…)。如果不了解算法,那么对于更为先进的支持Raytracing或是其他Global Illumination 的GPU架构来说,更是无从谈起……。对于设计低功耗高性能的嵌入式GPU来说也是无从谈起,因为你根本不知道哪里应该砍掉,而哪里应该保留,更别说哪些硬件裁减多少了……所以这一步,我们要大量的全面地了解图形算法。不仅仅是基于GPU的图形算法,而且包括传统意义上经过CPU验证的数学图形算法。这需要相对深入的数学功底,所以说,数学学不好,就不用做不了非常牛逼得GPU Architect。
【如果想从事于更为专业的Graphics Reseracher(图形学大牛)那可以直接看这份书单,】
首先,考虑到引发对图形学的兴趣,最好能在代码写后展示出绚丽的图形效果,所以我建议先从OGL/D3D API学起。其实OGL和D3D API基本上功能等价,现在OGL 4.0出来了,我更愿意用OGL作为入门工具,没有别的原因,只是OGL不包含微软那套COM编程基础,如们非常容易。
1.OpenGL Superbible 4ed
《OpenGL超级宝典(第4版)》
这是我觉得写得最好的OGL入门教程。虽然还停留在2.x阶段,但是入门足够了。书上的例子很多,可以一一跑一跑,看看效果。
2.OpenGL Shading Language 2ed
这本书有中文版,但是我强烈不建议看,除非你不像学会这门语言。上一本书主要讲解了API使用,但是对于GLSL讲解得不多。所以在用这本书打打牢基础。Shader Programing是现代图形硬件的关键,有相当多的算法仰仗SHader,必须给与足够重视。
3.《OpenGL编程指南 7ed》
这本书俗称红宝书,没有必要专门看,但是作为工具字典书还是很有必要的,查一查API使用。其实最好的API查阅还是看OGL Spec~~~ :>而且要设计GPU的话,OGL/D3D Spec也是要反反复复看个三四遍得!(顺便提一下,微软的D3D Spec / Ref Code是需要和微软签NDA协议才能拿到手的,我记得浙大CAD那边偷偷搞到手过这些文档是源代码,后来泄漏了,还被微软发信警告了某公司~~)
对于D3D编程来说看微软的SDK文档就够了也不用折腾去买什么书,微软SDK文档就是最好的书籍,还免费~:〉
4. 《3D绘图程序设计:使用Direct3D 10/9和OpenGL 2.0》
接下来就是练习各种图形算法以及效果,这里先挑一本简单的书联系一下,这本书写得非常工业化,都是相对来说游戏中比较实用的技术。尽管错误不少,但是学习是足够了。到此为止,你对图形学的学习算是度过第一阶段了,基本完成了入门。接下来要看一系列的中级教程。
5.GPU Gems 1/2/3
这是NV组团出版的一本书,可以说是论文集,包含GPU的各个领域,写得非常好,这三本书必读。这是阅读图形学论文的前提。
6. Graphics Gems 系列
这各系列的书虽然有些老,但是也很经典,多多了解从前的设计,从前的图形算法,有助于理解CG的演变以及近些年来优化的主要方向~~
7.ShaderX 系列
应朋友的要求把这本书加上,这个系列的书我还没来得及看过,(我OUT了……)懂得朋友们可以评价一下~
8.Real-time rendering 2/3ed
本书绝对必读!!!本书在GPU Architecture中的地位堪比CPU中的《量化方法》那本书,包括Reference等论文一定也要看,都是作者精心挑选的,非常经典~~ 对于自己的算法只是也是非常开阔的。
9. Procedural Elements for Computer Graphics (2E)
《计算机图形学的算法基础(原书第2版)》
对于GPU架构设计来说,本书也是绝对必读!这本书实验必须一一过关,本书讲解最底层的图形算法,这些算法不依赖于任何硬件,虽然年代久远,但是在实时图形学里OGL仰仗的大部分图形算法不也都是七八十年代的么,包括Z/S-buffer/Edge function Rasterization/vertex Transform /Ground Shading等等……所以本书必读!
基本上到这一步就完成了图形学学习的中级阶段。下一步的高级阶段中,要多多接触一些GI(全局光照)的知识。以及大量的阅读论文,关于GI,的确有很多 书籍可以阅读,比如非常有名气的PBRT,还有很多辐射度算法和体渲染的书籍。当然,我还没混到这个水平,所以不能写出更多的参考书目。但是无论如何,图形学的发展速度可比计算机体系结构要快很多,不读论文,基本上就看看书是没有用处的。所以必读大量的读论文,包括最基本的siggraph论文等等~~另外,modeling建模 也是一个非常NB的方向,最好也学习学习,不然人家一说Tessellation,都不知道背后的数学理论和硬件简化会出现在哪里,那就逊了%……
本人水平有限,能列举的都是基本上国内能找的到的书籍。最后再补充一下,数学一定要学好,没有数学就没有图形学。一个连点到平面距离都不会计算的工程师是不可能做到很NB的GPU Architect的~~
第三步,编译技术与Runtime层:链接算法与硬件
第四步,集成电路技术:加强硬件架构设计能力 |
第五步,接触各种流计算应用:这是GPGPU设计的前提。