如何评价“英特尔10nm处理器宣布10nm技术领先一切对手”

《程序员》2013-2期《MAC OS背后的故事——向Intel迁移!(中)》说的很明白。以下是摘自其内容:&br&Itanium的诞生&br&&br&有了Marklar团队的成果,接下去只是何时转换到x86架构平台的问题。但这时,Intel却持续走低,苹果似乎有了一个除Intel以外的选择——AMD。&br&&br&在1989年,HP认为RISC架构将来会遇到每周期只能执行一个指令的瓶颈。所以想搞一套名为EPIC的新架构。但由于HP不具备研发处理器的资本,所以在1994年拉拢Intel跟它以EPIC为基础,合搞一套叫IA-64的处理器。&br&&br&先前提到,为了使代码高效地执行,当时Intel已经做出了超纯量乱序执行的Pentium Pro架构。整个框架的原理是读入一系列的指令,把每个指令分解成RISC分格的微指令,使用暂存器重命名等算法来计算并移除指令的依赖关系,然后并发执 行多条语句,达到一个时钟频率能够执行多个指令的目的。&br&&br&但HP的忽悠能力比较强,它对Intel说:“为什么我们需要由硬件实现乱序执行 呢?你们的处理器为了把x86指令解成微指令,需要一个比RISC架构复杂得多的解码器。而为了达到乱序执行,你们设计了一整套复杂得多的逻辑去判断执 行,这是计算机在运行中所需要付出的代价!&br&&br&现代的编译器早就足够高级了,完全能在编译时判断语句的依赖关系,并且自动进行暂存器命名等一系列的算法,所以在程序编译时就能给出一个个指令包,每个指令包包含了一系列能同时并发执行的RISC指令。&br&&br&我 们完全可以设计一个新指令集,称为超长指令字架构(VLIW,Very Long Instruction Word),一个指令包中的所有指令都会转化成一个VLIW语句。这样,当VLIW语句通往芯处理器时,处理器就无需进行复杂的解码(因为指令本身是 RISC风格的)、逻辑判断(因为编译时己判断好了)、暂存器重命名、乱序执行算法,只要解开一个VLIW指令让分配器并发执行就行了。&br&&br&因此,我们的编译器就能决定让这些小指令同时执行于单一周期,处理器能够简单地执行这些指令而不需要很复杂的架构去决定哪些指令能够并行执行。”&br&&br&Intel被这么一忽悠觉得IA-64大有前途,如果搞出来,会被多数的企业系统制造业采用,所以开始下血本开发。由于1998年正值电影泰坦尼克号热映,Intel在日发布该处理器的官方名称为Itanium。&br&&br&Intel 认为,Itanium将会是个终级架构,可以解决一切问题,将会是未来的发展方向。虽然指令集和x86完全不兼容,但随着服务器领域和将来的桌面领域从 32位迁移到64位,指令集肯定是需要做出重大改变的,利用这个机会,Intel自然可以自由采用一种新指令集和过去划清界限。于是索性就不用开发64位 的x86了,逼着大家都用Itanium就可以了。&br&&br&正当Intel做着天上降下黄金雨的美梦时,它完全没有意识到灾难己经临近。Itanium的设计看似完美无缺,但他们没有意识到其中两个重大的问题——指令宽度和Cache。&br&&br&“短板”原理在Itanium上应验&br&&br&x86的好处是,虽然这是一个CISC的指令集,但这个指令集对程序执行的逻辑没有额外的限制,所以只要Intel保证产生的运算结果是一致的,就可以以任何方式实现这个指令集,例如解成RISC、增加超纯量模块、调度成乱序并行执行,Intel想怎么做都可以。&br&&br&但Itanium让编译器决定一切,编译器自动判别依赖关系并产生一个个指令包,每个包内的指令不存在依赖关系,所以指令集一公布,要想改就困难了。例如每 个VLIW指令包是包着三个RISC指令的,如果若干年后做出了能并行执行六个指令的芯片,那它能一起执行两个VLIW指令吗?&br&&br&醒醒吧,因为这两个VLIW指令很可能有依赖关系!那可以重新让处理器判断依赖关系后再执行吗?该吃药了——Itanium花那么多血本就是想让编译器搞定一切而不用处理器判断!&br&&br&那怎么办呢?只有两个办法:其一是一次运行三条指令(即使我的机器有能力执行六个宽度),所以程序执行效率只有一半;其二是要求每有新一代的芯片出现,所有 程序都要重新编译才能完全发挥芯片设计的理论效能。这是让人无法忍受的一件事——难道今后软件发布出来,要为各个指令宽度的Itanium各做一个版本吗?&br&&br&更麻烦的问题是Cache。Cache是处理器上用于减少处理器访问记忆体所需平均时间的部件。其容量远小于内存,但速度却可以接近处 理器的频率。当处理器发出内存访问请求时,会先查看Cache内是否有请求资料。如果命中,则不经访问记忆体直接返回该资料;如果不存在,则要先把记忆体中的相应资料载入Cache,再将其返回处理器。&br&&br&与前面那种情况相比,这需要更长的等待时间。至于什么资料是在Cache内的,完全是由计算机程序运行时决定。编译器在编译时是无法预测程序在执行时所使用Cache的情况的——这一切完全是随机的。对于一个可以乱序执行的处理器而言,如果某 条数据的结果不在Cache里,可以动态调度,先执行别的语句,从内存里取出,再执行这条语句。&br&&br&像Itanium把可以并发的程序指令捆在一个包中,如果这个包中所需要的变量还在内存里,那处理器就什么都干不了,只能等从内存数据搬到Cache中。所以,Itanium的执行效率不会好于乱序执行的处理器。&br&&br&正当Intel一步步坚定不移地在死路上越走越远时,Intel的竞争对手AMD却没闲着。&br&&br&Intel不做x86架构的64位版?我们做(2003年AMD抢先于Intel发布了Athlon 64,随后又推出了面向主流消费市场的Athlon 64 X2)!Intel不做x86架构的多核处理器?我们做(日,AMD领先于Intel率先发布了拥有双核的Opteron处理器)!&br&&br&跑分测试下来,AMD技术在许多方面远胜Intel,其中尤其以浮点运快著称。同时,AMD允许用户选择比Intel高的频率来跑运算(当然用户自己要承担CPU高频烧毁的风险),所以很多计算机爱好者更青睐AMD。&br&作者王越,美国宾夕法尼亚大学计算机系研究生,中国著名TeX开发者,非著名OpenFOAM开发者。
《程序员》2013-2期《MAC OS背后的故事——向Intel迁移!(中)》说的很明白。以下是摘自其内容: Itanium的诞生 有了Marklar团队的成果,接下去只是何时转换到x86架构平台的问题。但这时,Intel却持续走低,苹果似乎有了一个除Intel以外的选择——AMD。 在…
题主自问自答一发,从17年寒假开始,占用业余时间,断断续续终于完成了一个自己娱乐自己的小项目,是一个采用MIPS32v2指令集的流水线CPU内核,并且设计一些外设组成系统。&br&使用DE0-NANO开发板,整个系统具有20KB RAM和40KB ROM,设计有GPIO外设和外部中断引脚。初期可以达到60MHz主频,目前经过优化,主频可以达到85MHz。&br&CPU内核为顺序执行单发射的5级流水线架构,除了乘法指令需要4周期、除法指令需要32周期以外,其余大部分指令都可单周期执行。(有些指令涉及相关的,可能需要2周期完成,不过设计有前推结构,尽量避免出现数据相关)&br&另外编写了一个简单的.s启动文件,利用linux系统下mips交叉编译器,实现了c语言编程。&br&最后作为实验项目,实验了呼吸灯和流水灯,自己对这个项目的完成情况相对满意。&br&后期准备增加定时器和串口模块,这样可以更加具有实用性。
题主自问自答一发,从17年寒假开始,占用业余时间,断断续续终于完成了一个自己娱乐自己的小项目,是一个采用MIPS32v2指令集的流水线CPU内核,并且设计一些外设组成系统。 使用DE0-NANO开发板,整个系统具有20KB RAM和40KB ROM,设计有GPIO外设和外部中断引…
大致看了大家的回答:&br&在美国的都建议回国,在国内的都喊着去硅谷镀金。&br&围城。
大致看了大家的回答: 在美国的都建议回国,在国内的都喊着去硅谷镀金。 围城。
谢邀 &a data-hash=&509fd19ce327bf9d56fd0fda70119d1a& href=&///people/509fd19ce327bf9d56fd0fda70119d1a& class=&member_mention& data-editable=&true& data-title=&@小心假设& data-hovercard=&p$b$509fd19ce327bf9d56fd0fda70119d1a&&@小心假设&/a&&br&&br&结论放前面:对于不稳定系统和一个正弦输入,伯德图描述了理论上存在(但不稳定)的一个正弦系统输出与正弦输入的幅度和相位关系。&br&&br&可以从两个角度去理解这个问题。第一个角度,考虑一个不稳定系统,输入u(t)输出x(t),和它的一个稳定闭环系统;比如系统是G(s)=1/(s-1),比例控制器C(s)=2,单位负反馈,则闭环稳定。那么此时,假定给一个正弦的参考输入r(t),由于闭环稳定,闭环系统各处的信号都会收敛到一个正弦信号,包括u(t)和x(t)。定义u(t)和x(t)收敛到u*(t)和x*(t),可以猜想此时伯德图一定描述了u*(t)和x*(t)的联系。&br&&br&第二个角度,不妨考虑这个问题:假如没有负反馈和控制器,那么系统一定不存在一个有界的解吗?刚才的那个x*(t)不就是有界的解吗?假如我给系统输入刚才的u*(t),系统的输出会不会就是x*(t)?答案是肯定的,只不过条件太苛刻,在现实世界(即便是仿真里)都很难实现。这个条件就是系统状态的初值x(0)必须和x*(0)一致。&br&&br&这一点从微分方程和状态空间的角度更好理解,对于刚才那个系统,状态空间的实现是xdot=x+u。考虑正弦输入u*(t)=sin(t)和正弦输出x*(t)=1/sqrt(2)*sin(t-3/4*pi),代入系统的微分方程发现等式成立。这意味着x*(t)确实是系统在正弦输入u*(t)下的解。而x*(t)的确是正弦的。可以猜想伯德图一定描述了这样的u*(t)和x*(t)的联系。&br&&br&需要注意的一点是,x*(t)这个解是&i&不稳定的&/i&,即所有起于x*(0)周围的系统的解都是发散的。所以虽然理论上存在,但是无法在现实中观察到。反观稳定的系统,它对应的解x*(t)是&i&稳定的&/i&,即所有起于x*(0)周围的系统的解都会收敛到x*(t),这就是为什么在稳态下我们能看到一个长得很像x*(t)的曲线。&br&&br&总而言之,我的看法是,不论系统是否稳定,伯德图反映了一个系统受正弦激励时理论上存在的一个有界正弦解与正弦激励的幅度相位关系。 这里提出了两个思路可以帮助理解不稳定系统伯德图的物理意义。至于严格的数学证明,我想其实并不难,对于任意的线性系统和正弦输入,找到合适的系统初值使得微分方程解中的不稳定分量的初值为零即可。可以参考math stackexchange上这个问题的答案:&a href=&///?target=http%3A///questions/210703/what-is-the-physical-meaning-of-bode-plot-in-case-of-unstable-system/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&control theory&i class=&icon-external&&&/i&&/a&。&br&&br&&br&*出于叙述方便,我没有区分系统状态和系统输出,都称作x,这个并不影响结论。&br&&br&&br&&br&----------------------------------------------赤裸裸的骗赞分割线-------------------------------------------------------&br&感谢支持。Simulink程序网盘地址:链接:&a href=&///?target=http%3A///s/1i5tZhe1& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&/s/1i5tZhe&/span&&span class=&invisible&&1&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a& 密码:5mse。&br&&br&&br&&br&相关问题:&br&&a href=&/question/& class=&internal&&如何用Bode图判断系统的稳定性? - 电气工程&/a&&br&&a href=&/question/& class=&internal&&伯德图中的相角裕量和幅值裕量有什么物理意义? - 自动控制&/a&&br&&a href=&/question/& class=&internal&&自动控制原理中,如何理解“相角的超前(或滞后)”? - 控制理论与控制工程(硕)&/a&&br&&a href=&/question/& class=&internal&&如何分析下面Bode图的稳定性? - 电气工程&/a&&br&&a href=&/question/& class=&internal&&开环或者闭环传递函数的伯德图意义? - 自动化&/a&&br&&a href=&/question/& class=&internal&&经典控制理论波特图中剪切频率大小的意义? - 考研&/a&&br&&br&&a href=&/question/& class=&internal&&传递函数的零点、极点怎么解释,有什么用? - 控制&/a&&br&&a href=&/question/& class=&internal&&研究传递函数的固有频率的意义在哪里? - 自动化&/a&
结论放前面:对于不稳定系统和一个正弦输入,伯德图描述了理论上存在(但不稳定)的一个正弦系统输出与正弦输入的幅度和相位关系。 可以从两个角度去理解这个问题。第一个角度,考虑一个不稳定系统,输入u(t)输出x(t),和它的一个稳定闭环系…
注:仅限x86-16bit环境讨论&br&&br&&b&我个人觉得&/b&,就是编码太麻烦,opcode不太够用,指令太长。&br&&br&汇编指令由前缀、opcode、操作对象组成,具体的来说,如下图:&br&&img data-rawheight=&244& data-rawwidth=&617& src=&/122ca90a49d851652bdfa3_b.png& class=&origin_image zh-lightbox-thumb& width=&617& data-original=&/122ca90a49d851652bdfa3_r.png&&对于一般的MOV来说,操作对象有两个,可能是:寄存器(reg)、立即数(imm)、内存(mem)&br&&br&16位环境下,寄存器的编码规则如下:&br&&div class=&highlight&&&pre&&code class=&language-text&&000 AX AL
&/code&&/pre&&/div&另外有一个bit专门判断选择的是8bit还是16bit寄存器,编码表上并无段寄存器存在。&br&&br&为什么当时不把段寄存器也放进去?&br&&br&原因是放进去的话,指令就不好编码了。&br&因为MOV操作的寄存器有两个,其中的一个还可能是内存,还可能是寄存器组合,这样的话,2*3bit用于描述寄存器,剩下2个bit用于描述是内存还是别的东西,这样算下来,一个字节勉强够用。&br&而如果把段寄存器加上,就需要4个bit编码一个寄存器,仅仅描述两个寄存器就需要一个字节,加上其它的修饰,&b&MOV指令长度就需要整体增加一个字节&/b&,这对于过去的计算机来说,开销无疑是非常巨大的,过去计算机内存都是以KB计算的,每个MOV指令增加一个字节,在设计者看来是无法接受的。&br&&br&早期的汇编指令设计原则之一就是&b&尽量少占存储空间,因为当时的存储设备实在是太贵了&/b&。&br&&br&下图中就是具体MOV指令的编码(不含段寄存器)情况:&br&&br&&img data-rawheight=&244& data-rawwidth=&788& src=&/d8cb36f1a18d_b.png& class=&origin_image zh-lightbox-thumb& width=&788& data-original=&/d8cb36f1a18d_r.png&&&br&图中w代表MOV操作数的大小(是8bit还是16bit)。&br&&br&同时,Intel的指令是慢慢发展起来的,并且保证了指令的二进制兼容,Intel早期为了提高指令的速度,还对一部分常用的指令进行了优化,上图中红框里的三个指令就是针对常用指令进行的优化。优化的目的是缩短指令长度(MOV reg,imm缩短1字节,MOV AX,[mem]缩短1字节)。&br&&br&&b&如果把段寄存器都加上,MOV指令最短长度就需要3字节&/b&,并且1011 w reg这种编码就不够用了(因为加上段寄存器的话reg就需要4bit)。&br&&br&而且,&b&如果MOV里加了,INC/DEC要不要加?XCHG要不要加?&/b&如果都加上,INC/DEC用单字节也不好编码了,XCHG用单字节也不好编码了。&br&&br&实际中,操作段寄存器的MOV指令,用了另外的opcode编码:&br&&br&&img data-rawheight=&183& data-rawwidth=&793& src=&/7f9411891feaf4ef3dd9b_b.png& class=&origin_image zh-lightbox-thumb& width=&793& data-original=&/7f9411891feaf4ef3dd9b_r.png&&那么为什么这里不把立即数加上呢?&br&&br&因为这里头,如果加上立即数的话,需要再占用一个opcode的值。而MOV指令本身已经使用了28个opcode的数值了,单字节的opcode一共只有256个,考虑到未来的扩展需要,肯定不能把256个值都用了,所以单字节的opcode能省就省,考虑到修改段寄存器并不是很常见的操作,所以就省了这个opcode&br&&br&其实到了32位时代,如果彻底放弃兼容性,重新设计汇编编码的话,完全可以把立即数-&段寄存器的指令加上,但因为Intel的文化里,兼容性是非常重要的,所以Intel不放弃兼容性,指令只要这样一代代传下来。&br&&br&Intel当年为了让指令尽可能的段,用了很多单字节指令:&br&&br&前缀类指令:9个&br&XCHG:8个&br&标志位相关:12个&br&INC/DEC:16个&br&PUSH/POP相关:27个&br&IN/OUT:8个&br&&br&再加上跳转类的用掉的将近40个opcode,各种算数运算用掉的30多个,基本上单字节的编码已经用的差不多了。&br&&br&所以,为了让指令更紧凑,只能把常用的寄存器的常用功能编码,不常用的只能以后再说。&br&&br&部分单字节指令的编码构成(reg代表通用寄存器,sreg2代表段寄存器):&br&&br&&img data-rawheight=&983& data-rawwidth=&568& src=&/34d6daea971b59fdf8aec2_b.png& class=&origin_image zh-lightbox-thumb& width=&568& data-original=&/34d6daea971b59fdf8aec2_r.png&&
注:仅限x86-16bit环境讨论 我个人觉得,就是编码太麻烦,opcode不太够用,指令太长。 汇编指令由前缀、opcode、操作对象组成,具体的来说,如下图: 对于一般的MOV来说,操作对象有两个,可能是:寄存器(reg)、立即数(imm)、内存(mem) 16位环境下,寄存器…
游戏里的一堵墙爆炸了,砖头乱飞。每一块砖头飞行的方向、速度、姿态,是根据实际砖头的重量、形状、风速、冲击力、互相之间的碰撞真实计算出来的呢,还是预先录好一段动画,无论这堵墙的哪个位置爆炸,爆炸力多大,看到的都是同一段动画。前者就叫做物理模拟。&br&没有“物理加速”这个术语,正确的术语是“硬件加速物理模拟”,就是用特定的硬件来加速物理模拟的计算过程。&br&PhysX是一种物理模拟的实现和API。游戏开发的时候只要使用了PhysX的API,同时游戏运行的平台上也支持PhysX API,就可以在游戏中开启物理模拟效果——更真实的爆炸、水波、织物、桌椅板凳乱飞……&br&PhysX当然可以用CPU实现。但是物理模拟计算需要大量的数学运算,会消耗CPU的计算能力。物理模拟运算量增加了,CPU用来处理图形和游戏逻辑的时间就减少了,游戏就更有可能不流畅。&br&所以PhysX有基于CUDA的实现,把大量物理模拟的计算搬到GPU上来“加速”。但是同样的,物理模拟计算占用了GPU资源,GPU用于处理图形的计算能力就减少了。如果GPU足够强劲,在处理图形之外能力还有富裕,那么用来处理PhysX当然是很合算的。但是如果GPU不够强劲,处理图形之外再处理PhysX的物理模拟运算,就会拖慢整个游戏渲染过程。&br&&br&----------------------------- 吐槽的分割线 -----------------------------------&br&最后,没看明白“PhysX是不是噱头”和“PhysX能不能用CPU实现”二者之间有什么逻辑联系。
游戏里的一堵墙爆炸了,砖头乱飞。每一块砖头飞行的方向、速度、姿态,是根据实际砖头的重量、形状、风速、冲击力、互相之间的碰撞真实计算出来的呢,还是预先录好一段动画,无论这堵墙的哪个位置爆炸,爆炸力多大,看到的都是同一段动画。前者就叫做物理模…
&p&这叫做线制。&/p&&p&对于不同的电压等级,线制不尽相同。我们姑且认为题主探讨的是低压配电系统。&/p&&p&在我的书《低压成套开关设备的原理及其控制技术》第1章1.6.2节“各类接地系统”有论及,书中的图1-50如下:&/p&&img src=&/v2-de10d332c6c4abe057adf8ad6e897c31_b.jpg& data-rawwidth=&829& data-rawheight=&637& class=&origin_image zh-lightbox-thumb& width=&829& data-original=&/v2-de10d332c6c4abe057adf8ad6e897c31_r.jpg&&&p&上图中的变压器指的是电力变压器。此图的说明如下:&/p&&p&&b&IEC标准中按配电系统带电导体的相数和根数进行分类。其中“相”指的是电源的相数,而“线”指的是在正常运行时有电流流过的导线。&/b&&/p&&p&&b&注意:当低压配电系统正常时,接地线PE是没有电流流过的,所以在IEC的低压配电网带电导体系统形式中接地线PE不属于“线”的范畴。&/b&&/p&&p&图1、图2是三相四线制带电导体系统形式,这是应用最广的带电导体系统形式。&/p&&p&图1中除了三根相线外,还有一根中性线或者兼具有中性线N和接地线功能的PEN线;图2中除了三根相线外,还有一根中性线N和接地线PE。&/p&&p&图3、图4和图5 是三相三线制带电导体系统形式。它们的特点是电源输出的电压仅为线电压,没有相电压。其中变压器绕组有星形和三角形两种。&/p&&p&图6是两相三线制带电导体系统形式,它的特点是可以引出120/240V两种电压。240V供较大负荷使用,而120V则供小负荷使用,对人身安全防护更为有利。&/p&&p&图7和图8是单相两线制带电导体系统形式,其中图7用三相变压器构成单相两线制的低压配电网带电导线系统形式,图8则用单相变压器构成单相两线制的低压配电网带电导线系统形式。图8因为没有中性线,因此对于用电设备来说更安全。&/p&&p&图9是单相三线制带电导体系统形式,其中变压器的两个绕组间相位角为零,两绕组的连接处引出线为N线,因此它被称为单相三线制。&/p&&p&我们看到,对于低压配电系统来说,也许图5属于三角形接法吧。&/p&&p&对于6到10kV的中压配电网,线制一般为角接。角接的一个明显好处是可以消除三次谐波。&/p&&p&也因此,在6到10kV的中压配电网中,不存在类似低压配电网的PEN零线。&/p&&p&&b&注意1:在低压配电网中若出现三次谐波,因为三次谐波的三相电流在零线或者中性线上不是按矢量叠加的,而是按代数和叠加的,因此零线或者中性线上的谐波电流很大,会引起母线或者电缆温升提高。&/b&&/p&&p&&b&在这种情况下,标准和规范规定,零线或者中性线的导体截面必须与相线等截面。&/b&&/p&&p&注意2:对于低压配电网中用电侧的功能性变压器,例如隔离变压器、电炉变压器和控制变压器等等,二次回路有角接的产品。&/p&&p&=============================&/p&&p&&b&问题1:为什么电力变压器的400V低压侧少见三角形接法?&/b&&/p&&p&&b&问题2:为什么不建议把TN-S或者TN-C-S叫做三相五线制?三相五线制这种错误称呼的错误点在哪里?&/b&&/p&
这叫做线制。对于不同的电压等级,线制不尽相同。我们姑且认为题主探讨的是低压配电系统。在我的书《低压成套开关设备的原理及其控制技术》第1章1.6.2节“各类接地系统”有论及,书中的图1-50如下:上图中的变压器指的是电力变压器。此图的说明如下:IEC标…
&b&问题1:&/b&&br&&br&设备管理器属性里:&br&&br&&b&内存范围&/b&,表示的是MMIO(内存映射)的范围,这个范围是通过PCI配置寄存器读出来的,Windows里,在驱动里用HalGetBusData可以获得,用户态好像没有直接访问的方法。&br&&br&关于PCI寄存器的描述,详见:&a class=& wrap external& href=&///?target=http%3A//en.wikipedia.org/wiki/PCI_configuration_space& target=&_blank& rel=&nofollow noreferrer&&PCI configuration space&i class=&icon-external&&&/i&&/a&&br&&br&鉴于篇幅原因,只贴一个图:&br&&br&&img data-rawheight=&600& data-rawwidth=&650& src=&/332ae54dfb79dff2380c9c_b.jpg& class=&origin_image zh-lightbox-thumb& width=&650& data-original=&/332ae54dfb79dff2380c9c_r.jpg&&&br&其中你能看到的属性里的那些描述,都是Base Address Registers里的东西。&br&&br&&b&I/O范围&/b&,表示的是I/O端口号,如果你熟悉汇编,你就知道汇编里有IN/OUT指令,这个I/O范围指的就是操作这个设备使用IN/OUT指令时的端口范围,这个范围跟内存就没什么关系了。有些I/O范围也写在PCI配置里,但是没有严格的规定。&br&&br&这段MMIO映射的内存大小代表什么意思呢?如果准确点说,我也不知道。&br&&br&因为显卡厂商一般不太愿意公开这方面的信息,从我看到的一些资料上看,各个厂商对MMIO映射的地址空间的描述也完全不同,没有任何规范可言。&br&&br&如果能拿到厂商的白皮书的话,也许还好办,但显卡厂商出于保密原因一般不给这方面的资料。&br&&br&一般来说,这里包含的内容有:&br&&br&1) 操作显卡的寄存器映射,用于发送控制命令,你的图里的那128K可能就是这个用途,这类地址一般都可以直接读写;&br&2) 映射显卡的一部分显存(注意不是全部),你的图里的那256M可能就是这个用途,这类地址读写的特性不确定。&br&&br&&b&问题2:&/b&&br&&br&Linux一般是向Frame Buffer(&a class=& wrap external& href=&///?target=http%3A//en.wikipedia.org/wiki/Framebuffer& target=&_blank& rel=&nofollow noreferrer&&Framebuffer&i class=&icon-external&&&/i&&/a&)里写数据,然后显卡会周期性的取走数据。&br&&br&写之前可能会通过I/O端口或者其它MMIO地址去操作显卡寄存器发送一部分控制命令,具体是什么就不清楚了,厂商一般都保密。&br&&br&Windows应该采取的是类似的动作,Frame Buffer就是你截图里的那256M的一部分。&br&&b&&br&问题3:&/b&&br&&br&你截图肯定不全,滚动条向下,你还能找到更多的MMIO内存地址范围,但一般情况下,不会把全部显存都映射过去。&br&&br&原因是显存可能很大,这么做太浪费地址空间,对于32位系统来说,地址空间实在有限。&br&&br&那么CPU是如何通过256M地址空间访问1G的显存的?原因是256M只是一个窗口,它可以把显存的某一段映射到内存中去,如果CPU要操作其它的位置,就发送控制命令改变映射的范围即可。&br&&br&这个技术有点类似于:&a href=&///?target=http%3A//en.wikipedia.org/wiki/Bank_switching& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Bank switching&i class=&icon-external&&&/i&&/a&&br&&br&&b&问题4:&/b&&br&&br&MMIO映射空间小于实际显卡显存,有些时候是为了刷新更多帧的需要,以题主你自己的显卡为例,可以先映射1G空间里的第一个256M,把要显示的图像写进去,再映射第二个256M,把后面要显示的图像写进去……以此类推,这样就能操作完整的显存了,甚至这么做可以提前把未来要绘制的图像先写到显存里。&br&&br&不同的显卡每次能映射的最大显存数是不同的,可能是显卡本身DMA的限制,或者显卡本身处理能力有限,毕竟一次传输完一个完整显存大小的数据对于显卡来说负担还是太大了。&br&&br&&b&问题5:&/b&&br&&br&你可以去了解一下PCI驱动的开发,但这方面真的没有书可以推荐,因为显卡技术涉及到的保密内容太多,其中很多东西甚至没有专利,只有一些小厂商公开了一部分2D加速的技术资料,但具体如何操作寄存器,如何渲染图像,资料实在太难找。&br&&br&-----------------------------------&br&&br&&a data-title=&@Toe Z& data-editable=&true& class=&member_mention& href=&///people/66acde23d2f5c2780ac17aac& data-hash=&66acde23d2f5c2780ac17aac& data-hovercard=&p$b$66acde23d2f5c2780ac17aac&&@Toe Z&/a&
的一些解释我不是特别认同,说CPU不能直接访问显存这个问题,我觉得说法不太严谨。&br&&br&一般来说,Linux里都是用Frame Buffer驱动来向显卡写数据的,Frame Buffer最终是把数据送到显存里,这个过程是可以直接操作显存的,只不过这个“操作”的概念很模糊,因为有些是用DMA把数据传走的,如果说不能直接访问,也不对,至少DMA控制器是看见这部分显存了,只不过直接用CPU的指令MOV肯定会失败。&br&&br&通常情况下操作显卡的动作是:&br&&br&第一步:准备一个命令字,通过I/O端口或者MMIO映射的寄存器发送;&br&第二步:利用MMIO做DMA把内存里的东西送到显存里;&br&第三步:如果有返回命令,这里可能要等待DMA中断完成之类的动作;&br&&br&如果是频繁的刷新图像,可能会有一个专门的线程不停的向MMIO映射的那部分显存里做DMA,目的就是不停的刷新显存,让显卡那边图像更新。&br&&br&&b&统一编址的用途是给DMA控制器做DMA的时候用的&/b&,否则DMA操作起来会很麻烦。所以,严格的说,看具体什么样的显卡,有些显卡的显存是可以被CPU直接访问的,有些是不能的,&b&但所有显存都是可以被DMA的&/b&。&br&&br&-----------------------------------&br&&br&题外话:&br&&br&显卡的具体操作技术都是保密的,很多显卡驱动也都是闭源的,包括在Linux上(有办法可以规避GPL),显卡的3D加速之类的具体如何操作硬件,基本上不会有厂商公布,所以对外表现出来的这些特性只能猜。&br&&br&一些有合作的企业会公布一些代码,但看代码有时候很难理解它的行为,所以不要指望说看几本书就会写显卡驱动,很不现实,要做显卡驱动最好是到显卡厂商那边去。&br&&br&-----------------------------------&br&&br&睡不着,做了一个比较有意思的实验:&br&&br&在虚拟机里写一个简单的驱动,工作在内核态,然后找到显卡的MMIO的第一段地址,在驱动里加一段代码去读这个地址,结果发现这段地址上的数据正好就是屏幕上显示的像素信息。&br&&br&&div class=&highlight&&&pre&&code class=&language-c&&&span class=&n&&VOID&/span& &span class=&nf&&ReadGPUMem&/span&&span class=&p&&()&/span&
&span class=&p&&{&/span&
&span class=&n&&LARGE_INTEGER&/span& &span class=&n&&p&/span&&span class=&p&&;&/span&
&span class=&kt&&int&/span& &span class=&o&&*&/span& &span class=&n&&np&/span&&span class=&p&&;&/span&
&span class=&n&&p&/span&&span class=&p&&.&/span&&span class=&n&&QuadPart&/span& &span class=&o&&=&/span&
&span class=&mh&&0xE8000000&/span&&span class=&p&&;&/span&
&span class=&n&&np&/span& &span class=&o&&=&/span& &span class=&n&&MmMapIoSpace&/span&&span class=&p&&(&/span&&span class=&n&&p&/span&&span class=&p&&,&/span& &span class=&n&&PAGE_SIZE&/span&&span class=&p&&,&/span& &span class=&n&&MmNonCached&/span&&span class=&p&&);&/span&
&span class=&k&&if&/span& &span class=&p&&(&/span&&span class=&n&&np&/span& &span class=&o&&!=&/span& &span class=&nb&&NULL&/span&&span class=&p&&)&/span&
&span class=&p&&{&/span&
&span class=&n&&KdPrint&/span&&span class=&p&&((&/span&&span class=&s&&&%08x %08X %08X %08X %08X&/span&&span class=&se&&\n&/span&&span class=&s&&&&/span&&span class=&p&&,&/span& &span class=&n&&np&/span&&span class=&p&&,&/span& &span class=&n&&np&/span&&span class=&p&&[&/span&&span class=&mi&&0&/span&&span class=&p&&],&/span& &span class=&n&&np&/span&&span class=&p&&[&/span&&span class=&mi&&1&/span&&span class=&p&&],&/span& &span class=&n&&np&/span&&span class=&p&&[&/span&&span class=&mi&&2&/span&&span class=&p&&],&/span& &span class=&n&&np&/span&&span class=&p&&[&/span&&span class=&mi&&3&/span&&span class=&p&&]));&/span&
&span class=&p&&}&/span&
&span class=&k&&else&/span&
&span class=&n&&KdPrint&/span&&span class=&p&&((&/span&&span class=&s&&&Map fail&/span&&span class=&se&&\n&/span&&span class=&s&&&&/span&&span class=&p&&));&/span&
&span class=&k&&return&/span& &span class=&p&&;&/span&
&span class=&p&&}&/span&
&/code&&/pre&&/div&&br&&br&因为是读的前4个int,所以用截图键(print screen)截图比较了一下,像素点像素值完全等于我通过debug打印的数值,这说明0xE8000000这个地址就是我虚拟机上的显存地址。&br&&br&然后我又在打印的后面加了一句:&br&&br&&div class=&highlight&&&pre&&code class=&language-text&&RtlZeroMemory(np, PAGE_SIZE);
&/code&&/pre&&/div&&br&屏幕显示似乎没有变化,但通过截图键截图发现,屏幕的上面有一条黑线,正好是我ZeroMemory的位置:&br&&br&&img data-rawheight=&379& data-rawwidth=&1276& src=&/4fc7c06f6dde_b.jpg& class=&origin_image zh-lightbox-thumb& width=&1276& data-original=&/4fc7c06f6dde_r.jpg&&&br&这说明至少虚拟机里显卡映射的这部分是肯定可以读写的,甚至会影响系统截图的效果。
问题1: 设备管理器属性里: 内存范围,表示的是MMIO(内存映射)的范围,这个范围是通过PCI配置寄存器读出来的,Windows里,在驱动里用HalGetBusData可以获得,用户态好像没有直接访问的方法。 关于PCI寄存器的描述,详见: 鉴于篇…
“高通芯片返修率5%”这句就是扯的。对于一款大规模出货芯片,这个返修率是高通和他的客户们不可容忍的。&br&高通2011财年的MSM芯片出货量接近5亿,MS8206的出货量未知,但用 100k 作为出货单位计算是没问题的吧?这么大从出货量,算算如果返修5%,是多大的灾难?那样的话很难大规模出货,客户不会买账;即便卖出去了,高通也会大规模召回芯片——那样会上科技新闻显要板块的。&br&&br&实际上,手机容易出问题的不是cpu,而是板子和外设。&br&电路板的设计,电磁兼容特性是个难点,iphone出过“天线门”问题。屏幕、键盘这些外设占手机成本的比重高,如果偷工减料,出问题的可能性也大。&br&&br&小米有没有撒谎不好说,但往cpu上面扯是没道理的。
“高通芯片返修率5%”这句就是扯的。对于一款大规模出货芯片,这个返修率是高通和他的客户们不可容忍的。 高通2011财年的MSM芯片出货量接近5亿,MS8206的出货量未知,但用 100k 作为出货单位计算是没问题的吧?这么大从出货量,算算如果返修5%,是多大的灾…
整型计算为主,辅以浮点:&br&&img data-rawheight=&592& data-rawwidth=&790& src=&/b49c944e198d82b0dfdbee_b.jpg& class=&origin_image zh-lightbox-thumb& width=&790& data-original=&/b49c944e198d82b0dfdbee_r.jpg&&&br&浮点计算&br&&img data-rawheight=&1200& data-rawwidth=&1920& src=&/ea7b6f52e888b_b.jpg& class=&origin_image zh-lightbox-thumb& width=&1920& data-original=&/ea7b6f52e888b_r.jpg&&&br&自己选
整型计算为主,辅以浮点: 浮点计算 自己选
&p&我的本科毕设就是这个题目,将某网络移植到FPGA上,现在能完整地跑一遍(虽然性能稀烂),下一步是做演示:板子上插个摄像头把人/车啥的圈出来显示在显示器上。&/p&&p&目前最高赞对你并没有任何帮助,大部分回答者一看就是没实际做过在那吓唬你,不要被某些回复吓到,问你学没学过FPGA,说你做不出来什么的。这个东西没多难的,做这个之前我只对单片机有一些了解,我自己从不会FPGA,不懂神经网络到把某个网络完整地在FPGA上跑一遍大概用了10个月,而且这段时间并不是很抓紧。如果你抓紧的话估计半年时间足矣。你也不用对神经网络很熟悉,你又不去开发算法,只要看懂代码就行了。&/p&&p&给你一个路线图:&/p&&p&先说下平台,强烈建议用ZYNQ,ZedBoard就行,实在没钱ZYBO也行,如果想实际应用上ZCU102(21K一块,只能说有钱真好)。&/p&&p&第一步,参照Caffe(别的也行)把各种常见层都用C/C++写一遍(我是用C写的),比如卷积,POOL,LRN,Inception之类的。目前HLS工具都是用的C/C++,Caffe用C++写的所以看Caffe照着改可能会容易些,不过只要你明白了各层的原理不参考Caffe也能做。&/p&&p&第二步,看Vivado HLS工具怎么用,将计算密集的部分放到FPGA上加速。我现在只做了卷积层加速,其他类型做加速感觉意义不大,之后有时间的话可能会做。&/p&&p&一定先看手册!!!一定先看手册!!!一定先看手册!!!&/p&&p&不要去买书,我买了好几本都是抄来抄去的,完全不如手册好用。先按照xilinx的UG871把所有的实验都做一遍,先有一个感性认识;再看UG902,将感性认识提升到理性认识,主要就是看比较关键的指令,有PIPELINE,UNROLL,ARRAY PARTITION等,现在说多了也没有用,到时候你就明白了。&/p&&p&要达到的效果是:&/p&&p&1、知道代码怎么写能够被综合(HLS中的代码要与硬件对应起来的,所以不是怎么写都行的)。&/p&&p&2、能够猜到用不同的优化指令综合出来的周期数以及资源利用率&/p&&p&如果这步做完了话你就会发现你之前写的卷积代码没法在FPGA上跑,需要作出调整,具体怎么调整。。。你到时候就知道了,现在说也没用。&/p&&p&第二步的结果是一个IP核,可以把IP核当作一个黑箱,把数据灌进去,参数灌进去就会输出一个结果,你可能会问怎么让ARM处理器调用这个IP核。如果你对单片机熟悉的话很好理解的,片内外设通过总线与CPU链接,CPU向对应地址写参数就可以控制片内外设了,生成的IP核就类似于这里面的片内外设,CPU告诉IP核卷积的参数,数据的起始地址之后启动加速器,加速器算完之后将数据输出到指定的位置。&/p&&p&&br&&/p&&img src=&/v2-7ddde9537cfa5d2e6d33cc879dcc5eef_b.png& data-rawwidth=&2373& data-rawheight=&786& class=&origin_image zh-lightbox-thumb& width=&2373& data-original=&/v2-7ddde9537cfa5d2e6d33cc879dcc5eef_r.png&&&p&&br&&/p&&p&所以这一步就涉及到IP核的集成,让ARM处理器能够调用IP核。传统的做法是&/p&&p&将IP核用Vivado IP Integrator工具,画个Blockdesign,综合实现生成比特流。&/p&&p&然后用SDK像开发单片机一样就行了,但是这个方法比较麻烦,不推荐。(上面那张图只是给一个例子)&/p&&p&&br&&/p&&p&于是引出第三步&/p&&p&用SDSoC最终实现。&/p&&p&个人感觉最难的部分还是集成这部分,有一阵卡了好久也没结果。赛灵思新出了个SDSoC工具,相当于Vivado+HLS+SDK,第二步中说的“集成”用SDSoC就能完成。之所以让你先看HLS是因为SDSoC工具本身就是调用HLS的,就算直接用SDSoC也得先学HLS。用SDSoC学HLS效率很低,因为SDSoC=Vivado+HLS+SDK,每生成一次都要完整地走一遍HLS,综合,实现,生成比特流的流程,放在HLS里大概十分钟搞定的东西放在SDx里要一个半小时,而且多出来的那些时间并不会产生什么有用的东西;而且出了问题你不知道是HLS造成的还是别的东西造成的,聚焦在你要学的东西上面。学完了HLS上手SDSoC很快的。&/p&&p&其实现在介绍得很详细也没啥大用,没有感性认知不可能形成理性认识,建议把我的回答收藏,每做完一步再看看会有新的体会。&/p&&p&提醒几点:&/p&&p&1、不是所有C代码都能被综合,如果你用HLS时候发现C Synthesis 跑了好几个小时都没反应那肯定是你代码写得有问题,写得好的代码几分钟就能综合完。&/p&&p&2、SDSoC用最新版本的,现在叫SDx&/p&&p&3、一定要有一个板子,有钱上ZCU102,没钱上Zed,再穷也要买个ZYBO,ZYBO这玩意好像也不用买,管赛灵思的大学计划要。&/p&&p&4、第一次看技术手册不要看得很细,因为就算你看得很细也看不懂,还是那句话,先有感性认识然后才有理性认识。看完之后去实践,实践中遇到问题再回头去看技术手册,赛灵思的技术手册相当完善,如果找不到,再找一遍。目前我遇到过的&b&所有&/b&问题都可以在技术手册找到答案,只是有的得找好久,开始以为技术手册里找不到,但是无意间看到技术手册的某个地方问题就解决了&/p&
我的本科毕设就是这个题目,将某网络移植到FPGA上,现在能完整地跑一遍(虽然性能稀烂),下一步是做演示:板子上插个摄像头把人/车啥的圈出来显示在显示器上。目前最高赞对你并没有任何帮助,大部分回答者一看就是没实际做过在那吓唬你,不要被某些回复吓…
事实上已经拉下神坛了&br&&br&x299v2表示现在买x299的基本都是交了智商税&br&&br&Intel真正慌的是epyc,这是对利润最高的领域的竞争&br&&br&看看Intel自己做的ppt就知道了&br&&br&&a href=&/p/?utm_source=qq&utm_medium=social& class=&internal&&&span class=&invisible&&https://&/span&&span class=&visible&&/p/27&/span&&span class=&invisible&&915511?utm_source=qq&utm_medium=social&/span&&span class=&ellipsis&&&/span&&/a&
事实上已经拉下神坛了 x299v2表示现在买x299的基本都是交了智商税 Intel真正慌的是epyc,这是对利润最高的领域的竞争 看看Intel自己做的ppt就知道了
做了十多年游戏,现在不做了,手痒回答下。&br&&br&打个简单的比方。通常情况下,cpu跟gpu就像流水线上两个工人,cpu不停生成原料(扔到显存里),gpu(从显存里)取出原料打包扔到屏幕上的过程基本是独立的。&br&如果cpu效率低了,gpu打包完就得等cpu把下一批原料准备好,这时gpu就会空闲下来,结果就是成品数量变少,但是gpu打包成品的能力并不受到cpu的影响。&br&所以这个问题的答案得看你对拖后腿的定义是啥。是让gpu空闲了,还是影响到了画面质量。&br&&br&补充下:&br&这个问题本身不是太严谨,『性能输出』这个词可以多种解释,严格来说,电脑作为一个整体,任何一部分的性能不匹配都会拖其它部分的后腿(内存,总线,磁盘。。。)&br&而且题主的问题我没理解错的话,是以为gpu作为主动方,向cpu要数据的时候,因为cpu速度太慢要不到,因此拖了后腿。但实际上cpu作为【中央】处理器,所有的指令都是由它发出的,别说gpu是个输出设备,就连输入设备,比如键盘鼠标,实际的工作方式也是cpu主动说你们把目前的状态报上来,我好处理,而不是你按了个左键,鼠标告诉cpu你该发射子弹了。
做了十多年游戏,现在不做了,手痒回答下。 打个简单的比方。通常情况下,cpu跟gpu就像流水线上两个工人,cpu不停生成原料(扔到显存里),gpu(从显存里)取出原料打包扔到屏幕上的过程基本是独立的。 如果cpu效率低了,gpu打包完就得等cpu把下一批原料准…
&p&谢题主邀请~
一般经典教材的那些reference都是重要的经典论文,比如几本「圣经」和Sansen的书里的各种参考文献。&/p&&p&不过那些paper基本比较老了,题主要2000年后的话可能需要分模拟IC里的各个不同的研究领域来看吧。&/p&&p&可以参考一些分支领域内权威写的综述类文章,比如去年 ESSCIRC 上的一篇:“Data Converter Reflections: 19 Papers from the Last Ten Years That Deserve a Second Look ”,总结分析了近十年AD/DA领域一些比较经典的论文。&/p&&p&一群领域内的大佬作为文章的作者:&/p&&img src=&/v2-e8f80c6ce91783ebda07891a_b.jpg& data-rawwidth=&693& data-rawheight=&225& class=&origin_image zh-lightbox-thumb& width=&693& data-original=&/v2-e8f80c6ce91783ebda07891a_r.jpg&&&p&Reference的文章也很有代表性(题主需要JSSC上paper的话,其中的ISSCC的文章基本都能找到对应的JSSC的详细长文)&/p&&img src=&/v2-95db7fd4ae71be_b.jpg& data-rawwidth=&481& data-rawheight=&541& class=&origin_image zh-lightbox-thumb& width=&481& data-original=&/v2-95db7fd4ae71be_r.jpg&&&br&&img src=&/v2-7f497263ebf35c4d45bceb_b.jpg& data-rawwidth=&470& data-rawheight=&538& class=&origin_image zh-lightbox-thumb& width=&470& data-original=&/v2-7f497263ebf35c4d45bceb_r.jpg&&&br&&img src=&/v2-511c89b6c8c85ff0f2d632a01cf9b817_b.jpg& data-rawwidth=&472& data-rawheight=&618& class=&origin_image zh-lightbox-thumb& width=&472& data-original=&/v2-511c89b6c8c85ff0f2d632a01cf9b817_r.jpg&&&p&再细分小领域的话也有一些不错的综述文章可以作为索引的参考,比如同年ESSCIRC 上Temes关于Incremental ADC的一篇:&/p&&img src=&/v2-cbb2000fbe066bedd791a27785f5abe6_b.jpg& data-rawwidth=&584& data-rawheight=&115& class=&origin_image zh-lightbox-thumb& width=&584& data-original=&/v2-cbb2000fbe066bedd791a27785f5abe6_r.jpg&&&p&而且还能从这些综述类文章中了解到小领域的发展脉络和趋势。&/p&&br&&p&另外,一些大佬也仍然有在写一些关于基本模块研究的文章,比如:&/p&&p&Abidi在16年9月份的TCAS1上发了连续两篇单篇12页的R-C电路的各种理论推导&/p&&img src=&/v2-d9eebd559dda2e34aac839bb3c6772a5_b.jpg& data-rawwidth=&795& data-rawheight=&171& class=&origin_image zh-lightbox-thumb& width=&795& data-original=&/v2-d9eebd559dda2e34aac839bb3c6772a5_r.jpg&&&br&&img src=&/v2-629ae469f2e80d3e093ebe6_b.jpg& data-rawwidth=&792& data-rawheight=&210& class=&origin_image zh-lightbox-thumb& width=&792& data-original=&/v2-629ae469f2e80d3e093ebe6_r.jpg&&&p&24页的公式和电路分析绝对酸爽,哈哈~~&/p&&p&(提供一些关于经典论文的思路,仅供参考:))&/p&
谢题主邀请~
一般经典教材的那些reference都是重要的经典论文,比如几本「圣经」和Sansen的书里的各种参考文献。不过那些paper基本比较老了,题主要2000年后的话可能需要分模拟IC里的各个不同的研究领域来看吧。可以参考一些分支领域内权威写的综述类文章,…
大四准研究生,目前在研究所打杂。本科期间参加过两届飞思卡尔和两届电子设计大赛,由于专业是光电,所以还参加了光电设计大赛,其他的水一水的比赛还有大小挑战杯和数学建模。&br&抛开水过的比赛不说,先说飞思卡尔,第一年飞思卡尔自己一个人做,从机械设计到电路设计到最后pid,图像处理都是一个人完成的,虽然最后省赛没跑下来,但是最大的感受就是飞思卡尔在短短的三个月的时间里面,让我对各种软件的使用水平有了飞速的增长,因为有了比赛的压力,逼着你不得不去解决一个又一个bug,同时还得有创新思维,怎么去解决新的赛道元素。我记得那年是直角和双线变单线,用各种土方法来回修改。但是最后比赛的时候看着一个车从无到有,最后刷的一下从你眼前闪过的时候,那种感觉只有做过的人才明白。&br&再说电赛,做的是宽带放大器,300M的正弦1000被的放大。也是从这个时候开始,才真正的认识到了理论的重要性,真正知道了类似于相位裕量这种学时候看着像是玄学的概念到底是什么,datasheet里面的各种图表代表什么意思,还有一些书本上讲的很模糊的自激和反馈都能很直观的理解。总得来说,电赛教给的是理论怎么运用到实践。&br&总得来说,并不是要说做比赛有多好,只是觉得做一些比赛或者参与一些项目可以让自己更加接近于一个本科生要求的知识水平和技能,如果没有一些实践,即使是系第一,也只能说明你考试周复习的好,或者日常学习能力不错。当然本回答只局限于专业相关的工科生。
大四准研究生,目前在研究所打杂。本科期间参加过两届飞思卡尔和两届电子设计大赛,由于专业是光电,所以还参加了光电设计大赛,其他的水一水的比赛还有大小挑战杯和数学建模。 抛开水过的比赛不说,先说飞思卡尔,第一年飞思卡尔自己一个人做,从机械设计…
某款PLC的RS485通信线路接线原则:&br&&img src=&/8c5211faa20c14b363fa5_b.jpg& data-rawwidth=&592& data-rawheight=&694& class=&origin_image zh-lightbox-thumb& width=&592& data-original=&/8c5211faa20c14b363fa5_r.jpg&&&img src=&/7cf7d9ff0e78daeb8367dbe5080028ea_b.jpg& data-rawwidth=&644& data-rawheight=&702& class=&origin_image zh-lightbox-thumb& width=&644& data-original=&/7cf7d9ff0e78daeb8367dbe5080028ea_r.jpg&&&b&注意:当通信速率仅为9600bps时,可不接终端电阻。&/b&
某款PLC的RS485通信线路接线原则: 注意:当通信速率仅为9600bps时,可不接终端电阻。
CPU的关系大。不流畅源于几个方面:&br&1. Android的ui是java的&br&2. 每一次刷新用了大量的draw call,每个draw call只画两个三角形之类非常简单的几何,造成CPU负担&br&3. 驱动模型落后,没法稳定和高效地在CPU-&GPU传递数据&br&4. 很多app在内部其实是胡搞的,不是android ui的原因&br&&br&5之后很大程度上解决了1,其他几个还在。
CPU的关系大。不流畅源于几个方面: 1. Android的ui是java的 2. 每一次刷新用了大量的draw call,每个draw call只画两个三角形之类非常简单的几何,造成CPU负担 3. 驱动模型落后,没法稳定和高效地在CPU-&GPU传递数据 4. 很多app在内部其实是胡搞的,不是an…
要是没购ATI,怎么显卡拳打Intel?&br&&br&&br&&br&&br&只能cpu脚踢nvidia了。
要是没购ATI,怎么显卡拳打Intel? 只能cpu脚踢nvidia了。
这个说法很明显是错误的,我怀疑这个说法是从错误的英文翻译里面得来的。&br&&br&绝大部分晶体管毫无疑问都是功能性的,但一个有趣的现象是典型负载下CPU里面只有不到1%的部分处于活跃状态(几年前的数字,不确定现在有多大改变),这个原因大致上可以归结为两个,第一,确实有很多部分不会同时开启,比如cache,一般只有被访问的data bank会开起来,第二,散热压不住这么大的功耗密度,如果大部分区域都处于活跃状态,芯片很快就会烧掉。所以晶体管数目虽多,但是能够同时开起来的部分很少,这个现象被称为Dark Silicon。&br&&br&我猜测英文原文的表述是说,绝大部分晶体管不能开起来是因为散热问题,结果被误解成了绝大多数晶体管用于散热。
这个说法很明显是错误的,我怀疑这个说法是从错误的英文翻译里面得来的。 绝大部分晶体管毫无疑问都是功能性的,但一个有趣的现象是典型负载下CPU里面只有不到1%的部分处于活跃状态(几年前的数字,不确定现在有多大改变),这个原因大致上可以归结为两个,…
&p&这东西看Intel手册就能找到。&/p&&p&首先,CPU里有多个ALU,比如haswell架构的架构图:&/p&&p&&br&&/p&&img src=&/v2-ae68d595e9e6bd92ab4d8a91ce9afa09_b.png& data-rawwidth=&756& data-rawheight=&533& class=&origin_image zh-lightbox-thumb& width=&756& data-original=&/v2-ae68d595e9e6bd92ab4d8a91ce9afa09_r.png&&&p&自己可以数一下有多少个ALU在CPU里,而且,诸如LEA之类的,也是有计算功能的。&/p&&p&另外,ALU又不只是做加法,ALU是arithmetic logic unit的缩写,翻译过来是算术逻辑单元,难道只有加法才是算术?减法呢?乘法呢?移位呢?与或非呢?&/p&&p&图片来自: Intel(R) 64 and IA-32 Architectures Optimization Reference Manual&/p&&p&------------------------------------------------------------------------------&/p&&p&看了题主的更新,其实CPU没什么神秘的地方,CPU里几亿几十亿个晶体管,大部分都是Cache,真正ALU的部分非常少,即使是控制部分,复杂的也是图中scheduler的位置,ALU本身没什么神秘的。&/p&&p&haswell架构下,一个核上有四个ALU,极限情况下,一个时钟周期内可以执行4条ADD操作。8086比haswell弱,是因为8086没有scheduler,指令执行周期长。&/p&&p&其次,现代的晶体管速度已经非常快了,砷化镓晶体管的速度在十年前就接近THz了(&a href=&///?target=http%3A///magazine/207364.htm& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&速度接近THz的晶体管问世 - 现代材料动态 - 金月芽期刊网 免费论文下载&i class=&icon-external&&&/i&&/a&),其它材料的,最高据说有4THz的,可能实验室里还有速度更快的。&/p&&p&硅晶体管的速度慢一些,但也比CPU的主频要快的多了:&a href=&///?target=https%3A///cms/cn/product/rf-and-wireless-control/rf-transistor/low-noise-si-transistor-up-to-5-ghz/channel.html%3Fchannel%3Dff1dc590752& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&产品分类 - Infineon Technologies&i class=&icon-external&&&/i&&/a&&/p&&blockquote&1.确切的设计图纸或者架构图说一个内核有几个ALU,一个ALU有几个加法器.&/blockquote&&p&对,是这样的,现代CPU都是有多个ALU的,原理图自己找,网上很多。&/p&&blockquote&2.用实验数据证明一个加法器足以完成上亿次的计算。&/blockquote&&p&晶体管速度都能达到10GHz以上了,CPU主频在2-4GHz完全没问题,资料自己百度,能搜出一大堆东西。&/p&
这东西看Intel手册就能找到。首先,CPU里有多个ALU,比如haswell架构的架构图: 自己可以数一下有多少个ALU在CPU里,而且,诸如LEA之类的,也是有计算功能的。另外,ALU又不只是做加法,ALU是arithmetic logic unit的缩写,翻译过来是算术逻辑单元,难道只…
已有帐号?
无法登录?
社交帐号登录

我要回帖

更多关于 英特尔10nm突然成熟 的文章

 

随机推荐