高性能科学与工程计算
作者 : (德)Georg Hager,Gerhard Wellein 著
译者 : 张云泉 袁良 贾海鹏 张先轶 译
丛书名 : 计算机科学丛书
出版日期 : 2014-07-07
ISBN : 978-7-111-46652-9
定价 : 69.00元
教辅资源下载
扩展信息
语种 : 简体中文
页数 : 252
开本 : 16
原书名 : Introduction to High Performance Computing for Scientists and Engineers
原出版社: Taylor & Francis -CRC Press
属性分类: 教材
包含CD :
绝版 :
图书简介

本书从工程实践的角度介绍了高性能计算的相关知识,主要涵盖了当代处理器体系结构基础知识、各种基本的程序串行优化策略和基本并行模式,为读者理解当前体系结构和代码中的性能潜力和局限提供了坚实的理论基础。此外,在并行编程模型方面,还包括基于OpenMP的共享并行和基于MPI的分布式并行编程,并包含大量Fortran代码实例。作者根据自身的研究也提出了一些前沿问题的解决方案,如编写有效的C++代码、GPU编程等。

图书特色

高性能科学与工程计算
Introduction to High Performance Computing for Scientists and Engineers
(德)Georg Hager  Gerhard Wellein 著
 张云泉 袁良 贾海鹏 张先轶 译

Georg Hager和Gerhard Wellein在本书中介绍了高性能计算的基础知识,写作和描述方式十分易读。……本书全面讲解了理论、技术、体系结构、现代高性能计算机软件实现以及高性能计算系统使用等知识,重点关注科学与工程计算中的问题,具有教育性和独特性,我向科学家和工程师强烈推荐此书。我相信本书能使许多读者收益良多并为他们提供一个优秀参考。 
—— Jack Dongarra,田纳西大学教授,美国国家工程院院士

本书由高性能计算专家编写,介绍了当前主流的计算机体系结构、主流并行编程模型、常用优化策略。本书对程序性能方面的讲解采用直观的方式,不需要丰富的计算机科学知识就能理解。本书可作为读者学习更高级知识的基础。

本书特点
覆盖基本的串行优化策略和主流并行模式。
强调在不同系统体系结构上程序性能建模的重要性。
包含大量作者在多年用户支持、程序优化和评测工作中积累的实例。
介绍了一些重要概念,例如多核体系结构和亲缘性。
展示了大量Fortran、C和C++代码实例。

作者简介
Georg Hager 是一位理论物理学家,拥有Greifswald大学计算物理博士学位。他从1995年致力于高性能计算研究,现在是Erlangen Regional Computing Center (RRZE)高性能计算组的高级科学家。最近研究兴趣包括现代微处理器的体系结构优化、处理器和系统级的性能建模以及异构系统优化。他的日常工作涉及高性能计算的全方位用户支持,例如讲座、报告、培训、代码并行化、代码分析和优化以及新型计算机体系结构和工具的评估。
Gerhard Wellein 拥有Bayreuth大学固体物理博士学位,现在是Erlangen大学计算机系教授。他是Erlangen Regional Computing Center (RRZE)高性能计算组的主任,有十余年的高性能计算教学经验,其教学对象包括计算科学和工程编程领域的学生和科学家。他的研究兴趣包括大规模稀疏特征值问题求解、新奇并行化方法、性能建模以及体系结构优化方法。

图书前言

当1941年构建世界上第一台全自动可编程并具备二进制浮点运算能力的计算机时[H129],Konrad Zuse成功地预见了这种革命性设备不仅只应用于科学和工程领域,还将对生活的各个方面产生深远影响[H130]。计算机的高效运算、可视化和数据处理能力,允许我们自动执行大量任务并实现无延迟通信,这使得Zuse的预言成为现实,计算已经彻底地改变了我们的生活方式和科研手段。
  科学和工程研究从另一种特别的角度受益于计算能力的增长。早期的科研人员已经意识到计算机可以通过虚拟实验代替现实中那些太过复杂、昂贵或极端危险的真实实验,或者进行以前无法手工完成的计算,计算流体力学(Computational Fluid Dynamics,CFD),即模拟任意几何形状的流体就是一个这样典型的应用。飞机、汽车、高速列车以及涡轮设备的设计都离不开流体力学分析。以前的风洞和木质实体模型属于实验研究,而在包括流体力学在内的几乎所有科学研究领域,计算已成为理论分析和实验设计之外的第三种科学研究方法。近几年药物设计已成为高性能计算的新兴研究方向,化学家可以利用软件(只需点击鼠标)快速发现化学反应机制,模拟影响生命运行机制的大分子间的复杂动力学。理论固体物理通过在量子级别对组成成分、原子核和电子的相互作用进行建模来在微观级别研究物质结构[A79],需要的大量自由度使其无法在理论层次上进行分析,而只能借助大规模计算资源实现。其他同样需要大规模计算的学科包括量子化学、物质科学、结构力学和医学图像处理等。
  计算机模拟已成为学术和工业界大多数研究领域中不可或缺的标准工具,虽然科研人员可以利用个人计算机处理许多计算任务,但是仍有一些任务需要个人计算机无法满足的大规模存储、内存以及计算速度,而这正是高性能并行计算机系统的用武之地。
  利用高性能计算(High Performance Computing,HPC)作为科研工具至少需要了解相关硬件和软件知识,即使利用具有良好界面可直接运行的软件也是如此,当需要编写代码时掌握这些知识就显得更为必要。但是我们与科学家和工程师多年的合作经验表明,很难在不同研究组中建立和维护充足、完整的相关知识。陡峭的高性能计算学习曲线使得新的博士生难以独自快速掌握相关知识。虽然高性能计算具有基础性、难以掌握且极为昂贵等特点,但是高性能计算毕竟只是一个工具,而推进科学研究的进展才是终极目标。技术的进步使得高性能计算从院系级别扩展到了桌面级别,在当前单处理器发展停滞以及通过增加并行性来提高性能的趋势下,大量科学家和工程师必须关注性能和可扩展性,这也是本书的主题。我们编写此书的目的为保持这些知识的新颖性。
  事实上,目前已经出版了多种计算机体系结构、优化和高性能计算方面的书籍[S1,R34,S2,S3,S4],虽然基本原理是一致的,但是由于向量处理器的衰落、无处不在的SIMD处理能力、多核处理器的出现、ccNUMA存储结构的发展以及高效能高性能网络互连系统的出现,这些书中的许多内容都已过时。发展最为迅猛的要数运行Linux操作系统的基于x86结构的Intel或AMD处理器商业集群。最新的出版物更关注某个特定方面,因此不适合作为学生教材或者相关科学家参考。本书的目标是从性能角度介绍体系结构和高性能计算编程的基础知识。我们的经验表明,大多数用户经常无法定位性能因素以及是否需要考虑优化。本书的读者可以掌握如何确定性能限制因素等基础知识,这为他们学习更为专业的技巧奠定了基础。因此本书也提供了一个详尽的参考书目列表,可以在本书的网页中(http://www.hpc.rrze.uni-erlangen.de/HPC4SE)找到相应的具有超链接和附加评论的版本。
本书读者
  在科学计算中心的多年工作经验使我们熟知用户和并行计算机厂商的需求,因此从事与高性能计算相关工作的人员都会从本书中获益。计算机科学、计算工程或更广泛的关心模拟领域的教师和学生可将本书作为教材。对于希望快速了解高性能计算基础知识的科学家和工程师,本书可以作为入门级参考书。最后,集群系统构建师可以利用本书的内容优化机器,为用户提供更好的服务。读者需要具有一定的编程和高级计算机体系结构知识。需要强调的是,本书只是一本入门级教材而不是一本详尽的参考书,因为到目前还没有一本高性能计算百科全书。
本书内容
  高性能计算涉及给定算法(或者称为程序代码)的实现以及所运行的硬件平台。我们假定希望利用高性能计算资源的用户已经充分了解他们想要解决的问题的不同算法,因此我们并不全面介绍它们。本书中我们选取某些特定实例进行讲解,但是可能存在其他更为合适的算法,读者需要理解本书实例中的策略。
  虽然我们努力保持本书的精简性,但是不可避免地包含了过多的内容。由于技术发展极为迅猛,我们忽略了一些近期的研究成果,例如现代加速技术(GPGPU、FPGA、Cell处理器),因为这些内容很快将会变得过时。有些人认为高性能输入、输出技术应该包含在高性能计算书籍中,但是我们认为高效并行I/O技术是一个高级并且与硬件系统相关的课题,所以最好单独介绍。在软件方面,我们介绍了基本的程序串行优化策略和基本并行模式:基于OpenMP的共享存储并行化、基于MPI的分布式存储并行编程。其他一些模式,包括Unified Parallel C(UPC语言)、Co-Array Fortran(CAF语言)和其他一些现代编程方法,仍然需要检验其高效性,就像被广泛接受的MPI和OpenMP语言一样。
  虽然我们不能忽视商业系统的统治性地位,但本书中许多概念都在与特定的体系结构无关的层次上进行介绍,因此当我们应用实例介绍并展示实际性能数值时,都是基于x86集群系统标准网络连接。几乎所有的代码都用Fortran编写,仅当需要与外界环境相关的特性时我们才用C或者C++代码。本书中一些用来测试的代码可以在本书官方网站上下载:http://www.hpc.rrze.unierlangen.de/HPC4SE。
  本书按下述方式组织:第1章介绍现代基于高速缓存的微处理器体系结构,并讨论其内在性能瓶颈,对最新的发展(例如多核芯片和同时多线程(SMT))也进行了介绍。虽然向量处理器已不再在高性能计算市场中应用,但是我们还是对其进行了简要介绍。第2章和第3章讲解了基于高速缓存体系结构的串行程序的一般优化方法,介绍了用来寻找循环程序最优性能的一些简单的模型,还展示了如何通过代码变换来改进其性能限制。实际上,我们认为在不同计算机系统层次上建立应用程序的性能模型是最为重要的工作,也是高性能计算领域中的引导性原理。
  第4章介绍共享存储和分布式存储两种类型的并行计算机体系结构,以及相关网络拓扑结构。第5章在理论层次上介绍并行计算概念,首先介绍一些重要的并行编程模式,然后介绍能够解释并行可扩展性限制的性能模型,因此回答了利用低速处理器构建大规模并行计算机系统的原因和方式。第6章对OpenMP进行了介绍,OpenMP是在共享存储系统上编写科学计算应用的主流语言。第7章介绍了几种典型的与OpenMP相关的程序性能问题并给出了相应的避免或减轻问题的方法。由于缓存一致的非一致内存访问(ccNUMA)系统已经大规模应用在高性能计算的市场中(这也是被忽视的事实,甚至一些高性能计算专家也将其忽视),相应的优化技术在第8章介绍。第9章和第10章介绍分布式系统上的消息传递接口语言(Message Passing Interface,MPI)以及如何编写高效MPI代码。最后,第11章介绍MPI和OpenMP混合编程方法。每章最后都配备相应的习题,我们推荐读者认真研究,这些习题包括一些书中未介绍的零碎知识或者一些特定的主题。附录B提供了相应的答案。
  我们建议读者从头到尾认真阅读本书,因为本书的主题都极为重要。但是只想了解OpenMP和MPI的读者可以只从第6章和第9章开始阅读,并从第7章、第8章和第10章中学习相应的优化技术。本书自引用比较多,所以如果忽略了某些部分,也可以在其他地方找到相关材料。
致谢
  本书起源于为Springer出版社“Lecture Notes in Physics”卷编写的两章内容,也即2006年计算多粒子物理夏季讨论班的内容[A79]。我们感谢讨论班的组织者,特别是Holger Fehske、Ralf Schneider和Alexander Weisse,使得我们有机会将自己在高性能计算领域的经验总结成文,虽然本书增加了很多其他材料,但是没有最初的两章内容我们就无法开始本书的撰写。
  本书包括与用户、学生、算法、代码和工具一起工作的十几年经验,因此许多人都直接或者间接(甚至没有意识到)为本书做出了贡献。我们特别要感谢Erlangen Regional Computing Center (RRZE)高性能计算服务中心的员工,特别是Thomas Zeiser、Jan Treibig、Michael Meier、Markus Wittmann、Johannes Habich、Gerald Schubert和Holger Stengel,在与他们的讨论中得到了十分有用的知识。在十年中我们小组从“Competence Network for Scientific High Performance Computing in Bavaria”(KONWIHR) 和弗里德里希–亚历山大–埃尔兰根–纽伦堡大学获得了极大的资助。
  我们还要感谢Uwe Küster (HLRS Stuttgart)、Matthias Müller (ZIH Dresden)、Reinhold Bader和Matthias Brehm (LRZ München),感谢他们在服务中心与我们的高效合作。还要特别感谢Darren Kerbyson (PNNL)的鼓励和对我们工作的建议。最后我们要感谢Rolf Rabenseifner (HLRS)和Gabriele Jost (TACC)与我们在混合编程方面的合作,本书第11章就是我们一起合作的成果。
  一些公司的第一手技术支持及一些合作(即使没有利润)也值得我们感谢,Intel (Andrey Semin和Herbert Cornelius)、SGI (Reiner Vogelsang和Rüdiger Wolff)、NEC (Thomas Sch nemeyer)、Sun Microsystems (Rick Hetherington、Ram Kunda和Constantin Gonzalez)、IBM (Klaus Gottschalk)以及 Cray (Wilfried Oed)。
我们还要感谢CRC员工的支持,特别是Ari Silver、Karen Simon、Katy Smith和Kevin Craig。最后,如果没有Horst Simon (LBNL/NERSC) 和 Randi Cohen(Taylor & Francis)的鼓励,本书将不可能顺利完成,他们使我们有动力开始撰写本书。
Georg Hager与Gerhard Wellein
埃尔兰根计算中心
埃尔兰根–纽伦堡大学
德国

上架指导

计算机\高性能计算

封底文字

“Georg Hager和Gerhard Wellein在本书中介绍了高性能计算基础知识,写作和描述方式十分易读。……本书在理论、技术、体系结构、现代高性能计算机软件实现以及高性能计算系统使用等几个方面进行了均衡的讲解,重点关注科学与工程计算中的问题,具有教育性和独特性,我向科学家和工程师强烈推荐此书。我相信本书能使许多读者收益良多并为他们提供一个优秀参考。”
——Jack Dongarra,田纳西大学教授,美国国家工程院院士
  本书由高性能计算专家编写,介绍了当前主流的计算机体系结构、主流并行编程模型、常用优化策略。本书对程序性能方面的讲解采用直观的方式,不需要丰富的计算机科学知识就能理解。本书可作为读者学习更高级知识的基础。
  本书特点:
  ● 覆盖基本的串行优化策略和主流并行模式。
  ● 强调在不同系统体系结构上程序性能建模的重要性。
  ● 包含大量作者在多年用户支持、程序优化和评测工作中积累的实例。
  ● 介绍了一些重要概念,例如多核体系结构和亲缘性。
  ● 展示了大量Fortran、C和C++代码实例。

作者简介

(德)Georg Hager,Gerhard Wellein 著:Georg Hager是一位理论物理学家,拥有Greifswald大学计算物理博士学位。他从1995年致力于高性能计算研究,现在是Erlangen Regional Computing Center (RRZE)高性能计算组的高级科学家。最近研究兴趣包括现代微处理器的体系结构优化、处理器和系统级的性能建模以及异构系统优化。他的日常工作涉及高性能计算的全方位用户支持,例如讲座、报告、培训、代码并行化、代码分析和优化以及新颖计算机体系结构和工具的评估。
  Gerhard Wellein拥有Bayreuth大学固体物理博士学位,现在是Erlangen大学计算机系教授。他是Erlangen Regional Computing Center (RRZE)高性能计算组的主任,有十多年的高性能计算教学经验,其教学对象包括计算科学和工程编程领域的学生和科学家。他的研究兴趣包括大规模稀疏特征值问题求解、新奇并行化方法、性能建模以及体系结构优化方法。

译者简介

张云泉 袁良 贾海鹏 张先轶 译:暂无简介

译者序

以高性能计算为核心的计算科学,已经广泛应用于科学研究和工程设计的各个层面,成为继理论研究和实验研究之外的第三种科学研究方法。美国总统信息技术顾问委员会在2005年发表题为“计算科学:确保美国竞争力”的报告中认为计算科学是21世纪最重要的技术领域之一,它对于整个社会的进步是不可或缺的,并建议美国政府制定规划,对计算科学进行长期资助。
  高性能计算追求程序执行效率,因此并行程序的实现与优化成为计算机科学家的两大研究主题。本书也以并行编程模型和并行优化为主要内容,对程序串行优化、数据优化和并行性优化做了深入介绍,还对多处理器导致的NUMA问题以及多核环境下的进程亲缘性进行了深入讲解。在并行编程模型方面,OpenMP和MPI分别是共享存储系统和分布式存储系统两大并行计算机体系架构上的事实标准。本书不仅详细介绍了这两种编程语言,并且还单独设立章节讲解了相应的关键优化技术。此外,本书配备大量程序和命令实例,方便读者掌握相关技巧。总之,本书作者通过自己多年的高性能计算领域编程和优化的实践经验,选取最为关键的基本知识和优化技术进行讲解,可供相关领域科学家作为参考。
  本书作者Georg Hager和Gerhard Wellein均为物理学家,长期在Erlangen Regional Computing Center (RRZE)高性能计算组从事高性能计算研究,Gerhard Wellein目前还担任该小组主任,主要研究兴趣包括现代微处理器的体系结构相关优化方法、处理器和系统层次的性能模型,以及异构系统优化。两位作者在高性能计算领域都有丰富的全方位用户支持和教学经验,例如讲座、报告、培训、代码并行化、代码分析和优化以及新颖计算机体系结构和工具的评估,其教学对象包括计算科学和工程编程领域的学生和科学家。
  由于时间仓促,加上书中某些术语目前没有统一译法,所以我们对一些术语采取了保留其英文名称的方法。对书中翻译方面的错误和不妥之处,恳请广大读者不吝批评指正。

图书目录

出版者的话
译者序

前言
缩略词
第1章 当代处理器  1
1.1 存储程序的计算机体系结构  1
1.2 基于高速缓存的通用微处理器体系结构  2
1.2.1 性能指标和基准测试  2
1.2.2 晶体管:摩尔定律  5
1.2.3 流水线  6
1.2.4 超标量  10
1.2.5 SIMD  10
1.3 存储层次  11
1.3.1 高速缓存  11
1.3.2 高速缓存映射  13
1.3.3 预取  15
1.4 多核处理器  17
1.5 多线程处理器  19
1.6 向量处理器  20
1.6.1 设计原理  21
1.6.2 最高性能估计  22
1.6.3 程序设计  23
习题  25
第2章 串行代码基本优化技术  26
2.1 标量剖析  26
2.1.1 基于函数和代码行的程序剖析  26
2.1.2 硬件性能计数器  29
2.1.3 手工代码插入  32
2.2 优化常识  32
2.2.1 少做工作  32
2.2.2 避免耗时运算  32
2.2.3 缩减工作集  33
2.3 小方法,大改进  33
2.3.1 消除常用子表达式  33
2.3.2 避免分支  34
2.3.3 使用SIMD指令集  34
2.4 编译器作用  36
2.4.1 通用优化选项  37
2.4.2 内联  37
2.4.3 别名  37
2.4.4 计算准确性  38
2.4.5 寄存器优化  39
2.4.6 利用编译日志  39
2.5 C++优化  40
2.5.1 临时变量  40
2.5.2 动态内存管理  42
2.5.3 循环与迭代器  43
习题  43
第3章 数据访存优化  45
3.1 平衡分析与lightspeed评估  45
3.1.1 基于带宽的性能建模  45
3.1.2 STREAM 基准测试  47
3.2 存储顺序  49
3.3 案例分析:Jacobi算法  50
3.4 案例分析:稠密矩阵转置  53
3.5 算法分类和访存优化  56
3.5.1 O(N)/O(N)  56
3.5.2 O(N2)/O(N2)  57
3.5.3 O(N3)/O(N2)  60
3.6 案例分析:稀疏矩阵向量乘  61
3.6.1 稀疏矩阵的存储机制  62
3.6.2 JDS sMVM优化  64
习题  66
第4章 并行计算机  68
4.1 并行计算模式分类  69
4.2 共享存储计算机  69
4.2.1 cache一致性  69
4.2.2 UMA  71
4.2.3 ccNUMA  71
4.3 分布式存储计算机  73
4.4 混合型系统  74
4.5 网络  75
4.5.1 网络的基本性能特征  75
4.5.2 总线  78
4.5.3 交换网络和胖树网络  79
4.5.4 Mesh 网络  81
4.5.5 混合网络  82
习题  82
第5章 并行性基础  83
5.1 为什么并行化  83
5.2 并行性  83
5.2.1 数据并行性  84
5.2.2 功能并行性  86
5.3 并行扩展性  87
5.3.1 限制并行执行的因素  87
5.3.2 可扩展性指标  88
5.3.3 简单可扩展性定律  89
5.3.4 并行效率  90
5.3.5 串行性能与强可扩展性  91
5.3.6 改进的性能模型  92
5.3.7 选择正确的扩展性基准  94
5.3.8 案例分析:低速处理器计算机能否变得更快  95
5.3.9 负载不均衡  98
习题  101
第6章 使用OpenMP进行共享存储并行编程  103
6.1 OpenMP简介  103
6.1.1 并行执行  103
6.1.2 数据作用域  105
6.1.3 循环的OpenMP工作共享  106
6.1.4 同步  107
6.1.5 归约  108
6.1.6 循环调度  109
6.1.7 任务  110
6.1.8 其他方面  111
6.2 案例分析:OpenMP并行实现Jacobi算法  112
6.3 高级OpenMP:波前并行化  114
习题  116
第7章 高效OpenMP编程  119
7.1 OpenMP程序性能分析  119
7.2 性能缺陷  120
7.2.1 减轻Open MP共享区开销  121
7.2.2 决定短循环的OpenMP开销  126
7.2.3 串行化  128
7.2.4 伪共享  129
7.3 案例分析:并行稀疏矩阵向量乘  130
习题  133
第8章 ccNUMA体系结构的局部性优化  134
8.1 ccNUMA的局部访问  134
8.1.1 首次访问方式分配页面  135
8.1.2 通过其他方式的局部性访问  137
8.2 案例分析:稀疏MVM的ccNUMA优化  138
8.3 页面布局缺陷  139
8.3.1 非NUMA友好的OpenMP调度  139
8.3.2 文件系统高速缓存  140
8.4 C++中的ccNUMA问题  142
8.4.1 对象数组  142
8.4.2 标准模板库  144
习题  146
第9章 使用MPI进行分布式存储并行内存编程  147
9.1 消息传递  147
9.2 MPI简介  148
9.2.1 一个简单例子  148
9.2.2 消息和点对点通信  150
9.2.3 集合通信  154
9.2.4 非阻塞点对点通信  157
9.2.5 虚拟拓扑  160
9.3 实例:Jacobi解法器的MPI并行  162
9.3.1 MPI实现  162
9.3.2 性能特征  167
习题  170
第10章 高效MPI编程  171
10.1 MPI性能工具  171
10.2 通信参数  174
10.3 同步、串行化和竞争  174
10.3.1 隐式串行化和同步  174
10.3.2 竞争  176
10.4 降低通信开销  177
10.4.1 最优化区域分解  177
10.4.2 聚合消息  180
10.4.3 非阻塞与异步通信  181
10.4.4 集合通信  183
10.5 理解节点内点对点通信  184
习题  189
第11章 MPI与OpenMP混合编程  190
11.1 基本MPI/OpenMP混合编程模型  190
11.1.1 向量模式实现  191
11.1.2 任务模式实现  191
11.1.3 案例分析:混合Jacobi解法器  192
11.2 MPI线程交互分类  193
11.3 混合分解及映射  195
11.3.1 每个节点一个MPI进程  195
11.3.2 每个插槽一个MPI进程  196
11.3.3 每个插槽多个MPI进程  196
11.4 混合编程的优势和劣势  197
11.4.1 改善的收敛速度  197
11.4.2 共享高速缓存中的数据重用  197
11.4.3 利用额外级别的并行性  198
11.4.4 重叠MPI通信和计算  198
11.4.5 减少MPI开销  198
11.4.6 多级别开销  198
11.4.7 向量模式下批量同步通信  198
附录A 多核环境中的拓扑和亲缘性  199
A.1 拓扑  200
A.2 线程和进程分布  201
A.2.1 外部亲缘性工具  201
A.2.2 程序控制亲缘性  203
A.3 非页面首次访问分配策略  204
附录B 习题解答  206
参考文献  221
索引  232

教学资源推荐
作者: [美]雷克斯·佩奇((Rex Page)[美] 鲁本·冈博亚(Ruben Gamboa) 著
作者: 杨绍华 周琳 编著
参考读物推荐
作者: [美]马修·贾斯蒂斯(Matthew Justice) 著
作者: [美] 菲利普 G.伊佐特 (Phillip G.Ezolt) 著
作者: 华诚科技 编著
作者: [阿联酋] 杰拉西莫斯?巴拉斯(Gerassimos Barlas) 著