1、西 南 交 通 大 学 毕业设计(英文翻译)节能型机房温湿度远程控制系统测控节点设计年 级: 学 号: 姓 名: 专 业: 指导老师: 二零一一年六月MosixMosix修改bsdi上的BSD/ OS来提供电脑上的跨网络的动态负载平衡组和先发制人进程迁移。这是不错的东西,不只是为并行处理,但对于通常使用一个集群很像一个可扩展的SMP。是否有Linux版本?详细信息,请看http:/www.cs.huji.ac.il/mosix/。NOW (工作站网络)伯克利工作站网络项目,http:/now.cs.berkeley.edu/,已经极大地推广了并行计算中使用工作站网络,这里还有很多工作在进行中,
2、都致力于“在未来几年内展示一个实际的100处理器系统”。唉,他们不使用linux。并行处理使用linux并行处理使用Linux WWW站点,http:/aggregate.org/LDP/,是这些指南和许多相关文件包括为全日制量身订造的在线幻灯片的家园。除了在报纸项目上,普渡大学电机与计算机工程系已经是并行处理的领先者,这个网站的设立是为了帮助别人申请并行处理的Linux电脑。 自从普渡大学的第一组Linux个人电脑在1994年2月组装以来,已经诞生了许多的Linux PC集群,有些还包括视频墙。然而这些集群使用386,486和奔腾系统(没有奔腾Pro系统),英特尔最近获得普渡大学的捐赠,将允
3、许它的奔腾II系统构建多个大型集群(与单个群集计划多达165机)。并且这些集群都将有论文网,也具有最传统的网络。奔腾Pro集群研讨会1997年,4月10-11日,埃姆斯实验室在得梅因,爱荷华州举行了奔腾Pro集群研讨会。WWW在本次研讨会,http:/www.scl.ameslab.gov/workshops/PPCworkshop.html,从云集的参加者中收集了很多丰富的PC集群信息。TreadMarks帝斯曼(分布式共享内存)帝斯曼(分布式共享内存)是一种技术,即一个消息传递系统可以出现的行为作为一个SMP。有不少这样的系统,其中大部分使用OS页故障触发消息传输机制。TreadMarks
4、,http:/www.cs.rice.edu/willy/TreadMarks/overview.html,是这种系统更有效地之一,并在Linux集群上运行。坏消息是“TreadMarks”正在由一个小成本的大学和非盈利机构的分配。欲了解更多有关该软件,请联系treadmarksece.rice.edu信息。U型网 (用户级网络接口架构)U型网(用户级网络接口架构)在康奈尔大学,http:/www2.cs.cornell.edu/U-Net/Default.html,项目试图提供低延迟,高带宽的网络硬件使用商品由虚拟的网络接口,以便应用程序可以发送和接收邮件没有作业系统的干预。在Linux上运
5、行的U型网,使用DECchip DC21140的快速以太网卡或前置系统的主成分- 200(不常设仲裁法院-200E)ATM卡。WWT (威斯康星风洞)的确有相当多集群相关的工作在威斯康星州。该WWT的(威斯康星风洞)项目,http:/www.cs.wisc.edu/wwt/,正在致力于对发展的“标准”之间的并行编译器和底层硬件接口各项工作。还有就是威斯康星牛(集群工作站),合作共享内存和暴风雨的Paradyn并行性能工具等,不幸的是关于Linux的不是很多。4. 在A寄存器的SIMD (例如,使用MMX公司)在A寄存器的SIMD(单指令流多数据流)(SWAR)并不是一个新想法。给定一个有k位寄
6、存器,数据路径和功能单元机,人们早已知道,普通的寄存器操作可以像SIMD一样并行操作n,n/k位,整数字段值。然而,这只是由于对多媒体最近有SIMD推动的2倍到8倍加速技术已成为主流计算的关注。大多数微处理器1997的版本包括硬件SWAR支持:AMD的K6型MMX公司(多媒体扩展)Cyrix的货币供应M2 MMX公司(多媒体扩展)数字Alpha马克斯(多媒体扩展)惠普的PA - RISC的最大(多媒体加速扩展)英特尔奔腾II和奔腾MMX公司与(多媒体扩展)Microunity Mediaprocessor SIGD(单一数据组指令上)MIPS的数字媒体扩展(MDMX,发音疯狂的麦克斯)的Sun
7、 SPARC V9的VIS(视觉指令集)还有一些新的微处理器提供了一个由硬件支持的几洞,怪癖像场大小只支持一些操作一些。 重要的是要记住,但是,你不需要任何SWAR经营的硬件有效的支持。 例如,位操作是不会被寄存器逻辑分区影响的。4.1 SWAR:有什么优势?虽然每个现代处理器至少具有一些并行执行能力的SWAR,不幸的是,即使是最好的SWAR增强指令集不支持非常通用并行。事实上,许多人已经意识到,奔腾与“带MMX技术的奔腾”之间性能上的差异通常都是由巨大的L1缓存存在MMX造成的。因此,实际上,什么是SWAR(或MMX)的优势呢?仅整数,越小越好。 两个32位值可安装在64位MMX寄存器,但这
8、样做的八单字节字符,更或者是一个完整的国际象棋板上的一位。注:将会有一个浮点版本的MMX,虽然在此篇文章中很少提及。Cyrix已经发布了一些幻灯片,ftp:/其中包括一些MMFP的评论。显然,MMFP将支持两个32位浮点数字装入到一个64位的MMX寄存器,结合这两个MMFP管道将产生四个单精度每时钟触发器。SIMD或向量式并行。相同的操作同事应用到各个领域。有许多办法来废止选定域的作用(即相当于掩蔽的SIMD),但它会带来更为复杂的编码和性能的损害。本地化,有规律的(完美的包装),内存参考模式。SWAR在一般情况下,特别是MMX,在随机存取方面很可怕;聚集一个相当昂贵的xy向量(其中y是一个索
9、引阵列)。这些都是严重的限制,但这种类型的并行算法,发生在许多并行而不只是多媒体应用。对于算法的正确类型,SWAR比SMP或并行群集更效率得多,而且它不需要任何费用。4.2 SWAR编程导论SWAR的基本概念,在A寄存器里的SIMD,是指在字长寄存器的操作能被用于加速由SIMD在n,k/n位表上的操作运算。然而,使用SWAR技术可能会难以处理,并且一些SWAR操作确实比串行序列比昂贵的多,因为他们需要额外的指令以执行实地划分。为了说明这一点,让我们考虑一个大大简化的SWAR模型,管理每一个32位寄存器里的4个8位字段。两个寄存器中的值可以表示为: PE3 PE2 PE1 PE0 +-+-+-+
10、-+Reg0 | D 7:0 | C 7:0 | B 7:0 | A 7:0 | +-+-+-+-+Reg1 | H 7:0 | G 7:0 | F 7:0 | E 7:0 | +-+-+-+-+这个模型表明每一个寄存器都被有必要地视为一个包含4个独立的8位整型的向量。另外,把A和E作为Reg0和Reg1来处理元素0(PE0),把B和F视为PE1的寄存器,等等。本文档的其余部分简要回顾这些整数向量的SIMD并行操作的基本类型如何将这些功能都可以实现。多态操作有些SWAR操作可以很一般地使用普通的32位整型操作,而不必担心这个操作是真的打算在这些8位的字段上并行操作。我们呼吁任何SWAR操作多态
11、性,因为该功能并未受到字段类型(大小)的影响。测试如果任何字段是非零是多态的,因为都是按位逻辑运算。例如,一个普通的位与操作(C的&操作符)执行按位与,无论这个字段的大小。一个简单的寄存器位与实例如下: PE3 PE2 PE1 PE0 +-+-+-+-+Reg2 | D&H 7:0 | C&G 7:0 | B&F 7:0 | A&E 7:0 | +-+-+-+-+由于位与操作总有K值的结果位值来影响操作,所有字段的大小都支持使用相同的单指令。分区操作不幸的是,很多重要的SWAR操作都不具有多态性。算术运算,如加,减,乘,除等都实行在字段间进/借位。我们称这样的SWAR操作为分区,因为每一个这样
12、的操作必须有效地分开操作数和结果之间的相互作用,以防止字段间相互影响。然而,实际上有三种不同的方法来获得这样的效果。分区说明也许最明显的方法来实现分区操作是字段间提供硬件支持的“分区并行指令”来进行字段见的进/借位。这种方法可以产生最高的性能,但它需要改变处理器的指令体系,但一般存在许多限制(例如,8位字段可能得到支持,但12位的并不能)。AMD/Cyrix/Intel MMX, Digital MAX, HP MAX和 Sun VIS都实现分区指令限制版本。不幸的是,这些不同的指令集扩展有不同的限制,使得他们之间的算法有些不简便。例如,分析下面的采样分区操作: 指令 AMD/Cyrix/In
13、tel MMX DEC MAX HP MAX Sun VIS+-+-+-+-+-+| 绝对差别 | | 8 | | 8 |+-+-+-+-+-+| 相融最大值 | | 8, 16 | | |+-+-+-+-+-+| 比较 | 8, 16, 32 | | | 16, 32 |+-+-+-+-+-+| 相乘 | 16 | | | 8x16 |+-+-+-+-+-+| 相加 | 8, 16, 32 | | 16 | 16, 32 |+-+-+-+-+-+在这个表中,这些数字表明了字段的大小,以位为单位,因此每个操作都是支持的。即便此表省略了绝大多部分的外来指令,还是可以清楚地看到有许多差异。直接结果
14、是高级语言(HLLS)并没有编程模型那样有效,并且可移植性普遍较差。未划分的操作与校正码用分区指令来实现分区操作一定是有效的,但如果你所需要的分区操作并不被硬件所支持时该如何解决?方法是你可以使用一连串普通指令来实现字段见的进/借位操作,来改正那些不受欢迎的限制。这是一个纯软件的方法,并且做了上层介绍,但它能在通用字段分区环境下工作。这种做法也是完全通用的,因为它不仅可以被用来填补空白,说明硬件支持的分区,也可以用来提供完整的功能在所有的目标机器没有硬件支持。事实上,如C一样的表达语言,这种方法使得SWAR方案得到充分的可移植性。问题立即出现了:很明显,使用带纠错码的未分区操作来模拟SWAR分
15、区操作是多么的无效?因此,这是一个类似于$64K的问题但许多操作并不像人们想象中的那么难。考虑推行使用四个原色的8位整型向量通过使用普通32位操作来实现两个源向量的相加操作。一个普通的32位加法实际上可能产生正确的结果,但8位字段进位操作排除在外。因此,我们的目标仅仅是确保这一的进位不会发生。因为两个k位字段的数相加最少会产生k+1位的结果,我们能通过简单地掩盖每个字段最有效的位来确保没有进位发生。下面是一个通过与0x7f7f7f7f的与操作来实现普通32位的加操作。t = (x & 0x7f7f7f7f) + (y & 0x7f7f7f7f);很显然结果是正确的,除了每个字段里的最有效位。计
16、算每个字段的正确值仅仅是一个分区的问题做两个1位增加了7位最重要的位从x和y进行计算的结果。幸运的是,1位分区加操作是有一个普通的异或操作来实现的。因此,结果很简单:(t (x y) & 0x80808080)好吧,也许事实远非如此简单。毕竟,这是通过6次操作仅仅来实现4次相加。然而,请注意操作数并不是由一个功能有多少字段来表示的因此,在更多的领域,我们需要进步。事实上,我们可能会加速反正只是因为字段被装和操作存储在一个单一(整数向量),寄存器的供应情况可能会有所改善,并且会有更少的动态代码调度依赖(因为部分字词引用以被避免)。控制字段值而另外两个分区的操作方法来执行两个寄存器中心得到利用的最
17、大空间,可以更有效地计算,而不是控制字段值,使不同字段间的进/借位永远不会发生。例如,例如,如果我们知道所有的字段值被添加的字段溢出,这样会不会发生,分区添加操作可实现使用一个普通的ADD指令,事实上,由于这个限制,一个普通的ADD指令出现多态性,是代码可用的大小没有收到有效的校正。因此,问题变成了如何确保字段值不会引起进/借位事件。确保这一点的一个方法是实施分区指令来限制字段值的范围。Digital MAX的最低和最高指令可以被视为由硬件支持的避免内部字段的进/借位。然而,假设我们没有分区才做指令来有效地限制字段值的范围是否有充分的条件,能以廉价地确保进/借位事件不会干扰相邻字段?答案在于性
18、能分析算法。两个k位数相加最多会生成k+1位的结果;因此,一个k+1位字段可以安全地使用这样的操作尽管使用普通指令来操作。因此,假设前面例子中的8位字段现在改成7位并带有1位“进/借位”操作的字段: PE3 PE2 PE1 PE0 +-+-+-+-+-+-+-+-+Reg0 | D | D 6:0 | C | C 6:0 | B | B 6:0 | A | A 6:0 | +-+-+-+-+-+-+-+-+7位向量之间的加操作的实现如下:让我们假设一下,行动开始之前的任何分区,所有的执行间隔位(A的,B的,C的,和D的)的值为0.只需执行一个普通的加操作,所有字段即可获得正确的7位值;尽管,一
19、些间隔位可能会是1。我们可以通过一个更传统的操作来改正它,如掩盖间隔位。这样7位的整型向量x与y相加,是这样的:(x + y) & 0x7f7f7f7f)这只用了两个操作就实现了四次相加,很明显效果良好。锐利的读者可能已经注意到,设置间隔位为0不适合减操作。然而,这次修改却非常简单。为了计算x-y,我们只需确保所有x里的间隔位为1,而在y里的所有间隔位为0。最坏的情况下,我们可以得到:(x | 0x80808080) - y) & 0x7f7f7f7f)然而,更多的按位或操作往往可以得到优化,确保最后一步操作生成的值是用X|0x80808080而来的,而不是用&0x7f7f7f7f而来的。哪种
20、方法更适合用于SWAR分区操作?答案很简单“能产生最好的加速比”。有趣的是,理想的方法,不同的是可在相同的机器上运行相同程序见的不同字段。通信与类型转换操作虽然一些并行计算,包括许多在图像像素上的操作,所具备的性能是,一个向量里的第i个值是一个出现在第i个位置的仅值功能,通常却不是这样的。例如,例如,即使像素的FFT变换一样的操作,如需要相邻像素值从操作数,并作为平滑需要更复杂的(较少本地化)的通讯模式。有效地实现一维邻近沟通来让SWAR使用未分区的移位操作并不难。例如,移动一个值从PE(i)到PE(i+1),就是一个简单的例子。如果字段是8位长的话,我们将使用:(x 8) & 0x00fff
21、fff)加入“缠绕连接”也是合理有效地使用未分区的变化。例如,环绕式地移动一个值从PE(i)到PE(i+1):(x 24) & 0x000000ff)真正的问题是当更一般的沟通模式必须得到执行。只有HP MAX指令集支持任意的表,就是所谓的Permute。它确实是一个名不副实的表,不仅可以执行任意置换的字段,更可以允许重复。总是它实现了一个任意xy操作。不幸的是,xy在没有如此的指令下很难实现。一般的代码序列都很长而且效率低下;实际上它是连续的代码。这样非常另人失望。在MasPar MP1/MP2 和具有思维的CM1/CM2/CM200 SIMD上执行相对高速的xy操作是这些机器运行良好的关键
22、因素。然而,xy以后都慢于邻近的沟通计算机,即便是这些超级计算机,所以许多算法的目的是为了尽量减少xy操作的需要。总之,没有硬件的支持,最好的做法就是发展SWAR算法,即便xy并不合法,更或者说至少不便宜。复发操作(约化,扫描等)复发是一种在被计算的质之间存在明显的连续关系的计算。然而,如果这些复发包含关系操作,它很有可能会重新编码计算使用树结构的并行算法。并行发生的最常见的类型是可能的减少关联的类称。例如,要计算一个向量的值的综合,一个纯粹的连续C写法如下:t = 0;for (i=0; i 8) & 0x00ff00ff);第二步是将这些两个16位字段的9位值进行运算而产生一个10位的结果
23、:(t + (t 16) & 0x000003ff)其实,第二步执行两个16位字段的相加但前16位加法是没有意义的,这就是为什么结果是一个伪10位的结果。扫描,也被称为“并行前缀”行动,一般情况下比较难以有效地实现。这是因为,不像减少,扫描会产生分区结果。居于这个原因,扫描可以实现于使用一个相当明显的并行操作序列。4.3 Linux下的MMX SWAR对于Linux,IA32处理器是我们首要关注的。好消息是,AMD公司,Cyrix和英特尔都实现了同样的MMX指令。不过,MMX公司的表现各不相同,例如,在K6型只有一个MMX的管道-的MMX奔腾有两个。 唯一真正的坏消息是,英特尔仍然在运行那些愚
24、蠢的MMX的广告.实际上有三种方法可以使用MMX for SWAR:1.从MMX公司使用程序库。 特别是,英特尔已经开发了几个“性能库” ,能够向用户提供各种任务的手,共同优化多媒体程序。 随着一点点努力,许多非多媒体算法可以返工来确保一些计算密集型来实现使用一个或多个这些库例程。这些库目前没有可用的Linux,但可以移植。2.直接使用MMX指令。出于两个事实,这确实有点复杂。第一个问题是,MMX公司可能并不使用于处理器,因此另一种实现还必须提供。第二个问题是,IA32的Linux使用的汇编器目前通常还无法识别MMX指令。3.使用高级语言或模块的编译器,可以直接生成相应的MMX指令。这些工具目
25、前正在发展,但还没有一个在Linux下充分发挥作用。例如,在美国普渡大学( http:/dynamo.ecn.purdue.edu/hankd / SWAR / ),我们正在开发一个编译器,将采取方言的C函数写在一个显式并行,并会产生SWAR模块的调用为C的功能,以此来使用现有的SWAR支持技术,包括MMX。第一个原型模块的编译器,建于1996年秋季,然而,使用这种技术将会比我们原先预期的更多的时间。总之,MMX SWAR仍然难以使用。然而,随着一点点额外的努力,上述第二种方法目前可以使用了。下面是一些基础:1.你不能使用MMX如果你的处理器不支持它。下面的GCC代码将被用于测试MMX是否被你
26、的处理器所支持。如果返回0则表示不支持,如果返回非0则表示支持。inline externint mmx_init(void) int mmx_available; _asm_ _volatile_ ( /* Get CPU version information */ movl $1, %eaxnt cpuidnt andl $0x800000, %edxnt movl %edx, %0 : =q (mmx_available) : /* no input */ ); return mmx_available;2.一个MMX寄存器基本上长期持一个在GCC里称之为无符号双字型。因此,这种类型的
27、内存基础变量成为了MMX模块与C程序之间的沟通机制。或者,你可以声明你的MMX数据为64位数据结构的数据(这样便于确保64位队列能通过声明你的数据类型为一个带无符号双字字段的联合体)。3.如果MMX可用,你可以在你的MMX代码中使用字节的汇编指令,使每个指令进行编码。通过手工来制作确实是一件痛苦的事情,但对于一个编译器来生成却不是一件难事。例如,MMX指令PADDB MM0,MM1可被编码为GCC里的如下代码:_asm_ _volatile_ (.byte 0x0f, 0xfc, 0xc1nt);请记住,MMX通常使用一些同样类型的能被用于浮点操作的硬件,所以代码与MMX混合使用不得援引任何浮
28、点运算。浮点堆栈在执行任何MMX代码之前必须为空;浮点堆栈通常在不适用浮点的C函数功能前是空的。4.通过执行EMMS指令的方式退出您的MMX代码,它可被编码为:_asm_ _volatile_ (.byte 0x0f, 0x77nt);是否上面看起来很尴尬很粗糙?然而,MMX还相当年轻.这个文件的未来版本将提供更好的方法来使用MMX SWAR。5. Linux的托管附加处理器尽管这种方法最近失宠了,这几乎是不可能的并行处理方法,以达到举办一个附加的并行计算系统的低成本,高性能的可能,使用Linux系统。 问题是,很少提供软件支持,几乎都是关于自己的研究。5.1 Linux的PC是良好的主机在一
29、般情况下,往往附加并行处理器是专门履行职能的具体类型。在知道几乎所有研究都是居于自己之前,理解一个道理:尽管它可能很难找到一个适当的Linux PC主机特定的系统,在Linux平台PC是一个非常适合少数这种使用类型。对以后的学习将会有很大的帮助。PC机作为主机有两个主要原因。首先是价格低廉,且易于扩展的能力;资源如:更多的内存,磁盘,网络等等,都是平凡地添加到个人电脑。第二个是连接方便。不仅是ISA和PCI总线原型卡的广泛使用,并行端口提供合理的性能侵入接口更是一个优势。在在IA32的独立的I/O空间也便于借口提供单独的I/O端口地址,以起到硬件I/O地址的保护作用。Linux也成为了一名优秀
30、的主机操作系统。源代码免费提供全面和广泛的“黑客”导游,显然是一个巨大的帮助。然而,Linux还提供了良好的近实时调度,甚至有一个真正的实时Linux版本在 http:/luz.cs.nmt.edu/RTLinux的/。也许更为重要的是,同时提供一个完整的UNIX环境中,Linux可以支持开发Windows工具,比如那些在微软DOS和/或Windows。MSODS的程序可以在Linux中使用dosemu MSDOS的情况下执行,并且提供一个受保护的并且能真正运行MSDOS的虚拟机。Linux程序支持Windows 3.xx系列更是直接:免费软件比如wine,http:/www.linpro.n
31、o/wine/,对于大多数的程序它模拟Windows 3.11十分的恰到好处,便于在UNIX/X环境下正确而且有效地执行。以下两部分将举一些结合了并行系统的例子,我也希望它能在Linux下被支持。5.2 你的DSP是这样么?有一个处理器繁荣的高性能DSP(数字信号处理)处理器市场。虽然这些芯片通常都被设计为嵌入式特定应用系统中,但他们与并行电脑也有极大的关系,为什么呢?1.他们中的许多,如德州仪器( DSP家族,被设计来利用小或者无“胶”的逻辑来构建并行机器。2.他们很便宜,特别是每MIP或MFLOP。包括基本逻辑支持在内的成本,DSP处理器的成本仅仅是PC电脑成本的十分之一,对于DSP来说这
32、并不是闻所未闻。3.他们不需要太多的电量,也不会带来太多的热量。这意味着,有可能有这样一些芯片的所有的功率都是有传统的PC电脑来提供,在封闭的情况下你的PC电脑就不会变成一个烤箱。4.大多数DSP指令集里都具有看起来奇怪的东西,那些高级(例如,C)编译器好像是用得并不怎么好,例如,“反向位”是用一个附加的并行系统,它可以最直接地编译和运行主机的代码,同时能在DSP上仔细手工调整代码一样运行最耗时算法。5.这些DSP处理器并不是真正设计于运行类UNIX操作系统,而且一般都不是很便于作为独立的通用计算机处理器。例如,许多处理器没有内存管理硬件。换句话说,他们能工作得到更好,当他们被当作一个更通用目
33、的的电脑主机来使用时如Linux电脑。虽然有些声卡和调制解调器包括DSP处理器的Linux驱动程序可以访问,大收益来自使用一个附加的有四个或更多的DSP处理器的并行系统。由于德州仪器TMS320系列, MFLOPS使用TI的专用单精度浮点格式,相反,一个C67x将提供高达1 GFLOPS的单精度或420 MFLOPS双精度为IEEE浮点运算,使用一个VLIW的芯片架构称为VelociTI。它不仅是易于配置多处理器集团作为这些芯片,但在一个单一芯片中,C8x多处理器将提供100 MFLOPS IEEE浮点DSP的主从处理器的RISC随着两个或四个整数。 其他的DSP处理器家族最近已经被用于连接并
34、行系统,有ADI公司的SHARC(又名,ADSP-2106x) 。这些芯片可以配置为一个六处理器共享内存多处理器技术而不需要额外的胶逻辑,而且更大的系统也可以配置使用6个4位链接/芯片。大多数规模较大的系统似乎针对军事应用,但是有点昂贵。然而,综合计算引擎公司 GFLOPS的处理器。GreenICE成本还不到5000美元。在我看来,并行DSP处理器真的值得在Linux并行操作社区里引起极大的关注。5.3 FPGA可重构逻辑运算如果并行处理是所有关于获得最高的提速,那么为什么不建立定制的硬件? 好吧,我们都知道答案,它的成本太大,开发时间太长,当我们略微改变算法时便变得无用等。但是,最近进展中的
35、电可编程FPGA(现场可编程门阵列)已废止了那些反对。现在,门密度足够高,使整个simple FPGA的内置处理器可以在一个单一,时间来重新配置(重新设定)的FPGA也已经下降到一个合理水平,这是重新配置,甚至是从一个移动算法的一个阶段到下一个。这东西不适合心脏虚弱的人:你必须使用硬件描述语言如VHDL的FPGA配置,主机系统,以及写作的低级别的代码到Linux上的程序接口。但是FPGA成本低,尤其是算法操作在低精度的整数数据(实际上,还擅长于SWAR的小超集),FPGA执行复杂的操作系统时的速度可以和你输入的数据速度一样快。例如,简单的基于FPGA的系统已经在基因数据库搜索时间上已经优于超级
36、计算机系统。还有其他公司在制作合适的基于FPGA的硬件,但下面的两家公司做了一个很好的示范。虚拟电脑公司提供各种产品的使用动态可重构SRAM为基础的赛灵思FPGA。他们的8/16位的“虚拟的ISA样机板” Altera的ARC的PCI(Altera的可重构计算机,PCI总线) FPGA和一个PCI总线,而不是ISA总线。许多工具的设计,硬件描述语言,编译器,路由器,映射器等,作为对象的代码只运行在Windows和/或DOS下。任何时候当您需要使用它们时,你可以简单地保持并重新启动您主机PC上的磁盘分区为DOS / Windows,然而,许多这些软件包可以在Linux下使用dosemu或像win
37、e一样的Windows模拟器。6. 普遍感兴趣本节中所包含的材料,适用于所有四个并行处理模型的Linux。6.1 编程语言和编译器我是一个比较知名的编译器研究者,所以我想说,有很多十分棒的编译器在为Linux系统自动产生有效的并行代码。不幸的是,现在很难打破的一个事实是,通过各种明确的沟通和带有C代码的并行操作一般都是有GCC来编译的。下面的语言/编译器项目,是指语言中的一些高级别尽了最大努力从生产走向合理高效的代码。一般来说,每个目标都有各种各样有效合理的任务,但没有一个强大的通用语言和编译系统,这将使你永远停止编写由GCC编译的C程序哪个更好呢。出于他们的用途来使用这些语言和编译器,你会更
38、更短的开发时间,更容易调试和维修等。下面列出了大量的语言和编译器(排名不分先后)。下面这网站里有许多免费提供的编译器(其中大部分与Linux并行处理无关)Fortran 66/77/PCF/90/HPF/95至少在科学计算社区,总是会z有Fortran的存在。当然,现在的Fortran并不意味着还是处理1966年的ANSI标准一样的事情,Fortran66是一个很简单的东西。Fortran77增加了大量的图像功能,其中最明显的改进是支持字符数据和循环变化。PCF(并行计算论坛)Fortran试图增加各种功能的支持图像的并行处理于77型。HPF(高性能的Fortran,http:/www.crp
39、c.rice.edu/HPFF/home.html),这本身已经经历了两个版本(HPF-1和HPF-2),基本上是加强,规范的,版本很多的东西。如我们以前认识的CM Fortran语言,MasPar Fortran,或者Fortran D;它延伸的Fortran90具有增强的并行处理的布局,主要集中在制定的数据。最后,Fortran95是一个相对次要的和提高完善的90。就像能运行C程序的一般也能运动f2c,g77(一个不错的Linux专用概述,http:/linux.uni-regensburg.de/psi_linux/gcc/html_g77/g77_91.html),是商业的Fortra
40、n90/95产品从http:/extweb.nag.co.uk/nagware/NCNJNKNM.html中可以获得相关资料。这是因为所有的这些编译器最终都归结为同一代码生成GCC的使用背景。商业的Fortran parallelizers,可以生成用于SMPS的代码从现有的 Linux上,但它有可能会给出在SMP Linux下工作的标准POSIX线程(即,LinuxThreads)。波特兰集团, Linux生成代码的HPF Fortran(和C,C+)编译器;他们也有一个针对使用MPI或PVM的集群。这些在 的FORGR/spf/xHPF产品有可能对SMP或集群有用。免费提供的并行Fortrans可能工作于的并行Linux系统包括:1.ADAPTOR(自动数据并行翻译,http:/www.gmd.de/SCAI/lab/adaptor/adaptor_home.html),它们可以利用MPC或PVM将HPF翻译成77/90代码,但没有提及到Linux。2.FX http:/www.cs.cmu.edu/fx/Fx在卡内基梅隆有一些目标工