《多核与GPU编程:工具、方法及实践》----1.2 并行计算机的分类

简介: 使用多种资源获取更高性能并不是最新的技术,这个技术最早开始于20世纪60年代。因此,定义一种描述并行计算机架构特征的方法是非常重要的。1966年,Michael Flynn引入了一种计算机体系结构分类方法:根据能够并发处理的数据量和同时执行的不同指令数目进行分类。

本节书摘来自华章出版社《多核与GPU编程:工具、方法及实践》一书中的第1章,第1.2节, 作 者 Multicore and GPU Programming: An Integrated Approach[阿联酋]杰拉西莫斯·巴拉斯(Gerassimos Barlas) 著,张云泉 贾海鹏 李士刚 袁良 等译, 更多章节内容可以访问云栖社区“华章计算机”公众号查看。

1.2 并行计算机的分类

使用多种资源获取更高性能并不是最新的技术,这个技术最早开始于20世纪60年代。因此,定义一种描述并行计算机架构特征的方法是非常重要的。1966年,Michael Flynn引入了一种计算机体系结构分类方法:根据能够并发处理的数据量和同时执行的不同指令数目进行分类。根据这两个条件,计算机体系结构可以分为四类:

单指令单数据(Single Instruction Single Data,SISD):只能同时执行一条指令并处理一个数据的串行计算机。出人意料的是,绝大多数现代CPU都不属于这个类别。甚至现代微控制器都是多核配置,每个核都可以认为是一个SISD机器。

单指令多数据(Single Instruction Multiple Data,SIMD):一条指令可以处理多个数据的计算机。最早出现的这类机器是向量处理器。GPU的流多处理器(Streaming Multiprocessor,SM;针对 NVIDIA)和SIMD单元(针对 AMD)遵循这样的设计。

多指令单数据(Multiple Instructions Single Data,MISD):这好像是一个“怪胎”,多条指令如何处理相同数据呢?正常情况下,这是没有意义的。然而,当系统(军事或航天应用中)需要容错时,数据被多个机器处理,并根据多数原则做出最终决定。

多指令多数据(Multiple Instructions Multiple Data ,MIMD):最通用的类别。多核计算机(包括GPU)都遵循这种设计。GPU由多个SM/SIMD单元组成,每个SM/SIMD单元都能够运行自己的程序。所以,即使单个SM属于SIMD类别,多个SM集成起来的工作方式也是MIMD。

这个分类方法经过细化,又添加了几个子类(特别是MIMD),如图1-2所示。MIMD分成两个子类。


476c5409faf4ef0e486b97027497cc88fa495a8b

共享内存MIMD:具有共享存储空间的计算机体系架构。一方面,共享内存在最小化额外开销的前提下,简化了所有CPU间的操作;另一方面,共享内存限制了系统的可扩展性。解决这个问题的一个方法就是划分内存,为每个CPU分配一块独立的内存。这样,CPU不仅能以较高的性能访问本地内存,还能以较低的性能访问属于其他CPU的非本地内存。值得注意的是,内存划分不会影响寻址机制。这个设计称为非一致性内存访问(Non-Uniform Memory Access,NUMA),并允许共享内存计算机扩展到几十个CPU。

分布式内存或者无共享MIMD:由通过消息交换进行通信的CPU构成的计算机。虽然这种架构的通信开销非常高,但是由于没有相互竞争的资源,所以这种架构的可扩展性非常好(除了空间和能源限制之外,几乎没有其他限制因素)。

共享内存计算机又可进一步划分为主/从(master-worker)和对称多处理器(Symmetric Multiprocessing,SMP)两类。在SMP架构中,所有CPU都是等价的,并且能够执行包括系统软件和应用软件在内的任意程序。在主/从架构中,一些处理器专门用来执行特定程序,我们可以将这些处理器定义为协处理器。尽管在绝大多数高性能GPU计算平台上,CPU和GPU都拥有独立内存,但是也可认为配备GPU的计算平台属于这一类别。从严格意义上说,尽管最新的驱动软件尽可能地隐藏了数据在两块内存上移动的复杂性,但是GPU计算平台并不是一个标准的共享内存平台。

配备Intel Xeon Phi协处理器的计算平台也存在类似问题。Intel Xeon Phi协处理器有61个Pentium计算核心,可以看做一个共享内存的MIMD系统。Intel Xeon Phi协处理器安装在PCIe卡上。尽管它和主机CPU都位于同一个机柜/机架上,但是分布式内存MIMD架构应该是CPU/协处理器系统的最合适分类。

相关实践学习
基于阿里云DeepGPU实例,用AI画唯美国风少女
本实验基于阿里云DeepGPU实例,使用aiacctorch加速stable-diffusion-webui,用AI画唯美国风少女,可提升性能至高至原性能的2.6倍。
相关文章
|
4月前
|
人工智能 弹性计算 PyTorch
【Hello AI】神行工具包(DeepGPU)-GPU计算服务增强工具集合
神行工具包(DeepGPU)是阿里云专门为GPU云服务器搭配的GPU计算服务增强工具集合,旨在帮助开发者在GPU云服务器上更快速地构建企业级服务能力
129539 3
|
5月前
|
并行计算 TensorFlow 调度
推荐场景GPU优化的探索与实践:CUDA Graph与多流并行的比较与分析
RTP 系统(即 Rank Service),是一个面向搜索和推荐的 ranking 需求,支持多种模型的在线 inference 服务,是阿里智能引擎团队沉淀多年的技术产品。今年,团队在推荐场景的GPU性能优化上又做了新尝试——在RTP上集成了Multi Stream,改变了TensorFlow的单流机制,让多流的执行并行,作为增加GPU并行度的另一种选择。本文详细介绍与比较了CUDA Graph与多流并行这两个方案,以及团队的实践成果与心得。
|
Unix 异构计算 Windows
带你读《基于CUDA的GPU并行程序开发指南》之一:CPU并行编程概述
本书旨在帮助读者了解与基于CUDA的并行编程技术有关的基本概念,并掌握实用c语言进行GPU高性能编程的相关技巧。本书第一部分通过CPU多线程编程解释了并行计算,使得没有太多并行计算基础的读者也能毫无阻碍地进入CUDA天地;第二部分重点介绍了基于CUDA的GPU大规模并行程序的开发与实现,并通过大量的性能分析帮助读者理解如何开发一个好的GPU并行程序以及GPU架构对程序性能的影响;本书的第三部分介绍了一些常用的CUDA库。
|
2月前
|
机器学习/深度学习 并行计算 PyTorch
【多GPU炼丹-绝对有用】PyTorch多GPU并行训练:深度解析与实战代码指南
本文介绍了PyTorch中利用多GPU进行深度学习的三种策略:数据并行、模型并行和两者结合。通过`DataParallel`实现数据拆分、模型不拆分,将数据批次在不同GPU上处理;数据不拆分、模型拆分则将模型组件分配到不同GPU,适用于复杂模型;数据和模型都拆分,适合大型模型,使用`DistributedDataParallel`结合`torch.distributed`进行分布式训练。代码示例展示了如何在实践中应用这些策略。
98 2
【多GPU炼丹-绝对有用】PyTorch多GPU并行训练:深度解析与实战代码指南
|
3月前
|
并行计算 API 开发工具
【GPU】GPU 硬件与 CUDA 程序开发工具
【GPU】GPU 硬件与 CUDA 程序开发工具
43 0
|
3月前
|
机器学习/深度学习 并行计算 流计算
【GPU】GPU CUDA 编程的基本原理是什么?
【GPU】GPU CUDA 编程的基本原理是什么?
51 0
|
5月前
|
人工智能 并行计算 API
极智AI | 谈谈GPU并行推理的几个方式
大家好,我是极智视界,本文主要聊一下 GPU 并行推理的几个方式。
263 0
|
5月前
|
存储 人工智能 缓存
探索AIGC未来:CPU源码优化、多GPU编程与中国算力瓶颈与发展
近年来,AIGC的技术取得了长足的进步,其中最为重要的技术之一是基于源代码的CPU调优,可以有效地提高人工智能模型的训练速度和效率,从而加快了人工智能的应用进程。同时,多GPU编程技术也在不断发展,大大提高人工智能模型的计算能力,更好地满足实际应用的需求。 本文将分析AIGC的最新进展,深入探讨以上话题,以及中国算力产业的瓶颈和趋势。
|
缓存 openCL 算法
关于实现Halcon算法加速的基础知识(2)(多核并行/GPU)
关于实现Halcon算法加速的基础知识(多核并行/GPU)
2603 0
关于实现Halcon算法加速的基础知识(2)(多核并行/GPU)
|
11月前
|
机器学习/深度学习 程序员 异构计算
【深度学习工具】Python代码查看GPU资源使用情况
在训练神经网络模型时候,有时候我们想查看GPU资源的使用情况,如果使用Ctrl+Shift+Esc不太符合我们程序员的风格😅,如果可以使用代码查看GPU使用情况就比较Nice。话不多说,直接上代码。
579 0