科学网

 找回密码
  注册

tag 标签: 计算机核

相关帖子

版块 作者 回复/查看 最后发表

没有相关内容

相关日志

动态计算机的设计方法可以在一个芯片上设置n个核,速度超快
热度 2 accsys 2015-4-22 07:41
大众创业,万众创新。我太拥护国家的科技发展战略了。回想起我发明动态计算机cpu的十年,也许那时就有这样的政策,也不至于窝在家里孤芳自赏了。 事到如今,在一个芯片中能够依据程序的需要去动态组织完成不同类型任务核的产品我仍然没有看到。一个追求科技领先的国家,如此排斥原始的创新发明,实在叫人难以理解。我说点太狂的疯话吧:"难道中国就没有人能够批评一下我设计发明的动态计算机吗?"
个人分类: 计算机核|2151 次阅读|6 个评论
计算机核心设计中心必然转向中国
accsys 2010-6-23 11:19
姜咏江 自从冯.诺依曼计算机设计思想提出之后,计算机就以突飞猛进的速度发展着。从科研、军事到民用,计算机无所不在。然而就是这计算、计算的呐喊声音的背后,核心计算的理论和方法却存在着巨大的遗憾,拼凑式的计算设计方法替代着严格的数值计算理论和方法,其所带来的恶果或许至今那些西方的计算机设计专家还一无所知呢。 从数学的角度来看,数值计算最不能容忍的是二义性。可在西方传过来的机器数值计算方法中,恰恰存在着这种二义性。他们提出了所谓0的概念,例如,在8位二进制的加减法运算中出现10000000,他们就认为这是一个-0,实际上这个8位二进制数唯一表示的是-128。这种规定不仅数学家不能容忍,更糟糕的是会在精确计算中产生莫名其妙的错误,这种错误会造成复杂系统莫名其妙的瘫痪,也许会让发射的火箭在毫无错误编程的情况下发生爆炸。 按着这种糟糕的认识,那么应该有: 10000000 = 1000000000000000 = 10000000000000000000000000000000 = 它们都是-0,理所当然上面的等式是成立的。可见这种错误是多么的严重!实际,上面3个二进制数的值应是-128,-32768,-2147483648,如何能认为它们是相等的? 这种设计的拼凑方法影响了计算机精确计算的发展,体现在IEEE 754所谓的浮点数标准上更是问题多多。看其规定: 如果 指数 是0 并且 小数部分 是0,这个数是0(和符号位相关); 如果 指数 = 2 e 1 并且 小数部分是0,这个数是 无穷大(同样和符号位相关); 如果 指数 = 2 e 1 并且 小数部分非0,这个数表示为不是一个数(NaN)。 其中e是二进制数的位数。 对于IEEE规定的8位阶码的32位浮点数01111111100000000000000000000001就不是一个数了。岂不荒唐!诚然,按照 IEEE 754 单精度浮点数可以在 -0.83886072 127 ~+0.8388607 2 127 范围内运算,但这种规定会造成数值域的不完备,使其无法进行等值扩充,即使引入双精度浮点数的规范,仍然存在着这个问题。 中国当代不乏有世界著名的数学家,计算机界不乏有精明的头脑,在计算机精确计算领域,只要我们不盲从西方的所有理论和技术,深入研究,借助当代计算机面临重大改革时机,敢于挑战,世界计算机核心设计的中心一定会快速地转移到中国来。 我说的是计算机核心设计中心,而不是计算机制造中心。 2010-6-23
个人分类: 计算机核|3786 次阅读|1 个评论
学术争鸣
热度 1 accsys 2010-1-20 10:20
我国学术界的官本位制三年五载是难以打破的,但无论如何,我们都不会放弃学术研究,因为学术的魅力决非是管理形式所能够完全制约的。学术的魅力在于探索和进取,在于科学奥妙的吸引力。学术是人类的崇高欲望,是值得发扬光大的欲望! 如今,我们太迷恋为五斗米竞折腰的学术方式了。虽然好的环境会促进学术的发展,但恶劣的环境也不至于让学术停滞不前。陈景润如痴如醉,在生活艰苦的条件下研究歌德巴赫猜想,支持他的就是科学精神和学术的魅力。 其实真正的学术发展有其独到的途经,这种途经的明显特征就是独处和争鸣。在互联网已经如此发达的今天,我相信任何阻碍学术争鸣的方式都一定是徒劳的。在我们呼喊自由学术打倒学伐的同时,为何不在科学网上学术争鸣? 学术界存在一些大问题,而且是世界级大问题。没人规定这些问题都要洋专家来解决。历史揭示,有组织地进行攻关并不见得会有成效,相反,个人的努力不但会攻破一个个难关,而且能够创造出开天辟地的成果。 科学网的朋友,让我们以独创的精神工作,在科学网上一起争鸣,相信一定会有那些世界级的科学问题会被我们解决。 我是搞计算机的,因而希望利用科学网的便利条件搞点计算机学术争鸣。当前计算机发展遇到的第一大难题,就是存储墙问题。 不知是否有人愿意参与争鸣?希望有快速的博客发表。 斗胆先设一个简单的题目:计算机为什么会产生存储墙,如何解决? 2010-1-20
个人分类: 计算机核|3937 次阅读|5 个评论
未来计算的研究
accsys 2010-1-9 10:44
姜咏江 昨日去参加YOCSOEF的未来计算报告会,讲者万里兮和刘东的演讲都很精彩。万老师的系统封装内容非常专业,对我这个外行人来说受益匪浅。刘东博士讲他所领导的Intel公司实验室,用CPU+FPGA+RL模式进行计算的研究。 未来计算一定是软硬件一体化方式,这大概已是人们共识的事情。随着计算机应用的广泛深入,对计算机的可计算品质要求越来越高,特别是对计算速度的需求,绝非是软件方式单独优化所能够办得到的。由于器件物理特性的限制,单一靠计算器件来实现更高速度的计算,同样也是不可能的。因而设计更多的同构或者异构的多元实体,依靠大兵团作战,已经成为了未来计算的必然趋势。大兵团作战关键在于调度。 我很欣赏刘东的第一定律,意思是能作的越多,不能作的也越多。由这个定律会推论出计算的发展,一定会走向同构/异构的多元化格局。刘东第二定律说的是可重构计算应用会越来越多。出于探讨,我给他加上了不能完全替代固定计算。 我之所以要这样说是因为可重构计算和固定多体计算是追求目标完全不同的两个东西。可重构计算追求的是功能上的替代方式,目标是变形金刚式的多功能实现手段,而尽可能地少硬件资源的使用。固定多体计算追求在硬件资源充分的情况下,如何更好地利用硬件资源,发挥大兵团作战的优势,加快任务的完成。因而我给他补充了一句话,只是个人见解。 虽然可重构计算和固定多体计算是两个方面的问题,但它们都是未来计算不可缺少的内容。这两种结构方式主要反映的是未来计算硬件方面的需求。在计算中,对于可重构计算来说,要解决计算过程中是全局重构还是局部重构的问题,同时还要探讨重构机制给系统运行带来的影响,特别是速度、可靠性和安全性的影响。依靠可编程器件实现的可重构计算主要是求变,这对硬件资源有限的时候,会成为计算的有效改善手段,但在功能提升的同时,会牺牲一定的速度。 在硬件资源充分的情况下,固定的硬件结构设计,可以实现多元的同构/异构计算单元,如果能够合理地分配任务,调动全部计算单元工作,那么就能有效地提高整体计算的速度与效率。 肯据莫尔定律,未来硬件资源是会更充足的,因而固定多体计算应该成为一定时期未来计算的主要研究形式。 目前,计算机固定多体计算的焦点是如何充分调度所有的资源,进而加快计算速度。实行的基本方式有两种。一是用已经实现多年的软件调度方式,即用操作系统或协议方式调度管理。二是充分利用逻辑电路的优势,实现高层次统一的硬逻辑调度管理。前者不需要在硬件层次上提出更高的要求,因而首先出现了同构多核。这种同构多核,只是将多个结构相同的计算机核有效地连接起来,任务就基本完成了,而将核的调度管理任务交给了软件。这种做法的典型就是片上网络结构。 片上网络的优势是能够快速利用原有的软件技术实现商业化。实际上,各种高效的宣传,只是一种泡沫。据网上消息,美国某实验室经过测试得出结论:8核以上的计算机处理器,实际效率不但不升,反而下降。不论这个消息是否可靠,从理论上进行分析,所谓的片上多核,前途堪忧。原因是片上结构具有非片上结构不具备的特性,最重要的是空间的紧致性和时间的一致性。这种特征会为数据同步传输带来方便。另外,片上结构容易实现动态结构转换,从而使器件的逻辑构成能浑然一体变化,这更有利于加快数据的整体传输。这种结构浑然一体变化,并不是可重构计算的变化,而是固定硬件结构的线路通断变化而已。这种线路变化完全可以用高层次的逻辑来进行控制。 高层次的逻辑控制又可以发自执行中的程序需求,从而通过软件来直接对硬件进行逻辑重组,达到软硬件一体化的未来计算效果。这种结构中程序数据可以实现整体转换,这是软件管理方式中线路数据传输方式所无法比拟的。因而单纯地将网络结构移植到片上是不科学的做法。事实将会证明现代操作系统处理机管理和内存管理功能,必将淡然退出片上多处理器架构的管理层。 从刘东第一定律可以推出计算机处理器异构多元是必然的,因而未来运行在多处理器计算机上的程序,由于完成不同局部任务的需要,会频繁地在不同类型的处理器间转换,于是程序数据的线路传输方式转移将会带来巨大的时间消耗。而采用动态的线路切换方式来实现程序转移,无疑会收到类似飞机从螺旋桨到喷气式改变的效果。 由此看来,未来计算的方式必然要以动态计算机核心为主要固定结构框架。要实现动态计算机核心结构框架,必须将内存进行拆分,必须采用分散式存储结构。这种分散式存储结构也就瓦解了当前困扰人们的存储墙问题。分散存储结构并不需要过多的带宽。从理论上分析,访存带宽的强大需求主要是由于存储器容量过大造成的,这种现象在任何材质的存储器访问上都会产生,原因是访存时间会与存储容量成正比。 利用万里兮博士的系统级封装技术,完全可以做到高性能计算机的微型化。作为动态多处理器计算机,完全可以用内部动态关系总线通过高层次的逻辑控制,实现各种资源的有效、高效的分配管理和运用,有效缓解各种传输瓶颈(见图1)。 我的结论是未来计算一定是软硬件一体化的计算,在片上多处理器结构之下,动态计算机核心一定会成为高性能适用计算机的主流产品。 给各位同行一个动态计算机结构的图,除去三角形表示的外设,可以考虑全部结构封装。这种结构几乎可以用在任何的计算机类型中。对于图,配有一定的解释,希望能与同行们一起讨论。 2010-1-9 【附】 如图1所示, PU是单端连接的一类程序执行单位,它只连接MU(包括程序执行环境);Chl是一类双端连接的执行单位,Chl的一端要连接MU,另一端和外设DV连接。每个不同类器件之间,都用总线连接,其中包括控制总线。这些总线都有可控开关控制通断。如果原来的两条或两条以上的总线相连,那么就组成了一条总线(见图2),也就是说不论何种情况,各设备都只能在成为一条的总线上传输数据,而不能同时占用相互冲突的多条总线工作。这种总线结构,我们称之为动态关系总线。 动态计算机中这种动态关系总线,形似交叉开关,但实际上是计算机的核重组,因为与数据传输中的交叉开关线路结构有本质的不同。不论是单端连接的程序执行单位还是双端连接的程序执行单位,都有自己的指令系统,它们都必需与MU连接才能够执行程序。这种处理器与MU连接之后才会形成能够执行程序的核,我们称之为执行核。动态计算机中,同时可以形成许多执行核,执行核还会随着程序执行的需要,在不断地进行着核重组。 MU与单端处理器连接时,其他与MU连接的总线都会处于断开状态。当MU与双端连接处理器Chl的总线连接时,双端连接处理器Chl必须能够找到合适的外设,并与之连接,形成统一的总线结构(见图2),不然就要断开与MU连接的所有总线。这样做的好处是设备不会在连接的状态下不工作,从而保证不出现死锁。
个人分类: 计算机核|3459 次阅读|1 个评论
CPU设计我要让更多的人掌握它
accsys 2010-1-2 08:00
姜咏江 这个小小的芯片从国外购买的价格最高可以到几万元,占到整个服务器成本的70%以上。我们国家信息产业就是因为这项核心技术的缺失,基本没钱可赚,利润率只有2%到3%,还不如传统产业。国外大公司每年从中国赚走100多亿美元,比我国购买飞机、石油、汽车花的钱还要多。这是中国龙芯芯片设计专家胡武伟某年月日说道一段话,是从网上搜到的。 发展我国自己的计算机芯片产业,要同时作两件事,一是发展超大规模集成电路制造技术,二是发展计算机核心芯片设计技术。前者个人无法办到,需要国家从战略的角度出钱购买技术设备,尽快创建我国自己的高端集成电路产业基地。后者如今可以通过个人的努力完全办到。 我国将计算机产业叫高科技产业,该产业这样叫,足显出我们过去对计算机制造业的无知和无能。过去,因为技术和设备的原因,我们一直没有能力去设计和制造计算机的核心部件。现在,芯片设计的基础技术发生了变化,有了可编程阵列器件FPGA/CPLD,个人设计计算机CPU芯片的时代已经到来了! 为了能够让更多的人进入计算机芯片设计行列,让更多的人掌握CPU的设计方法,我要借助于科学网,通过我的博客,将我的设计经验告诉那些有志于此项技术的初学者,将他们领进计算机核心设计的大门。 现在就开始! 1. CPU设计使用的软件和硬件 通过计算机进行CPU设计工作需要EDA软件,目前这种软件有几家公司的产品,这里就介绍自己常用的Altera公司的Quartus II吧。 Quartus II软件很人性化,电子电路产品的设计可以使用原理图方式,也可以使用硬件编程语言编程方式,还可以这两种设计方式混合使用。Quartus II构造的是一个电子电路设计的集成环境,可以很方便地进行电路设计的编辑、编译、仿真验证检查、下载到FPGA芯片上实际运行测试等。Altera公司还提供配套的电子电路设计开发板。其实,用买来的FPGA芯片,自己就可以制作开发板,或者干脆自己制作计算机。Altera公司的推荐的开发板DE2-70约售价5000元,DE1开发板要1000元左右。我主张自己做开发板,成本也就要几百元,还可以根据自己需要取材,当然这需要有一些电子电路制作方面的技术。 2. 软件人员搞CPU设计 我的经验是计算机软件人员可以从事CPU设计,甚至他们做起来要比学习电子电路的人员搞CPU设计更容易。因此我呼吁那些有抱负的软件科技人员,如果有能力,一定要进入CPU设计领域,因为软硬件一体化的计算机技术已经成为了计算机设计的主流。我先给你一个用Verilog HDL语言设计的例子。Verilog HDL语言借鉴了c语言,因而很适合软件工程师使用。找一本Verilog HDL语言的书看看,下面描述的能够运行程序的计算机核就可以弄懂了,或者看一下我写的《计算机原理综合课程设计》一书,也许会理解的更快。 2.1 最简单的计算机核设计 这里给出用Verilog HDL语言设计的一个能够运行简单程序的计算机核,是我在研究生班教学中作为设计实例完成的。这个设计已经在Quartus II软件的环境下测试通过,并且下载到自制的开发实验板上运行过。其中存储器是哈佛结构,直接使用了Quartus II给的存储器元件组织的。 【程序】 //基本输入时钟clock //复位控制:reset_n,低电位有效 //基本输出:o //程序存储器iram,16位,高5位是类指令代码,用imem16.mif初始化 //数据存储器dram,16位,不用数据文件初始化 //用lpm存储器的地址信号要稳定1拍,才可以读写数据 //指令格式:高5位指令代码,11位地址码,16位立即数(分高低8位) module test ( clock, reset_n, o, //调试输出(可以不要): opc, omar, ojp, oqw, olda, oadd, oout ); input clock; input reset_n; output o; output oqw; output opc,omar; output ojp; output olda,oadd,oout; wire dwren; wire q_w; wire q_data; reg b,a,ir,da,oo,ddata; reg pc,mar; reg jp; //节拍 reg dwrit; //写控制 //指令: reg lda, //取数:从数据单元取数到da add, //加:da与数据单元相加,结果放入da out, //输出:将数据单元内容输出到输出寄存器 sdal, //低8位立即数:将8位立即数扩充为16位送da sdah,//高8位立即数:将8位立即数作为高8位,与原da低8位连接成16位放在da中 str; //da送数据存储单元: //仿真信号输出: assign o = oo; assign opc = pc; assign omar = mar; assign ojp = jp; assign oqw = q_w; assign olda=lda; assign oadd=add; assign oout=out; assign dwren = dwrit; //指令存储器: lpm_rom iram(.address(pc),.inclock(clock),.q(q_w)); //程序存储器 defparam iram.lpm_width = 16; defparam iram.lpm_widthad = 11; defparam iram.lpm_outdata = UNREGISTERED; defparam iram.lpm_indata = REGISTERED; defparam iram.lpm_address_control = REGISTERED; defparam iram.lpm_file = imem16.mif; //初始化文件,放置程序 //数据存储器: lpm_ram_dq dram(.data(ddata),.address(mar),.we(dwren),.inclock(clock),.q(q_data)); defparam dram.lpm_width = 16; defparam dram.lpm_widthad = 11; defparam dram.lpm_outdata = UNREGISTERED; defparam dram.lpm_indata = REGISTERED; defparam dram.lpm_address_control = REGISTERED; always @(posedge clock or negedge reset_n) begin if (!reset_n) begin pc = 0; lda = 0; add = 0; out = 0; sdal = 0; sdah = 0; str = 0; jp=0; end else begin jp=jp+1; case (jp) 0: begin end 1: begin case (q_w ) 5'b00001: lda = 1; //lda:00001 5'b00010: add = 1; //add:00010 5'b00011: out = 1; //out:00011 5'b00100: sdal = 1; //低8位,扩充有符号16位 5'b00101: sdah = 1; //高8位,与前面低8位输入合成16位 5'b00110: str = 1; //da送数据单元 endcase end 2: begin if (lda || add || out || str) mar=q_w ; end 3: pc=pc+1; 4: begin if (lda) begin da=q_data; jp = 0; lda= 0; end else if (add) begin b=q_data; a=da; end else if (out) begin oo = q_data; jp = 0; out= 0; end else if (sdal) begin da = {{8{q_w }},q_w }; //扩充成16位有符号数 sdal= 0; end else if (sdah) begin da = {q_w ,da }; sdah = 0; end else if (str) begin ddata = da; dwrit = 1; end end 5: begin if (add) begin da=a+b; jp = 0; add= 0; end else if (str) begin str = 0; dwrit = 0; end end endcase end end endmodule ///////////// 仿真或执行程序实例 /////////// // 汇编 编译 // // sdal 5 2005 // // sdah 62806 // // str 10 300a // // sdal 3 2003 // // add 10 100a // // str 15 300f // // out 15 180f // //将编译的16进制数写入imem16.mif // /////// 16进制结果输出:0608 ///////////// 【练习】用本机语言自己编一个程序,自己编译,然后用Quartus II检验一下。 --- 待续 ---
个人分类: 计算机核|14053 次阅读|6 个评论

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-6-18 20:06

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部