下载本文示例代码
即使目前没有为纳米电子学、空气动力学、分子静力学、细胞生命周期建模等等编写高级应用程序,说不定以下这32条规则,对你向更高级处理器移植程序会有所帮助。 近期以来,似乎大家都在谈及64位计算,如采用AMD Athlon 64处理器的笔记本、采用IBM PowerPC 970芯片的Apple G5、又或Intel Itanium架构是否会被取消,对此,IT界和新闻界似乎都还没有尽兴。新一轮处理器所带来的冲击,不仅表现在改善数据库执行效率、提高图形程序速度上,也为编写解决世界上最复杂科学问题的应用程序,铺平了道路。 不管怎样,想利用64位处理器带来的好处,不只是仅仅拷贝一个程序到一台新计算机上那样简单,至少,应用程序需要用64位库重新编译,而最坏的情况就是需要重写整个程序,以便去除不可移植的指针算法等其他麻烦。即使这样,新的应用程序也不一定比在旧的32位平台上运行得更好。 幸运的是,要弄清楚在开始之前需要做哪些工作,还是比较容易的,特别是相关处理器的性能和局限,同样地,只要遵循一定的规则,就能以最少的改动换来期望的结果。为了让大家有个好的开始,特拟出了以下32条“军规”,其中包括了开发64位应用程序所必须了解的技术和信息。
首先,有小小不利因素 1、64位处理器不是最近几年才发明的,差不多在十年前,DEC和Sun公司就推出了用于高端服务器的64位处理器,Motorola公司也于不久后的1996年推出了它的PowerPC 620处理器,甚至在同年,任天堂公司也推出了它的Nintendo 64游戏系统。可直到近两年,随着AMD Athlon 64和IBM PowerPC 970处理器的面世,人们才开始关注到64位计算的到来。随着这些处理器应用于桌面系统,分析家们开始预测,32位计算即将灭亡(可能稍微有点过早)。 2、64位架构处理器就本身而言,不会在速度上两倍于32位的同等处理器。为什么呢,因为64位这个术语,只是简单地描述了处理器通用寄存器的大小,虽然这个大小决定了一次可处理的数据量,但并不代表数据处理的速度。 3、某些应用程序在64位处理器上运行,可能实际上会较在同等的32位处理器上慢,主要是因为64位地址在缓存中占用了更多的空间,反而降低了缓存命中率。在Tony Bourke的一份对Sun Ultra 5工作站的独立调查报告中指出,不大量执行数据运算的程序,在64位平台上可能会降低20%的缓存命中率。“数据类型的扩大,如指针,意味着要占用更多的内存,此时内存成了瓶颈”,SUSE Linux项目经理Andreas Jaeger也表示,“在64位平台上,因为内存开销的增加,所以程序进行指针跟踪可能会更慢”。 接下来有好消息 4、那为什么还需要64位处理器呢?其中的一个原因是,更宽的寄存器位可以一次处理更大的数字值。在32位系统上,2的32次方再加上1会引起溢出,因为在32位寄存器上,没有更多的位可以存储这个数值。而在许多编程语言中,由于提供了特殊的64位结构,所以开发32位程序的程序员一般都靠此来解决数值溢出这个问题,实际上,这些结构体需要处理器在两个32位寄存器上执行两次操作,这对那些需要经常执行复杂数学运算的程序来说,这个方法在执行效率上并没有优势。而64位处理器不再需要两个寄存器,这样,在科学计算领域中,程序员就可以编写出在更短的时间内解决更复杂问题的程序,一个最明显的例子就是VirginiaTech X超级计算机,由1100个Apple的双G5处理器构成,现在它是世界上排名第三的超级计算机。根据Apple公司的说法,G5处理器是被设计用来运行纳米电子学、化学、生物化学、空气动力学、分子静力学、细胞生命周期建模和计算声学等等高级应用程序的。 5、另一个64位计算的受益者是视频编辑(和渲染)。64位系统所带来的强大计算能力,对视频程序开发者来说,无疑是个好消息,以往那些需要解码大段视频的程序,如今可以更快更复杂。这对视频游戏业来说,更加如此,游戏开发者一直都在寻找新的方法来显现更加逼真的场景。 6、某些64位处理器有一些特殊的功能,这使得它们在速度上可以完全超越32位处理器。举例来说,AMD x84-64处理器有16个通用寄存器——比它的32位前辈多8个,PowerPC处理器有32个通用寄存器,而安腾(Itanium)有128个(虽然其中只有8个对程序员来说是可见的,另外120个由处理器按需分配)。就以上来说,应用程序可以在处理器内部保存更多的数据,以便随时取用,比起以往那种在需要数据时,再从内存里加载要好多了。 “Apple G5处理器内部包含两个64位浮点单元,在音频创建、3D渲染和科学计算等依赖于浮点运算的领域,可谓功不可没。”Apple开发者关系协会发言人Anuj Nayar如是说,“它同样也包含了两个64位整数单元,在计算大数值整数时,可极大地提高效率。” 7、在AMD Opteron和Athlon 64处理器上,如果要进行字节操作,此处有一个额外的优势,可以使用16个通用寄存器的低字节位,这意味着应用程序不再需要把数据在一些特殊的寄存器中挪来挪去。 8、另一个AMD x86-64处理器架构带来的好处就是,可以允许应用程序使用指令指针,来帮助计算函数和变量在共享库中的地址。如果没有这种RIP(相关指令指针),应用程序就必须使用一个额外的寄存器,这样在每个函数调用之前,都要花一些时间来设置这个寄存器。 9、如果为Apple G5 (PowerPC 970)处理器编译程序时,使用了G5内建的平方根函数,那么性能将有极大的提升。就如大多数针对处理器的优化一样,在编译程序时,也必须进行正确的设置,才可以让编译器尽可能地使用这些新功能。当然,如果程序中不使用平方根函数,或者使用得很少,那对程序在速度上的表现就没太多的帮助。另外,使用这些函数可能会增大可执行文件的大小。 10、64位系统允许应用程序一次直接寻址访问超过4GB的内存,而32位程序被限制在4GB以内,原因是32位寄存器最大只能保存数值2的32次方-1。一旦使用64位的寄存器,程序便可寻址到264,理论上可以访问18PB(18千兆兆字节)的内存,这差不多相当于32位的40亿倍(实际可寻址的内存数,取决于操作系统和相关的物理限制)。 11、可寻址访问18PB内存,意味着可把数据库、复杂的3D环境,甚至于整个操作系统都放在内存中,这样可比它们在硬盘中不知要快上多少倍。当然,目前世界上的计算机都没有18PB的内存,但一些基于安腾(Itanium)的服务器,内存就有512GB之多,就目前的发展趋势来看,在不远的将来,程序和计算机本身,都将推动对内存的需求量超过这个数字。 12、目前来说,应用程序也极有可能推动对磁盘空间需求的增长,而64位架构刚好可以寻址更大的磁盘空间,这就使管理更大的磁盘变得简单多了。一如应用程序可寻址访问多少内存一样,磁盘也存在着一些限制,比较说磁盘上能存入多少文件,每个文件的大小有多大等等。 13、再也不用担心Y2K38等问题了。源于Unix系统对时间的管理方式,很多使用time_t数据类型的32位应用程序,在2038年1月19日,都会碰到类似当年千年虫的问题,这是因为没有更多的位,可以用来继续计数自1970年1月1日以来的秒钟数(某些用于抵押和退休金管理的程序可能会更早地碰到此类问题,如果这些程序要进行许多未来事件的日期处理的话)。可幸的是,在64位系统上,公元292,000,000,000年到来之前,时钟都不会出错。在此须牢记的是,要使用64位库重新编译整个应用程序,以便避开这个小小的“故障”。
共2页。 1 2 :
即使目前没有为纳米电子学、空气动力学、分子静力学、细胞生命周期建模等等编写高级应用程序,说不定以下这32条规则,对你向更高级处理器移植程序会有所帮助。 近期以来,似乎大家都在谈及64位计算,如采用AMD Athlon 64处理器的笔记本、采用IBM PowerPC 970芯片的Apple G5、又或Intel Itanium架构是否会被取消,对此,IT界和新闻界似乎都还没有尽兴。新一轮处理器所带来的冲击,不仅表现在改善数据库执行效率、提高图形程序速度上,也为编写解决世界上最复杂科学问题的应用程序,铺平了道路。 不管怎样,想利用64位处理器带来的好处,不只是仅仅拷贝一个程序到一台新计算机上那样简单,至少,应用程序需要用64位库重新编译,而最坏的情况就是需要重写整个程序,以便去除不可移植的指针算法等其他麻烦。即使这样,新的应用程序也不一定比在旧的32位平台上运行得更好。 幸运的是,要弄清楚在开始之前需要做哪些工作,还是比较容易的,特别是相关处理器的性能和局限,同样地,只要遵循一定的规则,就能以最少的改动换来期望的结果。为了让大家有个好的开始,特拟出了以下32条“军规”,其中包括了开发64位应用程序所必须了解的技术和信息。
首先,有小小不利因素 1、64位处理器不是最近几年才发明的,差不多在十年前,DEC和Sun公司就推出了用于高端服务器的64位处理器,Motorola公司也于不久后的1996年推出了它的PowerPC 620处理器,甚至在同年,任天堂公司也推出了它的Nintendo 64游戏系统。可直到近两年,随着AMD Athlon 64和IBM PowerPC 970处理器的面世,人们才开始关注到64位计算的到来。随着这些处理器应用于桌面系统,分析家们开始预测,32位计算即将灭亡(可能稍微有点过早)。 2、64位架构处理器就本身而言,不会在速度上两倍于32位的同等处理器。为什么呢,因为64位这个术语,只是简单地描述了处理器通用寄存器的大小,虽然这个大小决定了一次可处理的数据量,但并不代表数据处理的速度。 3、某些应用程序在64位处理器上运行,可能实际上会较在同等的32位处理器上慢,主要是因为64位地址在缓存中占用了更多的空间,反而降低了缓存命中率。在Tony Bourke的一份对Sun Ultra 5工作站的独立调查报告中指出,不大量执行数据运算的程序,在64位平台上可能会降低20%的缓存命中率。“数据类型的扩大,如指针,意味着要占用更多的内存,此时内存成了瓶颈”,SUSE Linux项目经理Andreas Jaeger也表示,“在64位平台上,因为内存开销的增加,所以程序进行指针跟踪可能会更慢”。 接下来有好消息 4、那为什么还需要64位处理器呢?其中的一个原因是,更宽的寄存器位可以一次处理更大的数字值。在32位系统上,2的32次方再加上1会引起溢出,因为在32位寄存器上,没有更多的位可以存储这个数值。而在许多编程语言中,由于提供了特殊的64位结构,所以开发32位程序的程序员一般都靠此来解决数值溢出这个问题,实际上,这些结构体需要处理器在两个32位寄存器上执行两次操作,这对那些需要经常执行复杂数学运算的程序来说,这个方法在执行效率上并没有优势。而64位处理器不再需要两个寄存器,这样,在科学计算领域中,程序员就可以编写出在更短的时间内解决更复杂问题的程序,一个最明显的例子就是VirginiaTech X超级计算机,由1100个Apple的双G5处理器构成,现在它是世界上排名第三的超级计算机。根据Apple公司的说法,G5处理器是被设计用来运行纳米电子学、化学、生物化学、空气动力学、分子静力学、细胞生命周期建模和计算声学等等高级应用程序的。 5、另一个64位计算的受益者是视频编辑(和渲染)。64位系统所带来的强大计算能力,对视频程序开发者来说,无疑是个好消息,以往那些需要解码大段视频的程序,如今可以更快更复杂。这对视频游戏业来说,更加如此,游戏开发者一直都在寻找新的方法来显现更加逼真的场景。 6、某些64位处理器有一些特殊的功能,这使得它们在速度上可以完全超越32位处理器。举例来说,AMD x84-64处理器有16个通用寄存器——比它的32位前辈多8个,PowerPC处理器有32个通用寄存器,而安腾(Itanium)有128个(虽然其中只有8个对程序员来说是可见的,另外120个由处理器按需分配)。就以上来说,应用程序可以在处理器内部保存更多的数据,以便随时取用,比起以往那种在需要数据时,再从内存里加载要好多了。 “Apple G5处理器内部包含两个64位浮点单元,在音频创建、3D渲染和科学计算等依赖于浮点运算的领域,可谓功不可没。”Apple开发者关系协会发言人Anuj Nayar如是说,“它同样也包含了两个64位整数单元,在计算大数值整数时,可极大地提高效率。” 7、在AMD Opteron和Athlon 64处理器上,如果要进行字节操作,此处有一个额外的优势,可以使用16个通用寄存器的低字节位,这意味着应用程序不再需要把数据在一些特殊的寄存器中挪来挪去。 8、另一个AMD x86-64处理器架构带来的好处就是,可以允许应用程序使用指令指针,来帮助计算函数和变量在共享库中的地址。如果没有这种RIP(相关指令指针),应用程序就必须使用一个额外的寄存器,这样在每个函数调用之前,都要花一些时间来设置这个寄存器。 9、如果为Apple G5 (PowerPC 970)处理器编译程序时,使用了G5内建的平方根函数,那么性能将有极大的提升。就如大多数针对处理器的优化一样,在编译程序时,也必须进行正确的设置,才可以让编译器尽可能地使用这些新功能。当然,如果程序中不使用平方根函数,或者使用得很少,那对程序在速度上的表现就没太多的帮助。另外,使用这些函数可能会增大可执行文件的大小。 10、64位系统允许应用程序一次直接寻址访问超过4GB的内存,而32位程序被限制在4GB以内,原因是32位寄存器最大只能保存数值2的32次方-1。一旦使用64位的寄存器,程序便可寻址到264,理论上可以访问18PB(18千兆兆字节)的内存,这差不多相当于32位的40亿倍(实际可寻址的内存数,取决于操作系统和相关的物理限制)。 11、可寻址访问18PB内存,意味着可把数据库、复杂的3D环境,甚至于整个操作系统都放在内存中,这样可比它们在硬盘中不知要快上多少倍。当然,目前世界上的计算机都没有18PB的内存,但一些基于安腾(Itanium)的服务器,内存就有512GB之多,就目前的发展趋势来看,在不远的将来,程序和计算机本身,都将推动对内存的需求量超过这个数字。 12、目前来说,应用程序也极有可能推动对磁盘空间需求的增长,而64位架构刚好可以寻址更大的磁盘空间,这就使管理更大的磁盘变得简单多了。一如应用程序可寻址访问多少内存一样,磁盘也存在着一些限制,比较说磁盘上能存入多少文件,每个文件的大小有多大等等。 13、再也不用担心Y2K38等问题了。源于Unix系统对时间的管理方式,很多使用time_t数据类型的32位应用程序,在2038年1月19日,都会碰到类似当年千年虫的问题,这是因为没有更多的位,可以用来继续计数自1970年1月1日以来的秒钟数(某些用于抵押和退休金管理的程序可能会更早地碰到此类问题,如果这些程序要进行许多未来事件的日期处理的话)。可幸的是,在64位系统上,公元292,000,000,000年到来之前,时钟都不会出错。在此须牢记的是,要使用64位库重新编译整个应用程序,以便避开这个小小的“故障”。
共2页。 1 2 :
下载本文示例代码
更快、更强 64位编程的三十二条军规更快、更强 64位编程的三十二条军规更快、更强 64位编程的三十二条军规更快、更强 64位编程的三十二条军规更快、更强 64位编程的三十二条军规更快、更强 64位编程的三十二条军规更快、更强 64位编程的三十二条军规更快、更强 64位编程的三十二条军规更快、更强 64位编程的三十二条军规更快、更强 64位编程的三十二条军规更快、更强 64位编程的三十二条军规更快、更强 64位编程的三十二条军规更快、更强 64位编程的三十二条军规更快、更强 64位编程的三十二条军规更快、更强 64位编程的三十二条军规
阅读(118) | 评论(0) | 转发(0) |