第一章 多核概述 使用多核了吗? 摩尔定律——芯片的晶体管数量每一年半左右增长一倍。 处理器性能不断提高主要基于两个原因: 第一章 多核概述 使用多核了吗? 摩尔定律——芯片的晶体管数量每一年半左右增长一倍。 处理器性能不断提高主要基于两个原因: 半导体工艺的逐渐进步 ; 处理器体系结构的不断发展 。 处理器性能提高的途径: 工艺和电路技术的发展使得处理器性能提高; 体系结构的发展使得处理器性能提高; 编译技术的发展使得处理器性能提高。
第一章 多核概述 多核的认识 多核程序设计开发工作由“先进”到“常规普及” 第一章 多核概述 多核的认识 多核即在一个单芯片上面集成两个甚至更多个处理器内核,其中每个内核都有自己的逻辑单元、控制单元、中断控制器、运算单元,一级cache、二级cache共享或独有,其部件的完整性和单核处理器内核相比完全一致。 双核”的概念最早是由IBM、HP、Sun等支持RISC架构的高端服务器厂商提出的,主要运用于服务器上。 多核程序设计开发工作由“先进”到“常规普及” 目前市场上的服务器、工作站、PC台式机、笔记本中的CPU都是多核(双、四),intel实验室80核; CPU主频很难提高,主要通过多核来提高计算机性能,如果我们不能很好的利用多核,那么就很难提高我们程序的性能; 为什么不能提高主频: CPU的功耗增加; 节能绿色环保的理念。
第一章 多核概述 80核处理器: 2007-02-11 核心面积275平方毫米 主频3.16GHz 电压0.95V 数据带宽1.62Tb/s 第一章 多核概述 80核处理器: 2007-02-11 核心面积275平方毫米 主频3.16GHz 电压0.95V 数据带宽1.62Tb/s 浮点运算能力1.01TFlops 相当于1万颗10年前的Pentium Pro 功耗不过62W 比core 2 duo还低 是四核心Xeon X5355 2.66GHz的大约一半
第一章 多核概述 本课程主要讲解: 多核体系结构的基础知识; 并行程序基本概念以及调试和优化技术; 多线程程序设计基础知识; 第一章 多核概述 本课程主要讲解: 多核体系结构的基础知识; 并行程序基本概念以及调试和优化技术; 多线程程序设计基础知识; 多线程编程及调试; OpenMP多线程编程以及性能优化; 一些常见的并行程序设计问题的解决; MPI编程及性能优化; Intel多核软件工具的介绍。
第一章 多核概述 单核与多核? 多核不是计算机速度更快了,而是它更能干了; 第一章 多核概述 单核与多核? 多核不是计算机速度更快了,而是它更能干了; 单核内的多线程技术是串行的,即并发的,多个线程交替执行,在同一时刻只能有一个线程执行;多核内的多线程是并行的,即并行性,多个线程同时执行,同一时刻可以有多个线程执行; 并行(parallel):活动线程在不同的硬件资源或者处理单元上同时执行,多个线程在任何时间点都同时执行; 并发(concurrent):线程在同一个硬件资源上交替执行的过程,所有活动线程在某段时间内同时执行的状态,但是在某个给定的时刻都只有一个线程在执行 。
第一章 多核概述 单核平台的多线程和多核平台的多线程有什么不同? 多核与多处理器(多CPU)的区别: 第一章 多核概述 单核平台的多线程和多核平台的多线程有什么不同? 单核平台上的多线程为了竞争CPU资源需要挂起,多核平台就不需要这样了,多核提供了一种优化应用程序的渠道,那就是通过仔细分配加载到各线程上的工作负载就能够得到性能上的提升。并且还可以对应用程序代码加以优化,使其能够更加充分的使用多个处理器资源,进而达到提升应用程序性能的目的; 单核与多核采用相同的线程优先级会导致不同的程序行为. 多核与多处理器(多CPU)的区别: 多核是指一个处理器芯片有多个处理器核心,他们之间通过CPU内部总线进行通讯; 多处理器是指简单的多个处理器芯片工作在同一个系统上,多个处理器之间的通讯是通过主板上的总线进行的。
第一章 多核概述 多核技术是处理器发展的必然趋势: 半导体工艺技术的飞速进步 Pollack规则 能耗 设计成本
第一章 多核概述 半导体工艺技术的飞速进步 通用微处理器的主频已经突破了3GHz 数据宽度也达到64位 45nm工艺的微处理器已经批量生产 第一章 多核概述 半导体工艺技术的飞速进步 通用微处理器的主频已经突破了3GHz 数据宽度也达到64位 45nm工艺的微处理器已经批量生产 32nm工艺以下的微处理器也已问世 芯片上集成的晶体管数目已经超过10亿个
第一章 多核概述 Pollack规则: 英特尔微处理器实验室主任Fred Pollack :从386起,英特尔每一新架构需要两到三倍的晶片面积,而性能只提升1.4到1.7倍。 简言之,性能的提升与复杂性的平方根成比例。 两代处理器,性能每提升一倍,复杂性便增加4倍。 如一个处理器的硬件逻辑提高一倍,至多能提高性能40%。采用两个简单处理器构成一个相同硬件规模的双核处理器,可获得70%~80%的性能提升。
第一章 多核概述 能耗: 工艺技术的发展和芯片复杂性的增加,芯片的发热现象日益突出。 单核高频率的处理器功耗太大,发热量太大 第一章 多核概述 能耗: 工艺技术的发展和芯片复杂性的增加,芯片的发热现象日益突出。 单核高频率的处理器功耗太大,发热量太大 多核可以提高性能,且能较好解决功耗问题 多核处理器可以采用降低功耗的技术:如可以关闭一些处理器
第一章 多核概述
第一章 多核概述 设计成本: 处理器结构复杂性的不断提高,人力成本的不断攀升,设计成本随时间呈线性甚至超线性的增长 第一章 多核概述 设计成本: 处理器结构复杂性的不断提高,人力成本的不断攀升,设计成本随时间呈线性甚至超线性的增长 研发高频率处理器的成本越来越高 Intel发布3.8GHz的产品,宣布停止4GHz的产品计划。 AMD频率超过2GHz以后无法大幅度提升
第一章 多核概述 多核对不同领域软件开发的影响: 传统的科学计算: 服务器软件: 桌面软件: 原有软件大都是并行的 第一章 多核概述 多核对不同领域软件开发的影响: 传统的科学计算: 原有软件大都是并行的 多核提供了更高性能的执行平台 需要做的是针对多核进行优化,多核应用不存在困难 服务器软件: 业务特征是并发的,应用具有天然的并发性 多核提供了一个高性能计算平台, 面临挑战不大 桌面软件: 原有大部分程序是串行的 需要很好的并行编程模型和开发环境,挑战很大
第一章 多核概述 超线程技术(Hyper-Threading,HT) 第一章 多核概述 超线程技术(Hyper-Threading,HT) Intel公司所实现的同时多线程技术,同时多线程技术(Simultaneous Multi-Threading, SMT)是通过复制处理器体系结构状态信息来创建逻辑处理器或者称为线程; 只有一个实际的物理处理器,但是从软件的角度来看,存在多个逻辑处理器。超线程技术是通过延迟隐藏的方法提高了处理器的性能,从本质上讲,就是多个线程共享一个执行核,因此,超线程技术中的线程执行并不是真正意义上的并行; 采用超线程技术所获得的性能提升将会随着应用程序以及硬件平台的不同而参差不齐,超线程技术评为失败的技术。
1.1 微处理器发展史 1945年,世界上第一台全自动电子数字计算机ENIAC 计算机的发展按照硬件工艺可以分为: 采用电子管,作为基本原件,每秒可进行5000次加减乘除占地172平米,重30吨,耗电150千瓦 计算机的发展按照硬件工艺可以分为: 第一代(1946~1958):电子管数字计算机; 第二代(1958~1964):晶体管数字计算机; 第三代(1964~1971):集成电路数字计算机; 第四代(1971年以后):大规模集成电路数字计算机
1.1 微处理器发展史 微处理器发展大体经历以下几个过程: 第一代微处理器(4位):英特尔4004,8008 第二代微处理器(8位):采用NMOS工艺,采用汇编 语言、BASIC、Fortran编程,使用单用户操作系统。如英特尔8080,8085 第三代微处理器(16位):以1978年英特尔的8086出现为起点 第四代微处理器(32位):运算模式包括实模式、保护模式和“虚拟86”。英特尔80386 DX, 80486, Pentium 4… 2005年,Intel首发基于双核技术的Intel Pentium D处理器,正式揭开x86处理器多核时代。x86处理器多核技术的发展,人们也在进行并行化的探索,又出现了并行计算机体系结构
并行计算机 由一组处理单元组成,这组处理单元通过相互之间的通信与协作,以更快的速度共同完成一项大规模的计算任务。 两个最主要的组成部分 60年代初期,晶体管以及磁芯存储器的出现,处理单元变得越来越小,存储器也更加小巧和廉价。出现规模不大的共享存储多处理器系统,即大型主机(Mainframe); 60 年代末期,同一个处理器开始设置多个功能相同的功能单元,流水线技术也出现了,在处理器内部的应用大大提高了并行计算机系统的性能。 两个最主要的组成部分 计算节点 节点间的通信与协作机制
并行计算机 Flynn分类法: Flynn根据指令流和数据流的不同组织方式,把计算机系统的结构分为以下四类: 单指令流单数据流(Single Instruction stream Single Data stream, SISD) 单指令流多数据流(Single Instruction stream Multiple Data stream, SIMD) 多指令流单数据流(Multiple Instruction stream Single Data stream, MISD) 多指令流多数据流(Multiple Instruction stream Multiple Data stream, MIMD) ——指令流:机器执行的指令序列;数据流:指令流调用的数据序列,包括输入数据和中间结果。
并行计算机 Flynn分类法:
并行计算机 单指令流单数据流 ——传统的串行计算机,硬件不支持并行,指令串行执行,在某个时钟周期内,CPU只能处理一个数据流,早期的计算机是这样的平台。 单指令流多数据流采用一个指令流同时处理多个数据流。此类机器在数字信号处理、图像处理以及多媒体信息处理等许多领域应用都非常有效。 多指令流单数据流采用多个指令流同时对一个数据流进行处理。多个指令流处理多个数据流才是更加有效的处理方式,因此,多指令流单数据流并行计算机一般只是作为一种理论模型出现,而并没有投入到实际应用当中。 多指令流多数据流能够同时执行多个指令流,这些指令流分别对不同的数据流进行操作。多指令流多数据流是目前最流行的并行计算平台。
1.2 并行计算机结构分类 分布式存储器的SIMD处理机 向量超级计算机(共享式存储器SIMD) 对称多处理器(SMP) 含有多个同样结构的处理单元(PE),通过寻径网络以一定方式互相连接。每个PE有各自的本地存储器(LM) 向量超级计算机(共享式存储器SIMD) 集中设置存储器,共享的多个并行存储器通过对准网络与各处理单元PE相连。在处理单元数目不太大的情况下很理想 对称多处理器(SMP) SMP是指在一个计算机上汇集了一组处理器,各处理器之间共享内存子系统以及总线结构 并行向量处理机(PVP) 在并行向量处理机中有少量专门定制的向量处理器。每个向量处理器有很高的处理能力,并行向量处理机通过向量处理和多个向量处理器并行处理两条途径来提高处理能力 集群计算机 是一种并行或分布式处理系统,有很多连接在一起的独立计算机组成,像一个单独集成的计算机资源一样协同工作
1.3 片上多核处理器 多核处理器始于IBM(2001) 片上多处理器的概念: 按计算内核的对等与否,CMP可分为同构多核和异构多核 双核RISC处理器Power 4,将两个64位Power PC处理器内核集成在同一颗芯片上,就成为了首款采用多核设计的服务器处理器 片上多处理器的概念: 片上多核处理器(Chip Multi-Processor,CMP)就是将多个计算内核集成在一个处理器芯片中,从而提高计算能力。 按计算内核的对等与否,CMP可分为同构多核和异构多核 同构内核:计算内核相同,地位对等 ; 异构内核 :计算内核不同,地位不对等 。
1.3 片上多核处理器 CPU核心数据共享与同步主要有两种机制: 给程序开发者带来的挑战、机遇 总线共享Cache结构:每个CPU内核拥有共享的二级或三级Cache,用于保存比较常用的数据,并通过连接核心的总线进行通信; 基于片上互连的结构:每个CPU核心具有独立的处理单元和Cache,各个CPU核心通过交叉开关或片上网络等方式连接在一起。 给程序开发者带来的挑战、机遇
1.3 处理器结构
1.3 处理器结构
1.3 处理器结构
1.3 处理器结构
1.3 处理器结构
固件对多核的支持 固件 是一种嵌入到硬件设备中的软件。它通常烧写在flash等介质中,可以被当作一个二进制映像文件由用户从硬件设备中调用; 是在集成电路只读存储器中的计算机程序,是可擦写可编程芯片,其上的程序可以通过专门的外部硬件进行修改,但是不能被一般的应用程序改动。
操作系统对多核的支持 进程的分配、调度 进程的分配将进程分配到合理的物理内核上,不同内核在共享性和历史运行情况下都是不同的,有的物理内核能够共享二级缓存、有的不共享,如果将有数据共享的进程分配给有共享二级缓存的核上,将会大大提升性能; 进程调度涉及到很多问题,例如负载均衡、实时性、cache一致性等等。 在多核情况下,是有很多核可以被使用,如果系统中有多个进程需要分配,则可以将它们均匀的分配到各个核,或是一起分配到一个核,或者按照一定的算法进行分配。
操作系统对多核的支持 多核调度算法: 对任务分配进行优化 对任务的共享数据优化 对任务的负载均衡优化 是同一应用程序的任务尽量在一个核上执行,以便达到共享数据的任务能够尽量在一个核上进行,而共享数据量少或没有的任务尽量在不同核上进行。这样做的目的可以显著的降低cache的缺失率,进而在很大程度上提高了系统的整体性能 对任务的共享数据优化 由于CMP体系结构共享二级缓存,可以考虑改变任务在内存中的数据分布,使任务在执行时尽量增加二级缓存的命中率 对任务的负载均衡优化 当任务在调度时,出现了负载不均衡,考虑将较忙处理器中与其他任务最不相关的任务迁移,已达到数据的冲突量减小
操作系统对多核的支持 虽然多核近两年才兴起,但是操作系统对多核的支持并不难解决,传统的通用的操作系统都是支持多任务执行的,对单核处理器是通过分时处理的,即把CPU的运算时间划分成长短基本相同的时间片,轮流分配给各个任务,来实现多任务的,由于轮换的比较快,所以人们感觉不到轮换。
思考题 1、多核平台下,程序设计采用多线程的好处?为什么? 2、单核平台下,程序设计会在什么情况下采用多线程? 3、你希望通过本课程的学习获得什么收获?