带你走进这个领域。
我个人认为任何一个学计算机的,你可以不把自己的研究方向设在架构,编译器等等,但你必须要懂架构,编译器,操作系统。我个人认为这些东西对于一个CS的人来说不亚于结构,算法,以及标准库的重要。
我一直觉得英文书比中文书好懂,因为中文书喜欢咬文嚼字装专业,也或者是译者害怕出现歧义,字对字翻译。比如我记得这本书有一个地方说一个什么的好处的时候说的是the attractive of xxx is xxxx, 中文版写的是xxx的吸引力是xxxx。勺子的吸引力是它比筷子更适合喝汤...这是人类说法的方式吗?还有更多的例子我记不清了,反正很极品,属于光读中文你完全不知道他在说什么,一看英文恍然大悟,给人一种 “你有什么事=U have what thing?”的感觉。。。
架构这种东西其实和工业界距离很大,貌似从很久很久以前RISC就以统治性的支持率压倒CISC,学术界一边倒的全部支持MIPS,蛋似这么多年统领天下的居然是CISC的X86。大家总是酸溜溜的说其实在X86内部其实有模仿RISC的翻译层。但X86和MIPS的差距还是异常的大。如今智能手机和平板帮助ARM打下半边天下,还算看到点希望,真想知道10年前学架构的人是什么心情。
RISC确实是大势所趋,一直以为萎的快要死掉的AMD推出个APU大出了风头,CPU和GPU统一寻址也算加固了NV的阵营,让从前的X86大战ARM同时加上了thread level vs data level。
X86自古就问题不少,但Intel瘦死的骆驼比马大,撑个三年没什么问题,而且谁知这几年还会发生什么,ARM现在这么火不用多说。thread level parallelism还是data level谁优谁弱还言之过早。CUDA这几年如日中天,AMD的APU也来凑热闹,但美国国家实验室的超级计算机还都是thread level的并行,data level仅仅是局部的加速器。冷战时期的超级计算机都是vector machine,后来发展出了thread level的并行,然后又跳回的data level。根本问题还是没解决,就是你究竟有多少部分of 你的code可以做到SIMD。
CUDA虽然火,但我个人认为仅仅是NV宣传做的好,是个商品不是个好产品,事实上它仅仅是个半成品。举个最简单的例子,在thread level并行,我们遇到任何困难,得到的答案都是硬件上的技巧,而在CUDA中,我们遇到任何问题,得到的答案都是一个API。When you face a problem you can not solve, make it someone else's problem. 这就是CUDA。传统架构中出现问题,会在架构中自省,而在CUDA中出现问题,NV会推给写软件的人去解决。
说远了,这本书很不错,从最初的pipeline到MIMD再到SIMD。基本所有的技巧都提了,可能会不是很详细,比如tomasulo,当年我读了好几遍都没读懂。但人无完人,多搜一搜也就明白了。
我一直觉得英文书比中文书好懂,因为中文书喜欢咬文嚼字装专业,也或者是译者害怕出现歧义,字对字翻译。比如我记得这本书有一个地方说一个什么的好处的时候说的是the attractive of xxx is xxxx, 中文版写的是xxx的吸引力是xxxx。勺子的吸引力是它比筷子更适合喝汤...这是人类说法的方式吗?还有更多的例子我记不清了,反正很极品,属于光读中文你完全不知道他在说什么,一看英文恍然大悟,给人一种 “你有什么事=U have what thing?”的感觉。。。
架构这种东西其实和工业界距离很大,貌似从很久很久以前RISC就以统治性的支持率压倒CISC,学术界一边倒的全部支持MIPS,蛋似这么多年统领天下的居然是CISC的X86。大家总是酸溜溜的说其实在X86内部其实有模仿RISC的翻译层。但X86和MIPS的差距还是异常的大。如今智能手机和平板帮助ARM打下半边天下,还算看到点希望,真想知道10年前学架构的人是什么心情。
RISC确实是大势所趋,一直以为萎的快要死掉的AMD推出个APU大出了风头,CPU和GPU统一寻址也算加固了NV的阵营,让从前的X86大战ARM同时加上了thread level vs data level。
X86自古就问题不少,但Intel瘦死的骆驼比马大,撑个三年没什么问题,而且谁知这几年还会发生什么,ARM现在这么火不用多说。thread level parallelism还是data level谁优谁弱还言之过早。CUDA这几年如日中天,AMD的APU也来凑热闹,但美国国家实验室的超级计算机还都是thread level的并行,data level仅仅是局部的加速器。冷战时期的超级计算机都是vector machine,后来发展出了thread level的并行,然后又跳回的data level。根本问题还是没解决,就是你究竟有多少部分of 你的code可以做到SIMD。
CUDA虽然火,但我个人认为仅仅是NV宣传做的好,是个商品不是个好产品,事实上它仅仅是个半成品。举个最简单的例子,在thread level并行,我们遇到任何困难,得到的答案都是硬件上的技巧,而在CUDA中,我们遇到任何问题,得到的答案都是一个API。When you face a problem you can not solve, make it someone else's problem. 这就是CUDA。传统架构中出现问题,会在架构中自省,而在CUDA中出现问题,NV会推给写软件的人去解决。
说远了,这本书很不错,从最初的pipeline到MIMD再到SIMD。基本所有的技巧都提了,可能会不是很详细,比如tomasulo,当年我读了好几遍都没读懂。但人无完人,多搜一搜也就明白了。
有关键情节透露