php代码乘法怎么写,学习计算机图形学需要多深的数学基础?
易店无忧认为:
计算机图形学需要多少数学知识
数学在计算机图形学中的应用 Greg Turk, August 1997 “学习计算机图形学需要多少的数学?”这 是初学者最经常问的问题。答案取决于你想在计算机图形学领域钻研多深。如果仅仅使用周围唾手可得的图形软件,你不需要知道多少数学知识。如果想学习计算机 图形学的入门知识,我建议你读一读下面所写的前两章(代数,三角学和线性代数)。如果想成为一名图形学的研究者,那么对数学的学习将是活到老,学到老。如 果你并不特别喜欢数学,是否仍有在计算机图形学领域工作的机会?是的,计算机图形学的确有一些方面不需要考虑太多的数学问题。你不应该因为数学成绩不好而 放弃它。不过,如果学习了更多的数学知识,似乎你将在研究课题上有更多的选择余地。对于在计算机图形学中哪些数学才是重要的还没有明确的答案。这领域里不 同的方面要求掌握不同的数学知识,也许兴趣将会决定了你的方向。以下介绍我认为对于计算机图形学有用的数学。别以为想成为一名图形学的研究者就必须精通各 门数学!为了对用于图形学的数学有一个全面的看法,我特地列出了很多方面。但是许多研究者从不需要考虑下面提到的数学。最后,虽然读了这篇文章后,你应该 会对数学在计算机图形学中的应用有所了解,不过这些观点完全是我自己的。也许你应该阅读更多的此类文章,或者至少从其他从事计算机图形学工作的人那里了解 不同的学习重点。现在开始切入正题。代数和三角学对于计算机图形学的初学者来说,高中的代数和三角学可能是最重要的数学。日复一日,我从简单的方程解出一 个或更多的根。我时常还要解决类似求一些几何图形边长的简单三角学问题。代数和三角学是计算机图形学的最基础的知识。那么高中的几何学怎么样呢?可能让人 惊讶,不过在多数计算机图形学里,高中的几何学并不经常被用到。原因是许多学校教的几何学实际上是如何建立数学证明的课程。虽然证明题对提高智力显然是有 效的,但对于计算机图形学来说,那些与几何课有关的定理和证明并不常被用到。如果你毕业于数学相关领域(包括计算机图形学),就会发现虽然你在证明定理, 不过这对开始学习图形学不是必要的。如果精通代数和三角学,就可以开始读一本计算机图形学的入门书了.下一个重要的用于计算机图形学的数学——线性代数,多数此类书籍至少包含了一个对线性代数的简要介绍。推荐的参考书: Computer Graphics: Principles and Practice James Foley, Andries van Dam, Steven Fein
er, John Hughes Addison-Wesley [虽然厚重,可
是我很喜欢] 线性代数线性代数的思想贯穿于计算机图形学。事实上,只要牵涉到几何数值表示法,就常常抽象出例如x,y,z坐 标之类的数值,我们称之为矢量。图形学自始至终离不开矢量和矩阵。用矢量和矩阵来描述旋转,平移,或者缩放是再好不过了。高中和大学都有线性代数的课程。 只要想在计算机图形学领域工作,就应该打下坚实的线性代数基础。我刚才提到,许多图形学的书都有关于线性代数的简要介绍——足够教给你图形学的第一门课。推荐的参考书: Linear Algebra and Its Applications Gilbert Strang Academic Press 微积分学 微 积分学是高级计算机图形学的重要成分。如果打算研究图形学,我强烈建议你应该对微积分学有初步认识。理由不仅仅是微积分学是一种很有用的工具,还有许多研 究者用微积分学的术语来描述他们的问题和解决办法。另外,在许多重要的数学领域,微积分学被作为进一步学习的前提。学习了基本代数之后,微积分学又是一种 能为你打开多数计算机图形学与后继的数学学习之门的课程。微积分学是我介绍的最后一个中学课程,以下提及的科目几乎全部是大学的课程。 微分几何学微分几何学研究支配光滑曲线,曲面的方程组。如果你要计算出经过某个远离曲面的点并垂直于曲面的矢量(法向矢量)就会用到微分几何学。让一辆汽车以特定速度在曲线上行驶也牵涉到微分几何学。有一种通用的绘制光滑曲面的图形学技术,叫做“凹凸帖图”,这个技术用到了微分几何学。如果要着手于用曲线和曲面来创造形体(在图形学里称之为建模)你至少应该学习微分几何学的基础。推荐的参考书: Elementary Differential Geometry Barrett O'Neill Academic Press 数值方法几乎任何时候,我们在计算机里用近似值代替精确值来表示和操作数值,所以计算过程总是会有误差。而且对于给定的数值问题,常常有多种解决的方法,一些方法会更块,更精确或者对内存的需求更少。数值方法研究的对象包括“计算方法”和“科学计算”等等。这是一个很广阔的领域,而且我将提及的其他几门数学其实是数值方法的一些分支。这些分支包括抽样法理论,矩阵方程组,数值微分方程组和最优化。推荐的参考书: Numerical Recipes in C: The Art of Scientific Computing William Press, Saul Teukolsky, William Vetterling and Brian Flannery Cambridge University Press [这本参考书很有价值可是很少作为教材使用] 抽 样法理论和信号处理在计算机图形学里我们反复使用储存在正规二维数组里的数字集合来表示一些对象,例如
图片和曲面。这时,我们就要用抽样法来表示这些对 象。如果要控制这些对象的品
质,抽样法理论就变得尤为重要。抽样法应用于图形学的常见例子是当物体被绘制在屏幕上时,它的轮廓呈现锯齿状的边缘。这锯齿状 的边缘(被认为是“混淆”现象)是非常让人分散注意力的,用抽样法中著名的技术例如回旋,傅立叶变换,空间和频率的函数表示就能把这个现象减少到最小。这些思想在图像和音频处理领域是同样重要的。推荐的参考书: The Fourier Transform and Its Applications Ronald N. Bracewell McGraw Hill 矩 阵方程组计算机图形学的许多问题要用到矩阵方程组的数值解法。一些涉及矩阵的问题包括:找出最好的位置与方向以使对象们互相匹配(最小二乘法),创建一个 覆盖所给点集的曲面,并使皱折程度最小(薄板样条算法),还有材质模拟,例如水和衣服等。在图形学里矩阵表述相当流行,因此在用于图形学的数学中我对矩阵 方程组的评价是很高的。推荐的参考书: Matrix Computations Gene Golub and Charles Van Loan Johns Hopkins University Press 物 理学物理学显然不是数学的分支,它是自成一家的学科。但是在计算机图形学的某些领域,物理学和数学是紧密联系的。在图形学里,牵涉物理学的问题包括光与物 体的表面是怎样互相影响的,人与动物的移动方式,水与空气的流动。为了模拟这些自然现象,物理学的知识是必不可少的。这和解微分方程紧密联系,我将会在下 一节提到微分方程。 微 分方程的数值解法我相信对于计算机图形学来说,解微分方程的技巧是非常重要的。像我们刚才讨论的,计算机图形学致力于模拟源于真实世界的物理系统。波浪是 怎样在水里形成的,动物是怎样在地面上行走的,这就是两个模拟物理系统的例子。模拟物理系统的问题经常就是怎样解微分方程的数值解。请注意,微分方程的数 值解法与微分方程的符号解法是有很大差异的。符号解法求出没有误差的解,而且时常只用于一些非常简单的方程。有时大学课程里的“微分方程”只 教符号解法,不过这并不会对多数计算机图形学的问题有帮助。在对物理系统的模拟中,我们把世界细分为许多表示成矢量的小元素。然后这些元素之间的关系就可 以用矩阵来描述。虽然要处理的矩阵方程组往往没有很精确的解,但是取而代之的是执行了一系列的计算,这些计算产生一个表示成数列的近似解。这就是微分方程 的数值解法。请注意,矩阵方程的解法与微分方程数值解法的关系是很密切的。 最优化在计算机图形学里,我们常常为了期望的目标寻
求一种合适的描述对象或者对象集的方法。例如安排灯的位置使得房间的照明看起来有种特殊的“感觉”,动画里的人物要
怎样活动四肢才能实现一个特殊的动作,怎样排版才不会使页面混乱。以上这些例子可以归结为最优化问题。十年前的计算机图形学几乎没有最优化技术的文献,不过最近这个领域越来越重视最优化理论。我认为在计算机图形学里,最优化的重要性将会日益增加。 概率论与统计学计算机图形学的许多领域都要用到概率论与统计学。当研究者涉足人类学科时,他们当然需要统计学来分析数据。图形学相关领域涉及人类学科,例如虚拟现实和人机交互(HCI)。另外,许多用计算机描绘真实世界的问题牵涉到各种未知事件的概率。两个例子:一棵成长期的树,它的树枝分杈的概率;虚拟的动物如何决定它的行走路线。最后,一些解高难度方程组的技巧用了随机数来估计方程组的解。重要的例子:蒙特卡罗方法经常用于光如何传播的问题。以上仅是一部分在计算机图形学里使用概率论和统计学的方法。 计算几何学计算几何学研究如何用计算机高效地表示与操作几何体。典型问题如,碰撞检测,把多边形分解为三角形,找出最靠近某个位置的点,这个学科包括了运算法则,数据结构和数学。图形学的研究者,只要涉足创建形体(建模),就要大量用到计算几何学。推荐的参考书: Computational Geometry in C Joseph O'Rourke Cambridge University Press [大学教材] Computational Geometry: An Introduction Franco Preparata and Michael Shamos Springer-Verlag [很经典,不过有点旧了] 总 结:数学应用和数学理论对于图形学来说,以上提到的许多数学学科都有个共同点:比起这些数学的理论价值,我们更倾向于发掘它们的应用价值。不要惊讶。图形 学的许多问题和物理学者与工程师们研究的问题是紧密联系的,并且物理学者与工程师们使用的数学工具正是图形学研究者们使用的。多数研究纯数学理论的学科从 不被用于计算机图形学。不过这不是绝对的。请注意这些特例:分子生物学正利用节理论来研究DNA分 子动力学,亚原子物理学用到了抽象群论。也许有一天,纯数学理论也能推动计算机图形学的发展,谁知道呢?有些看来重要的数学实际上在计算机图形学里不常被 用到。可能拓扑学是此类数学中最有意思的。用一句话来形容拓扑学,它研究油炸圈饼与咖啡杯为什么在本质上是相同的。答案是他们都是只有一个洞的曲面。我们 来讨论一下拓扑学的思想。虽然曲面是计算机图形学的重要成分,不过微分几何学的课程已经涵盖了多
数对图形学有用的拓扑学知识。微分几何学研究曲面的造型, 可是拓扑学研究曲面的相邻关系。我觉得拓扑学对于图形学来说几乎没用,这是由于拓扑学关心抽象的事
物,而且拓扑学远离了多数图形学的核心——三维欧氏空间的概念。对于图形学来说,拓扑学的形式(符号表示法)是表达思想的简便方法,不过图形学很少用到抽象拓扑学的实际工具。对图形学来说,拓扑学像一个好看的花瓶,不过别指望它能立即带给你回报。有人曾经这么问我,计算机图形学是否用到了抽象代数(群论,环,等等….)或者数论。我没怎么遇到过。和拓扑学一样,这些学科有很多美好的思想。可是很不幸,这些思想很少用于计算机图形学。 --The End--
分享到:
=================================================================
windows下安装opengl的glut库(转)
分类: 挚爱c++ 2008-02-19 13:46 1716人阅读 评论(2) 收藏 举报
windows下安装opengl的glut库
GLUT不是OpenGL所必须的,但它会给我们的学习带来一定的方便,推荐安装。
Windows环境下的GLUT下载地址:(大小约为150k)
http://www.opengl.org/resources/libraries/glut/glutdlls37beta.zip
无法从以上地址下载的话请使用下面的连接:
http://upload.programfan.com/upfile/200607311626279.zip
Windows环境下安装GLUT的步骤:
1、将下载的压缩包解开,将得到5个文件
2、在“我的电脑”中搜索“gl.h”,并找到其所在文件夹(如果是VisualStudio2005,则应该是其安装目录下面的“VC/PlatformSDK/include/gl文件夹”)。把解压得到的glut.h放到这个文件夹。
3、把解压得到的glut.lib和glut32.lib放到静态函数库所在文件夹(如果是VisualStudio2005,则应该是其安装目录下面的“VC/lib”文件夹)。
4、把解压得到的glut.dll和glut32.dll放到操作系统目录下面的system32文件夹内。(典型的位置为:C:/Windows/System32)
OpenGL study
你可以在OpenGL的官方网站http://www.OpenGL.org的Documentation中下载到官方教程和例子程序:
The OpenGL Programming Guide,这就是著名的red book(“红皮书”)
如果你英语不好,那么推荐你阅读:
《OpenGL超级宝典》是一本相当不错的中文教程。可以在http://www.vrforum.cn/forumdisplay.php?fid=29找到它的例子代码
《OpenGL编程权威指南》他是red book的中文译本,它的例子也就是red book的例子。
*Nate Robin的例子对你理解OpenGL很有帮助。http://www.gamedev.net/reference/articles/article839.asp
*The OpenGL Reference Manual(blue book)并不是一本入门教材,而是一本函数参考手册,可以从http://www.OpenGL.org的Documentation中下载下来,在实际学习中查询用
*NeHe的例子也
是大家所喜爱的初学者例子。http://nehe.gamedev.net,在http://www.chinagamedev.net还有一部分的中文译文
***nehe的简单窗口例子(第二课)几乎含盖世界上的所有语言,如果想用自己喜欢的独特语言,可以参考http://nehe
.gamedev.net/data/lessons/lesson.asp?lesson=02最下方的联接,并结合C++的例子学习(大多数教材都是基于C++的,不过幸好我们真正关注的是OpenGL本身)
OpenGL的例子大都需要用到OpenGL应用工具包:GLUT库,下面讲讲怎样安装它
Visual C++ 6.0 HOWTO:
1。下载GLUT库:http://www.opengl.org/resources/libraries/glut/glutdlls37beta.zip
2。将压缩包内的glut.h放到.../Microsoft Visual Studio/VC98/Include/GL目录下
将glut32.lib放到.../Microsoft Visual Studio/VC98/Lib目录下
将glut32.dll放到X:/windows/systom32目录下(win98用户放到X:/windows/systom目录下)
3。建立一个控制台工程Win32 Console Application,加入hello.c并运行:
#i nclude <GL/glut.h>
void display(void)
{
glClear (GL_COLOR_BUFFER_BIT);/* clear all pixels */
glColor3f (1.0, 1.0, 1.0);
glBegin(GL_POLYGON);/* draw white polygon with corners at(0.25, 0.25, 0.0) and (0.75, 0.75, 0.0)*/
glVertex3f (0.25, 0.25, 0.0);
glVertex3f (0.75, 0.25, 0.0);
glVertex3f (0.75, 0.75, 0.0);
glVertex3f (0.25, 0.75, 0.0);
glEnd();
glFlush ();/* start processing buffered OpenGL routines */
}
void init (void)
{
glClearColor (0.0, 0.0, 0.0, 0.0);/* select clearing color */
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0.0, 1.0, 0.0, 1.0, -1.0, 1.0);/* initialize viewing values */
}
int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);/*Declare initial display mode(single buffer and RGBA).*/
glutInitWindowSize (250, 250); /*Declare initial window size.*/
glutInitWindowPosition (100, 100);/*Declare initial window position.*/
glutCreateWindow ("hello");/*Open window with "hello"in its title bar.*/
init ();/*Call initialization routines.*/
glutDisplayFunc(display); /*Register callback function to display graphics.*/
glutMainLoop();/*Enter main loop and process events.*/
return 0; /* ANSI C requires main to return int. */
}
OpenGL是目前用于开发可移植的、可交互的2D和3D图形应用程序的首选环境,也是目前应用最广泛的计算机图形标准。OpenGL是SGI公司开发的一套的计算机图形处理系统,是图形硬件的软件接口,GL代表图形库(Graphics Library)。OpenGL具有可移植性,任何一个OpenGL应用程序无须考虑其运行环境所在平台与操作系统,在任何一个遵循OpenGL标准的环境下都会产生相同的可视效果。
OpenGL不是一种编程语言,而是一种API(Application Programming Interface,应用程序编程接口)。当我们说某个程
序是基于OpenGL的或者说它是个OpenGL程序是,意思是说它是用某种编程语言如C或C++编写的,其中调用了一个或多个OpenGL库函数。作为一种API,OpenGL遵循C语言的调用约定。
OpenGL主要包括三
个函数库,它们是核心库、实用函数库和编程辅助库。核心库中包含了OpenGL最基本的命令函数。核心库提供了一百多个函数,这些函数都以”gl”为前缀,用来建立各种各样的几何模型、进行坐标变换、产生光照效果、进行纹理映射、产生雾化效果等所有的二维和三维图形操作。实用函数库是比核心库更高一层的函数库,它提供四十多个函数,这些函数都以”glu”为前缀。由于OpenGL是一个图形标准,是独立于任何窗口系统或操作系统的,在OpenGL中没有提供窗口管理和消息事件响应的函数,也没有鼠标和键盘读取事件的功能,所以在编程辅助库提供了一些基本的窗口管理函数、事件处理函数和简单的事件函数。这类函数以”aux”作为前缀。值得一提的是,目前AUX编程辅助库已经很大程度上被GLUT库取代了。以下介绍以GLUT库为例。
GLUT代表OpenGL应用工具包(OpenGL Utility Toolkit),是一个与窗口系统无关的工具包。它作为AUX库的功能更强的替代品,用于隐藏不同窗口系统API的复杂性。GLUT的子程序的前缀使用”glut”。
一、下面以windows及visualC++为例介绍使用预编译库进行安装的过程:
(1)将gult32.dll复制到windows系统system32下
(2)将gult32.lib复制到vc的lib目录下
(3)将gult.h复制到vc的include/GL下
二、一个简单的OpenGL程序
#i nclude <windows.h>
#i nclude <gl/glut.h>
//绘图子程序
void display( void ) {
glClearColor( 1.0f,1.0f,1.0f,1.0f ); // 设置清除窗口时将窗口设为白色
glClear( GL_COLOR_BUFFER_BIT );// 执行窗口清理
glFlush(); // 刷新OpenGL中的命令队列和缓冲区,使所有尚未被执行的命令执行
}
void main( int argc,char** argv ) {
glutInit( &argc, argv ); // 初始化GLUT库
glutInitDisplayMode( GLUT_SINGLE| GLUT_RGB ); // 显示模式
glutCreateWindow( "Hello OpenGL!" ); // 创建一个窗口,参数为窗口的标题
glutDisplayFunc( display ); // 绘制当前窗口
glutMainLoop();//通常用于程序的结尾,表示开始运行程序.显示出所有创建的窗口
}
想拜托大家告知一下java大数据?
先把Java好好学好,再去考虑其他的,没有几年的Java开发经验,是学不懂大数据的,把Java学好才是王道;web前端的话,Java的整个课程体系里也是有的,全栈更吃香一些,女生不建议去做FPGA;
目前企业用的最多的就是Java了,很多企业的软件都是用Java来开发的,把Java学好是个不错的选择,以前学习Java是在 “ 如鹏网 ”上面学习的,有网络的地方就可以学习,学习成本比较低,根据自己的时间来灵活安排学习进度,把空余的时间充分的利用起来,对于开发行业来说,练习是少不了的,也有更多的时间来练习,掌握的更好;
有问题随时提问,老师实时在线答疑,很多时候凌晨提问老师依然在线为你解答,挺负责的;每个章节的后面都有相应的练习题和面试口才题,需要以录音的方式进行提交,老师进行批改,直到通过为止,为以后的面试做准备;
从简历,面试,就业,薪资洽谈等方面进行系统的指导,而且有新的课程,新的技术更新了,也是可以继续免费申请了来学习的,特别的不错;
以前在如鹏网上学习的时候,也有很多是利用在学校里的空余时间来学习的,大二大三就已经开始工作了,拿着薪资上大学,积累工作经验,口碑不错,基本上都是慕名而去的,可以到如鹏网官网上去了解一下;
计算机怎么入门?
谢邀!
计算机如何入门这个问题,我自己是深有体会,当年个人电脑远没有现在普及,计算机专业大一下学期买了台台式机,结果被坑了,电脑总是蓝屏,想着都学这个专业了就自己解决呗,看课程将要安排的计算机组成原理之类的书,根本不搭,只能查阅电脑维修,才发现是主板问题,乖乖抱去电脑维修换了个主板,不过经过这么一折腾,对电脑硬件就深刻,算是入门了吧。
说这么多就是要表达楼主想用计算机做什么,这样才能决定怎么入门。
电脑操作如果楼主是小白,没有操作过电脑,是那种分不清“我的电脑”是什么的,想要学一下操作电脑,上网娱乐,可以找本电脑入门的书籍,里面会讲电脑的硬件组成,操作系统的知识,怎么上网,学学打字,跟着操作一下,遇到不会用的软件问问年轻人,基本就会了。
普通维护这里说的维护是说帮别人买个笔记本,组装个台式机,或是电脑维修之类的,这就对硬件要比较了解,如果只是应付亲友,帮忙参考一下,看看电脑维修的书,多留心成品的配置差不多够了。
程序开发如果是想通过自学从事开发工作,可以参考一下大学的专业课程:C语言程序设计、计算机组成原理、数据结构、操作系统、 微机原理及汇编语言、计算机网络、计算机系统结构、面向对象程序设计等,然后认定方向根据需要钻研业务,比如做web学html、css、js、java等,做安全行业学linux、算法、c/c++等。
计算机有一个很庞杂的知识体系,先明确自己的需求,带着问题找答案,循序渐进,希望我的回答能帮助到你!
教育部表示中小学开始学敲代码学编程了?
智能化催生新业态的速度令人难以想象,21世纪注定是智能化时代,中国智能化研发走在世界前列。互联网物联网逐步走进人们的生活,深刻改变了原有生活方式,足不出户完成购物已不在是新鲜事,买全球,卖全球成为现实。
2011年,美国纽约市立大学的教授凯西·戴维森的发言震惊了世界:
“2011年进入美国小学就读的孩子中,有65%的孩子在大学毕业时将从事现在尚未存在的职业”。
可以想象,未来十几年的产业变革将是彻底的、深刻的、迅速的……如何适应未来社会,信息技术成为必备核心素养之一。在互联网、物联网、智能化高度发达的21世纪,不懂信息技术将大大影响生活质量或不能正常生活。
国际竞争日趋激烈,综合国力的较量主要体现在科技上,这一切归根结底就是教育的竞争。如何培养适应21世纪的人才,国家从增强国际竞争力,从未来持续增速发展的高度,借鉴美英德法日发达国家的教育动向,果断提出小学增加编码课程。
这一举措关乎民族复兴大业能否顺利实现,关乎中华民族能否屹立于世界民族之林,关乎国家竞争力强弱,关乎……
小学生学习编码可以激发学习兴趣,体验学习的成就感、自豪感。也是有意识减负的举措,压缩语文、数学学习时间促进全面发展。
我们应该乐观面对新事物,教育改革不断深入,素质教育逐步加强,高考制度、课程改革有序推进。我们国家人口众多,教育关乎千家万户,民生福祉,不能一蹴而就,立竿见影。
小学生学习编码绝不是我国独有现象,我们只是跟上世界步伐而已。
计算机组成原理学习顺序?
0.1 计算机的基本组成
计算机的硬件组成
这些硬件,怎么对应到经典的冯·诺依曼体系结构的
除此之外,还需要了解计算机的两个核心指标
性能
功耗
性能和功耗也是我们在应用和设计五大基本组件中需要重点考虑的因素。
0.2 计算机的指令和计算
需要搞明白,我们每天撰写的一行行C、Java、PHP程序,是怎么在计算机里面跑起来的。
了解我们的程序是怎么通过编译器和汇编器,变成一条条机器指令这样的编译过程(编译过程展开,就是编译原理)
知道我们的操作系统是怎么链接、装载、执行这些程序的(深入学习,就是操作系统)。而这一条条指令执行的控制过程,就是由计算机五大组件之一的控制器来控制的。
计算部分,要从二进制和编码开始,理解我们的数据在计算机里的表示,以及我们是怎么从数字电路层面,实现加法、乘法这些基本的运算功能的。
实现这些运算功能的ALU(Arithmetic Logic Unit/ALU),算术逻辑单元,计算机五大组件之一的运算器。
特别重要的就是浮点数(Floating Point)。
浮点数是我们在日常运用中非常容易用错的一种数据表示形式。掌握浮点数能让你对数据的编码、存储和计算能够有一个从表到里的深入理解。尤其在AI火热的今天,浮点数是机器学习中重度使用的数据表示形式,掌握它更是非常有必要。
0.3 CPU的设计
CPU时钟可以用来构造寄存器和内存的锁存器和触发器,因此,CPU时钟应该是我们学习CPU的前导知识。搞明白我们为什么需要CPU时钟(CPU Clock),以及寄存器和内存是用什么样的硬件组成的之后,我们可以再来看看,整个计算机的数据通路是如何构造出来的。
数据通路,其实就是连接了整个运算器和控制器,并最终组成了CPU。而出于对于性能和功耗的考虑,你要进一步理解和掌握面向流水线设计的CPU、数据和控制冒险,以及分支预测的相关技术。
既然CPU作为控制器要和输入输出设备通信,那么我们就要知道异常和中断发生的机制。在CPU设计部分的最后,我会讲一讲指令的并行执行,看看如何直接在CPU层面,通过SIMD来支持并行计算。
0.4 存储器的原理
通过存储器的层次结构作为基础的框架引导,需要掌握从上到下的CPU高速缓存、内存、SSD硬盘和机械硬盘的工作原理,它们之间的性能差异,以及实际应用中利用这些设备会遇到的挑战。存储器其实很多时候又扮演了输入输出设备的角色,所以你需要进一步了解,CPU和这些存储器之间是如何进行通信的,以及我们最重视的性能问题是怎么一回事;理解什么是IO_WAIT,如何通过DMA来提升程序性能。
对于存储器,我们不仅需要它们能够正常工作,还要确保里面的数据不能丢失。于是你要掌握我们是如何通过RAID、Erasure Code、ECC以及分布式HDFS,这些不同的技术,来确保数据的完整性和访问性能。
计算机组成原理的学习办法
相较于整个计算机科学中的其他科目,计算机组成原理更像是整个计算机学科里的“纲要”。这门课里任何一个知识点深入挖下去,都可以变成计算机科学里的一门核心课程。
程序怎样从高级代码变成指令在计算机里面运行,对应着“编译原理”和“操作系统”这两门课程
计算实现背后则是“数字电路”
如果要深入CPU和存储器系统的优化,必然要深入了解“计算机体系结构”