latex,word,哪种编辑器,可让内容中的同一数值一起改动?比如内容中涉及多个同一数值,需要一起改动。





实现所有命令行操作自动化的脚本编写工具

是进行高效的系统和网络管理工作不可或缺的一种工具,不过很多人对它存在着一定的误解。在本文中,将通过一些常见的用例来介绍 Expect 所提供的优点。Expect 在网络管理中发挥着重要作用

向使用 HDAPS 的笔记本电脑添加 Linux 和一点 Perl,即可为您的应用程序创建一个类似 Wii 的强大控制程序!

通过移动笔记本电脑,使用合成的 X Window System 事件和嵌入式加速计控制应用程序。使用检测算法将人体动作(例如摇动)转换为模式切换命令,从而实现一种新的应用程序交互方式。开发各种工具以帮助构建使用加速计的新一代界面程序,例如面向笔记本和 iPhone 的应用程序。

创新的触觉界面系统实现了一种全新的应用程序交互方式。使用廉价的电子游戏外围设备、嵌入式加速计和从笔记本电脑到手持电话等各种 PC 设备,可以实现控制应用程序的新方式。应用程序通常在界面控制方面比较滞后,由于 API 十分有限,应用程序的功能被局限于键盘和鼠标事件。

本文将演示的技术和代码可以使您将传统桌面计算环境中的应用程序与支持加速计的设备连接起来。

您需要一个内核支持 HDAPS 的 Linux(R) 发行版。HDAPS 驱动程序必须包含在内核中以支持加速计访问。较新的内核版本,包括 Red Hat、Debian、Gentoo 和 Ubuntu 都包含 HDAPS 驱动程序。有关如何开始使用 HDAPS 内核驱动程序的更多信息,请参考 小节中有关 HDAPS 的文章。

您需要使用来自 CPAN 的 Time::HiRes 模块,以便在记录数据时提供亚秒级的计时控制。此外,还需要使用 X11::GUITest 模块将合成的 X 事件发送到应用程序(参见 )。

注意,本文介绍的技术和算法应该适用于任何具有板载加速计的笔记本电脑。对于运行除 Linux 以外的其他操作系统的 MacBook 或 ThinkPad ,应用本文给出的代码也不会太困难。手持设备和其他支持加速计的系统也可以用于实现翻转、倾斜和命令之间的转换。如果在其他操作系统中运行,那么可以使用多种方法将合成的键盘和鼠标事件发送给应用程序。如果使用的是 Microsoft(R)



对特定于应用程序的特性进行控制,这通常是通过 API 层的功能钩子实现的。然而,很多应用程序并不具备完整的 API 集,因此需要借助鼠标和键盘输入才能全面地操作应用程序。其他的应用程序没有提供 API,而只通过传统的人机界面设备提供交互。结合本文演示的组件和算法,无需 D-Bus 或其他 API 就可以实现应用程序控制。

要实现对 D-Bus 和没有提供 API 的应用程序的完全控制,向应用程序发送合成的 X 事件是一种重要方法。

您需要花费大量时间将 XTest 库函数调用集成到您的应用程序中。您需要指定键释放速率并在识别窗口中查找所有细微区别,同时跟踪键盘和鼠标状态。或者,可以使用 X11::GUITest 为您完成这些任务。X11::GUITest 模块为 XTest 库提供了一个健壮的包装器,可以显著提高事件处理效率。

对于很多可以响应用户键盘和鼠标事件的应用程序,在使用合成事件时将会以无法预期的方式执行。您可能需要调整键盘重复率和延迟,或寻求不同于标准输入机制的新方法。例如,Google Earth 并不始终以有效的方式响应按键事件,无论重复率和速度如何。本文使用了一种可以代替等价合成输入的方法:按住导航罗盘的中心控制杆。在尝试创建合成 X 事件以执行与实际替代方法相同的功能时,您可能会在其他程序中发现类似的误差或限制。在使用通过编程方式触发的键盘和鼠标事件连接应用程序时,您需要进行实验以找出可提供最佳可用性体验的输入方法。



我们已经启用了传感器并设置了控制框架,因此接下来将在一个 Perl 程序内进行集成,将移动转换为操作。清单 1 展示了 /


以下仅限于unstable,对于某些版本有更简单的办法,请参考

    #博士论文原始材料打包

    make —— 执行完这个步骤之后,就已经安装好 MPICH 了。

    在这个步骤中,一步步地通过所有的 OSCAR 设置屏幕。确保以正确的顺序执行以下步骤:

    1. 选择包来定制 OSCAR 的安装。如果不熟悉这些包,可以暂时忽略。
    2. 构建客户机映像。这就是计算节点要使用的映像文件。
    3. 定义 OSCAR 客户机。这定义的是计算节点。我们需要指定集群中想要使用的节点的个数,以及它们所使用的子网。如果现在不确定一共有多少个节点,可以稍后再来修改。
    4. 将不同节点的 MAC 地址映射为 IP 地址。对于这个步骤,每个节点都必须在 BIOS 中使用 PXE 网络启动选项来启动。

    最后,运行测试。如果一切运行良好,每个测试都应该成功。即使没有任何问题,有时第一次尝试运行时也会有些测试失败。还可以通过执行 /opt/oscar 下面的测试脚本来手工执行这些测试。

    如果我们现在希望添加新的节点,可以再次启动 OSCAR 向导并添加节点。OSCAR 会使用 PXE 自动将 Linux OS 安装到这些节点上。

    现在我们已经准备好集群环境了,接下来可以运行并行程序了,并且可以根据需要添加或删除新节点,并使用 Ganglia 来监视节点的状态。


    当我们需要在一个具有大量用户的产品环境中对集群进行管理时,作业调度和监视就变得尤其重要了。

    MPI 可以在各个节点上启动并停止进程,但是这只能限定于同一个程序。在一个典型的集群上,会有很多用户都要运行自己的程序,我们必须使用调度软件来确保它们可以最优地使用集群。

    一个流行的调度系统是 OpenPBS,可以使用 OSCAR 自动安装它。使用这个调度系统,可以在集群上创建作业,并将作业提交到集群上运行。在 OpenPBS 中,还可以创建复杂的作业调度策略。

    使用 OpenPBS 还可以查看正在执行的作业、提交作业以及取消作业。它还可以控制某个作业可以使用的 CPU 时间的最大值,这对于系统管理员来说非常有用。

    集群管理中的一个重要方面就是监视,尤其是如果集群中有大量的节点就更是如此。此处有几种选择,例如 Ganglia(OSCAR 可以提供)和 Clumon。

    Ganglia 有一个基于 Web 的前端界面,可以提供有关 CPU 和内存使用情况的实时监视信息;可以方便地对其进行扩展,使其只监视有关某项内容的信息。例如,使用一些简单的脚本,我们就可以让 Ganglia 汇报 CPU 的温度、风扇转速等等。在接下来的几节中,我们将编写一些并行程序,并在这个集群上运行这些并行程序。


    并行编程有自己的一些并行算法,它们可以充分利用底层硬件的性能。接下来让我们来了解一下这种算法的信息。让我们假设一个节点要对一组 N 个整数进行求和运算。用普通方法实现这种操作所需要的时间是 O(N)(如果对 100 个整数进行求和需要 1ms,那么对 200 个整数进行求和就需要 2ms,依此类推)。

    这个问题看起来很难线性地提高其速度,但是值得注意的是,的确有这样一种方法。让我们来看一个在 4 个节点的集群上执行程序的例子,每个节点的内存中都有一个整数,程序的目的是对这 4 个整数求和。

    1. 节点 2 将自己的整数发送给节点 1,节点 4 将自己的整数发送给节点 3。现在节点 1 和节点 3 都有两个整数了。
    2. 这些整数在这两个节点上分别进行求和。
    3. 节点 3 将它的部分和发送给节点 1。现在节点 1 有两个部分和了。
    4. 节点 1 对这些部分和进行求和,从而得出最终的总和。

    正如我们可以看到的一样,如果最初有 2N 个数字,这种方法在 ~N 个步骤中就可以实现求和运算。因此算法的复杂度是 O(log2N),这相对于前面的 O(N) 来讲是一个极大的改进。(如果对 128 个数字进行求和需要 1ms,那么使用这种方法对 256 个数字进行求和就只需要


美国RSI公司的旗帜产品IDL(InteractiveDataLanguage),交互式数据语言是进行数据分析、可视化表达与跨平台应用开发的理想工具。作为语法简单的第四代计算机语言,IDL面向矩阵、拥有丰富的分析工具包,采用高速的图形显示技术,是集可视化、交互分析、大型商业开发为一体的高级开发环境,让您的科学研究和商用开发真正做到快捷高效。

RSI公司在向用户提供完善的数据分析和可视化软件、以及根据用户需求定制应。IDL用户涵盖NASA、ESA、NOAA、Siemens、GEMedical、ArmyCorpsofEngineers、MacDonaldDettwiler等大公司及研究机构。从辅助Hubble空间望远镜进行宇宙起源探察到帮助保时捷公司的工程师进行世界顶级汽车的设计,IDL还参与了2004年火星探测计划的测试和传感器设计,JPL的科学家利用IDL对“勇气号”和“机遇号”的数据进行数据分析和图像处理。目前,IDL已经广泛应用到海洋学、气象学、医学、空间物理、地球科学、教育、天文学和商业等各个研究领域。世界上数十万的科学家、研究人员、工程师、管理者和商务人员依靠IDL加快探索进程,发布科研成果和进行软件的快速开发。

IDL最初的设计理念就旨在为使用者节省时间。IDL支持各种格式数据源、各种类型和大小的数据,使您可以将精力集中在工作上,而无需过多考虑如何处理数据。IDL能高效处理海量多维数据的能力,更加速了您的分析和研究工作的进程。某些工具如iTools(IDLIntelligentToolsTM),为您的数据处理提供了直接的、交互式的数据分析和可视化环境,使您远离编写代码的烦恼。

IDL的卓越之处在为通过内建的大量数据可视化和分析函数及成熟完备的的开发环境,使科研用户和商业开发人员用最少的时间和资源实现预定开发目标。IDL应用程序具有跨平台性,您的一次性开发成果可以被应用到多种操作系统的计算环境当中(Windows/Linux/UNIX/Mac),保障了硬件资源和软件成果的充分利用。IDL还可以与其他先进技术,如COM和JAVA,实现嵌套应用。

IDL提供了包括创建、修改、编译、调试和工程发布等功能在内的理想开发环境IDLDE。同时提供整套控件化GUI工具包,可按照符合编程人员习惯的方式快速进行程序界面设计。

IDLDE是用户进行快速IDL代码编辑、编译、调试、运行和发布的集成开发环境,用户可以在该环境中采用命令行或编程两种方式进行方便灵活的科学数据分析和应用开发。

界面系统是一个应用程序成功与否的关键,IDL提供了一整套包含完整GUI控件的跨平台工具包,使用IDLGUIBuilder,您无需熟悉IDL控件编程知识就可以快速地完成程序设计,并以拖放式创建跨平台的图形用户界面。作为IDLDE的重要组成部分,IDLGUIBuilder还可方便地输出工程(project),并生成可执行文件。

IDL支持多种数据源、数据格式、数据类型和数据大小,能够处理任何有格式或无格式数据,它还支持通用文本及图像数据(JPEG,GIF,DXF,PNG,TIF等),在NASA、TPT、NOAA等机构中大量使用的HDF、CDF和netCDF等科学数据,及医学扫描设备的标准DICOM格式数据。IDL采用动态的变量形式,您可以灵活掌握数据的精度类型,这样您就不必担心数据占用更多的内存。

IDL语言面向矩阵的特性带来了快速分析超大规模数据的能力,它所具有的高级图像处理能力、交互式二维和三维图形技术、面向对象的编程方式、OpenGL图形加速功能、集成数学分析与统计软件包、完善的信号处理和图像处理功能、灵活的数据输入输出方式、跨平台图形用户界面工具包、连接ODBC兼容数据库及多种外部程序连接工具能将对您的数据进行快速展现和分析,即使是从未应用过IDL进行开发的初学者,IDL简单的语法、丰富的数据类型和面向数组的操作过程都能够让他们应用自如。

高效灵活的图形可视化方式

IDL是专为可视化大型而复杂的数据集而设计的语言。从简单的2D绘图和图像显示,到利用OpenGL硬件加速功能进行交互式的3D图形设计,以及利用支持多处理器快速渲染的功能进行体数据显示,您可以轻松地获得丰富的可视化效果。

IDL还提供了两套图形系统——直接图形和对象图形,可根据您的需要灵活选择。

IDL具有强大的数据分析能力,IDL带有完善的的数学分析和统计软件包,提供强大的科学计算模型。它的图像处理软件包提供了大量方便的分析工具、地图投影及转换软件包,使您开发GIS易如反掌。

IDL提供了可缩放的TrueType字体,可以注记中文,能将结果存为标准图像格式或PostScript格式,并尽可能地使图像质量最优化。

iTools智能工具包使IDL变得更简单

iTools是针对不同数据类型、集成一系列交互式功能的智能工具包,它包括iContour、iPlot、iImage、iMap、iSurface和iVolume等多种类型,给使用者提供了无需编程便能交互式分析各种数据类型的独立工具包,IDL的使用者可以利用其进行快速简单的数据分析、可视化,生成高质量显示效果的图形等。iTools定制简单,并可嵌入到您可开发的IDL应用程序中。

通过IDL链接外部程序,或者将IDL作为其他语言的外部程序或图形引擎,IDL可以成为您现有开发工具的强有力补充。IDL开放性的、通用性的、跨平台的计算环境,可以整合您现有的软硬件技术并保护和利用您过去的、现有的和将来的资源。

您可以从IDL调用其它语言编写的程序或算法,也可以从其他语言调用IDL的子程序。IDL既是ActiveX控件,又是ActiveX容器。利用ActiveX技术,您可以将IDL的图形嵌入到VB,VC++等Windows程序中。利用IDL支持JAVA,网络和第三方的功能,您可以从IDL编码访问JAVA对象。您还可以通过动态链接库方式通过IDL调用C和Fortran。

IDL已变得不可缺少,因为它能快速准确的估算和显示出现的近点角。。。采用IDL我们在三年项目进展中减少了超过一年的工作量。 PaulScowen NASA哈勃望远镜修正小组成员

把更多的时间用在科学研究上

  • IDL内建有丰富的算法库,包括已经被验证的图像处理、数学、统计以及分析程序等的运算法则,这些对研究工作的完成起到了推动作用.
  • 通过IDL强大且快速的可视化工具可以查看数据中的隐藏信息.
  • 快速查看结果.IDL是一种基于矩阵的语言,你可以迅速发布单独命令,速度可以与优化的C语言相比.
  • 达到两全其美的效果.IDL方便应用程序的管理和并具有一定的灵活性.
  • IDL可以管理你的数据.IDL支持任意格式、类型和大小的数据,这样你就可以把精力集中在数据挖掘上而不是如何读取.
  • 和使用IDL的你的同行分享代码.IDL可以方便地用于产品在全球范围内的研究与开发.
  • 与全球范围内的任何一个人分享IDL生产的图像、动画、三维VRML场景.
  • 通过ION(IDLOntheNet)分享数据和交互式应用程序. 达到更快的速率
  • 我们提供了全球范围内特定区域的培训,包括在您所在地区进行的定制培训.我们的专业讲师会为您提供专门技术让你提高速率并把精力主要集中在科学研究上.
  • 您可以信赖RSI的技术支持.我们有超过60%的技术支持人员拥有硕士或以上学位,你可以从专业人员那里得到技术支持.在这个行业里,我们的客户满意度是最高的.

"ActiveX界面允许将IDL无缝结合到我的基于LabVIEW的管理和数据分析系统中去。IDL带来的图形增强功能会随着海量数据的增长而变得重要。” DavidMoor MooreGoodIdeas 美国国家仪器有限公司(NI)合作伙伴

把更多的时间用在科学研究上

  • 在获取数据的过程中利用可视化工具优化你的数据质量.
  • 用IDL进行三维可视化的生成和管理并挖掘隐藏在您的数据中的信息.
  • 通过定制影像处理过程及体积分析将生数据(rawdata)快速转化为有用的成果.
  • 结合LabVIEW和IDL的力量来缩短测试和图形化的时间.

增强已有的IDL应用程序

  • IDL强大的内嵌影像处理、运算、统计和分析程序和应用程序库使你能够快速增强、扩展以及定制LabVIEW分析功能.
  • 通过执行作为LabVIEWVI网络的一部分的IDL原代码以On-the-Fly方式处理大批输入数据.
  • 用IDL和LabVIEW来为大型可视化项目管理海量数据,已逐渐成为科学技术分析的一部分.
  • 在Windows系统上,你可以用ActiveX控件建立一个统一的用户指令以实现IDL和LabVIEW之间的无缝结合.
  • 计算机能够在不同的平台上用LabVIEW获取数据,用IDL实时的显示数据.





  新浪科技讯 北京时间3月20日消息,据《纽约时报》报道,Fortran创始人约翰·巴库斯(John /blog/archives//




          

高性能计算(HPC)正在变得越来越简单,这是由于两个原因:开放源码软件概念的采用,以及集群技术的精炼。本文是两篇系列文章中的第一篇,讨论了集群的类型、用途以及在 HPC 领域变得更加流行的原因、HPC 基础以及 Linux 在 HPC 中的角色。

现在 Linux 集群在很多领域都已经变得非常流行了。随着集群技术的出现以及开放源码软件日益得到采纳,现在只需要传统高性能机器的很少一部分成本就可以构建一台超级计算机了。

这两篇系列文章简要介绍采用 Linux 集群技术的高性能计算(HPC)的概念,展示如何构建集群并编写并行程序。本文是两篇系列文章中的第一篇,讨论了集群的类型、用途、HPC 基础、Linux 在 HPC 中的角色以及集群技术日益增长的原因。第 2 部分将介绍并行算法的知识,并介绍如何编写并行程序、如何构建集群以及如何进行基准测试。

大部分 HPC 系统都使用了并行 的概念。有很多软件平台都是面向 HPC 的,但是首先让我们先来了解一下硬件的知识。

HPC 硬件可以分为 3 类:

  • 对称多处理器(SMP)

SMP 是 HPC 采用的体系架构之一,其中有多个处理器会共享内存。(在集群中,这也称为 大规模并行处理器(massively parallel processor,MPP),它们并不需要共享内存;稍后我们将更详细介绍这方面的内容。)与 MPP 相比,SMP 通常成本更高,而且可伸缩性较差。

顾名思义,在向量处理器中,CPU 被优化以便很好地处理向量数组的运算。向量处理器系统的性能很高,在 20 世纪 80 年代到 90 年代早期一度在 HPC 体系架构中占有统治地位,但是最近几年以来,集群变得更加流行了。

集群是最近几年中最为主要的一种 HPC 硬件:集群(cluster) 就是一组 MPP 的集合。集群中的处理器通常被称为 节点,它具有自己的 CPU、内存、操作系统、I/O 子系统,并且可以与其他节点进行通信。目前有很多地方都使用常见的工作站运行 Linux 和其他开放源码软件来充当集群中的节点。

接下来您将看到这些 HPC 硬件之间的区别,但是首先让我们从集群开始。


术语“集群(cluster)”在不同的地方可能会意味着不同的意义。本文重点介绍以下三种类型的集群:

最简单的故障迁移集群有两个节点:一个节点是活动的,另外一个节点是备用的,不过它会一直对活动节点进行监视。一旦活动节点出现故障,备用节点就会接管它的工作,这样就能使得关键的系统能够持续工作。

负载均衡集群通常会在非常繁忙的 Web 站点上采用,它们有多个节点来承担相同站点的工作,每个获取 Web 页面的新请求都被动态路由到一个负载较低的节点上。

高性能集群用来运行那些对时间敏感的并行程序,它们对于科学社区来说具有特殊的意义。高性能集群通常会运行一些模拟程序和其他对 CPU 非常敏感的程序,这些程序在普通的硬件上运行需要花费大量的时间。

图 1 解释了一个基本的集群。本系列文章的第 2 部分将展示如何创建这种集群,并为其编写程序。


网格计算 是一个更为广泛的术语,通常用来代表利用松耦合系统之间的协作来实现面向服务的架构(SOA)。基于集群的 HPC 是网格计算的一个特例,其中节点之间都是紧耦合的。网格计算的一个成功的、众所周知的项目是 SETI@home,即搜索外星智慧的项目,它使用了大约一百万台家用 PC 在屏保时的空闲 CPU 周期来分析无线电天文望远镜的数据。另外一个类似的成功项目是 Folding@Home 项目,用来进行蛋白质的折叠计算。


几乎所有的产业界都需要快速的处理能力。随着越来越便宜而且快速的计算机的出现,更多公司表现出了对利用这些技术优势的兴趣。人们对于计算处理能力的需求是没有上限的;尽管处理能力在迅速提高,但是人们的需求仍然超出计算能力所能提供的范围。

蛋白质分子是非常复杂的链,实际上可以表示为无数个 3D 图形。实际上,在将蛋白质放到某种溶液中时,它们会快速“折叠”成自己的自然状态。不正确的折叠会导致很多疾病,例如 Alzheimer 病;因此,对于蛋白质折叠的研究非常重要。

科学家试图理解蛋白质折叠的一种方式是通过在计算机上进行模拟。实际上,蛋白质的折叠进行得非常迅速(可能只需要 1 微秒),不过这个过程却非常复杂,这个模拟在普通的计算机上可能需要运行 10 年。这个领域只不过是诸多业界领域中很小的一个,但是它却需要非常强大的计算能力。

业界中其他领域包括制药建模、虚拟外科手术训练、环境和诊断虚拟化、完整的医疗记录数据库以及人类基因项目。

震 动图中包含有大陆和洋底内部特性的详细信息,对这些数据进行分析可以帮助我们探测石油和其他资源。即便对于一个很小的区域来说,也有数以 TB 计的数据需要重构;这种分析显然需要大量的计算能力。这个领域对于计算能力的需求是如此旺盛,以至于超级计算机大部分都是在处理这种工作。

其他地理学方面的研究也需要类似的计算能力,例如用来预测地震的系统,用于安全性工作的多谱段卫星成像系统。

在 工程领域(例如航天引擎设计)操纵高分辨率的交互式图像在性能和可伸缩性方面历来都是一种挑战,因为这要涉及大量的数据。基于集群的技术在这些领域已经取 得了成功,它们将渲染屏幕的任务分割到集群中的各个节点上,在每个节点上都利用自己的图形硬件来呈现自己这部分屏幕的图像,并将这些像素信息传送到一个主 节点上,主节点对这些信息进行组合,最终形成一个完整的图像。

这个领域中的例子目前才不过是冰山一角;更多的应用程序,包括天体物理模拟、气象模拟、工程设计、金融建模、证券模拟以及电影特技,都需要丰富的计算资源。对于计算能力越来越多的需求我们就不再进行介绍了。


在基于集群的计算技术出现之前,典型的超级计算机都是向量处理器,由于它们全部采用专用的硬件和软件,因此成本通常会超过一百万美元。

随着 Linux 和其他免费的集群开放源码软件组件的出现和常用硬件处理能力的提高,这种情况现在已经发生了很大的变化。您可以利用少量的成本来构建功能强大的集群,并能够根据需要来添加其他节点。

GNU/Linux 操作系统(Linux)已经在集群中得到了大量的采用。Linux 可以在很多硬件上运行,并且具有高质量的编译器和其他软件,例如并行文件系统和 MPI 实现在 Linux 上都是免费的。采用 Linux,用户还可以针对自己的任务负载对内核进行定制。Linux 是构建 HPC 集群的一个非常好的平台。


理解硬件:向量机与集群

要理解 HPC 硬件,对向量计算和集群计算进行一下比较是非常有用的。二者是互相竞争的技术(地球模拟器 是一台向量超级计算机,目前仍然是最快的 10 台机器之一)。

从根本上来讲,向量处理器和标量处理器都是基于时钟周期来执行指令的;使它们产生区别的是向量处理器并行处理与向量有关的计算的能力(例如矩阵乘法),这在高性能计算中是非常常见的。为了展示这一点,假设您有两个双精度的数组 ab,并且要创建第三个数组 x,比如 x[i]=a[i]+b[i]

任何浮点操作,例如加法和乘法,都可以通过几个步骤来实现:

向量处理器通过使用 流水线(pipeline) 技术在内部对这些步骤进行并行处理。假设在一个浮点加法运算中有六个步骤(与 IEEE 算术硬件一样),如图 2 所示:


向 量处理器可以并行处理这六个步骤 —— 如果第 i 个数组元素是在第 4 个步骤中被添加的,那么向量处理器就会为第 (i+1) 个元素执行第 3 个步骤,为第 (i+2) 个元素执行第 2 个步骤,依此类推。正如您可以看到的一样,对于一个 6 级的浮点加运算来说,加速比非常接近于 6(在开始和结束时,这六个步骤并不是都处于活动状态的),因为在任何给定的时刻(图 2 所示的红色),这些步骤都是活动的。这样做的一大优点是并行处理都是在幕后进行的,您并不需要在程序中显式地进行编码。

对于大部分情况来说,这六个步骤都可以并行执行,这样就可以获得几乎 6 倍的性能提高。箭头表示了对第 i 个数组元素所进行的操作。

与向量处理相比,基于集群的计算采用的是完全不同的一种方法。它不使用专门优化过的向量硬件,而是使用标准的标量处理器,但是它采用了大量的处理器来并行处理多个计算任务。

  • 集群都是使用常见的硬件进行构建的,其成本只是向量处理器的很小一部分。在很多情况中,价格会低一个数量级以上。
  • 集群使用消息传递系统进行通信,程序必须显式地进行编码来使用分布式硬件。
  • 采用集群,您可以根据需要向集群中添加节点。
  • 开放源码软件组件和 Linux 降低了软件的成本。
  • 集群的维护成本很低(它们占用的空间较小,耗费的电力较少,对于制冷条件的需求较低)。

当在集群上实现高性能环境时,软件和硬件就需要联合起来工作。程序在编写时必须要显式地利用底层硬件的优点,如果现有的非并行程序不能很好地在集群上运行,那么这些程序必须重新进行编写。

并行程序一次要执行很多操作。其数量取决于目前正在解决的问题。假设一个程序所花费的时间中有 1/N 是不能并行处理的,那么剩余的 (1-1/N) 就是可以并行处理的部分(请参看图 3)。


从 理论上来说,您可以采用无数的硬件来处理并行执行的部分,甚至在接近 0 的时间内完成这些任务,但是对于串行部分来说,这样做不会有任何提高。结果是,可以实现的最佳结果是使用原来的 1/N 的时间来执行整个程序,但是不可能再快了。在并行编程中,这个事实通常就称为 Amdahl 法则。

Amdahl 法则揭示了使用并行处理器来解决问题与只使用一个串行处理器来解决问题的加速比。加速比(speedup) 的定义如下:(使用多个处理器)并行执行程序所需要的时间除以(使用一个处理器)串行执行程序所需要的时间:

其中 T(j) 是在使用 j 个处理器来执行程序时所需要的时间。

在图 3 中,如果采用足够多的节点来进行并行处理,那么 T'par 就可以非常接近于 0,但是 Tseq 却不会变化。在最好的情况中,并行程序也不可能快到原来的 1+Tpar/Tseq。

在编写并行程序时真正困难的事情是使 N 尽量大。但是这件事情却有两面性。通常都是要试图在更为强大的计算机上来解决更大的问题,通常随着所解决问题的规模的增大(例如试图修改程序并提高可并行 的部分来优化地利用可用资源),所花费在串行部分上的时间就会减少。因此,N 值就会自动变大了。(请参看本文后面 部分所给出的


现在让我们介绍两种并行编程的方法:分布式内存方法共享式内存方法

此处我们考虑一种主从模式非常有用:

  • 主节点负责将任务划分到多个从节点上。
  • 从节点负责处理自己所接收到的任务。
  • 如果需要,从节点之间会相互进行通信。
  • 从节点将结果返回给主节点。
  • 主节点收集结果,并继续分发任务,依此类推。

显然,这种方法的问题就产生于分布式内存的组织。由于每个节点都只能访问自己的内存,如果其他节点需要访问这些内存中的数据,就必须对这些数据结构进行复制并通过网络进行传送,这会导致大量的网络负载。要编写有效的分布式内存的程序,就必须牢记这个缺点和主从模型。

在共享式内存方法中,内存对于所有的处理器(例如 SMP)来说都是通用的。这种方法并没有分布式内存方法中所提到的那些问题。而且对于这种系统进行编程要简单很多,因为所有的数据对于所有的处理器来说都 是可以使用的,这与串行程序并没有太多区别。这些系统的一个大问题是可伸缩能力:不容易添加其他处理器。

并行编程(与所有的编程技术一样)与其他科学一样,都是一门艺术,总会留下一定的空间来进行设计的改进和性能的提高。并行编程在计算中有自己特殊的地位:本系列文章的第 2 部分将介绍并行编程平台,并给出几个例子。


当文件 I/O 成为瓶颈时怎么办?

有些应用程序通常会需要从磁盘中读写大量的数据,这通常是整个计算过程中速度最慢的一个步骤。更快的硬盘驱动器能够帮助解决一些问题,但是有时这是不够的。

如果一个物理磁盘分区是在所有节点之间共享的(例如使用 NFS),就像是在 Linux 集群中经常采用的方法一样,那么这个问题就会变得更加明显了。此时就是并行文件系统的用武之地了。

并行文件系统(Parallel filesystem) 将数据存放在分布在多个磁盘上的文件中,这些磁盘连接到集群中的多个节点上,这些节点称为 I/O 节点。当一个程序试图读取某个文件时,可以并行地从多块磁盘上分别读取这个文件的某些部分。这可以降低某个磁盘控制器上的负载,并能够处理更多请求。 (PVFS 就是一个很好的开放源码并行文件系统;目前已经在 Linux 集群上使用标准的 IDE 硬盘实现了超过 1 GB/s 的磁盘性能。)

PVFS 可以作为一个 Linux 内核模块使用,也可以编译到 Linux 内核中。底层的概念非常简单(请参看图 4):

  • 元数据服务器负责存储文件的哪些部分存储在什么地方的信息。
  • 多个 I/O 节点上存储了文件的各个部分(PVFS 底层可以使用任何常见的文件系统,例如 ext3 )。


当集群中的计算节点想要访问并行文件系统中的一个文件时,它需要执行以下步骤:

  • 像平常一样请求文件,请求被传送到底层的 PVFS 文件系统中。
  • PVFS 向元数据服务器发送一个请求(图 4 中的步骤 1、2),这会通知请求节点有关文件在各个 I/O 节点上的位置的信息。
  • 使用这些信息,计算节点直接与所有相关的 I/O 节点进行通信,获得整个文件(步骤 3)。

这些步骤对于调用应用程序来说都是透明的;底层对所有 I/O 节点发出请求的复杂性、获取文件的内容等等,都是由 PVFS 处理的。

有关 PVFS 有一件好的事情:不需做任何修改就可以在其上运行普通文件系统的二进制形式 —— 这在并行编程领域多少是个例外。( 中介绍了其他一些并行文件系统。)


[版权声明] 本站所有资料由用户提供并上传,若内容存在侵权,请联系邮箱。资料中的图片、字体、音乐等需版权方额外授权,请谨慎使用。网站中党政主题相关内容(国旗、国徽、党徽)仅限个人学习分享使用,禁止广告使用和商用。

我要回帖

更多关于 排版软件latex 的文章

 

随机推荐