资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,基于多核的程序优化技术,多核架构及编程技术,基于多核的程序优化技术多核架构及编程技术,内 容,1、编译回顾,2、基于多核的程序优化技术,内 容,基于多核程序优化技术课件,基于多核程序优化技术课件,代码优化,代码优化:,指编译程序为了生成高质量的目标程序而做的各种加工和处理。,目的:提高目标代码运行效率,时间效率:减少运行时间,空间效率:减少内存容量,原则:,严格遵循“不能改变原有程序语义”原则。,代码优化代码优化:,优化的分类,从优化的层次,与机器是否有关:,独立于机器的优化,与目标机无关的优化,通常是在中间代码上进行的优化。,与机器有关的优化:,充分利用系统资源(指令系统,寄存器资源)。,从优化涉及的范围,可以分为:,局部优化:,是指在基本块内进行的优化。,循环优化:,对循环语句所生成的中间代码序列上所进行的优化。,全局优化:,跨越多个基本块的全局范围内的优化。,优化的分类从优化的层次,与机器是否有关:,并行编译基础,并行编译系统:,就是能够处理并行程序设计语言,能够实现串行程序并行化,具有并行优化能力的编译系统。,并行编译技术的主要内容:,串行程序的向量化和并行化。,并行编译基础并行编译系统:,向量化:,将串行程序中可向量化部分改写成用向量运算表示的等价程序;,其编译技术已趋成熟,并行化:,将串行程序中可并行化部分改写成在多处理机上并行执行的等价程序;,难度大,涉及数据的私有化、分布和通信,以及并行任务划分等问题。,借助于OpenMP。,向量化:,基于多核的程序优化技术,基于多核的程序优化技术,并行编程模型,并行语言,并行编译器,并行语言运行时,可伸缩的执行环境,多核处理器。,多核软件栈,并行编程模型多核软件栈,普遍并行编程,多核编程和编译是一重大挑战:,一般的程序员经常需要为多核处理器编程,即使对专家来说,并行编程也是一件难事。,如何使并行编程变得容易?,并发控制,并行化。,普遍并行编程多核编程和编译是一重大挑战:,并发控制,通常会使用锁。锁不可取。,锁存在根本性的问题:,容易出错:,忽略关键锁、死锁、有限级倒置、护送问题。,难以优化性能:,粗粒度锁会妨碍并行,细粒锁会导致高开销。锁的程序/库线程不能随意构成。,事务型内存:,基本的原子结构:HPCS语言(Fortress、X10、chapel)提供原子结构以取代锁。,并发控制通常会使用锁。锁不可取。,多线程的两种方法,本地线程(Native Threading),OpenMP线程,多线程的两种方法本地线程(Native Threading),优化关键,选择关键的代码(,费时间的代码,)进行多线程设计。,如果不能确定程序的主要计算部分,(?),借助于Intel VTune Analyzers来进行程序分析。,优化关键选择关键的代码(费时间的代码)进行多线程设计。,一些要点,建议使用Intel C+编译器进行编译程序。,使用Intel Math Kernel Library(Intel MKL),Intel MKL 函数库中提供了VML 函数,这些函数可以对超越函数(sin,cos,exp,log等)进行优化。提高程序性能。,现在串行上要调试通过,然后再进行多核多线程的编程工作。,一些要点建议使用Intel C+编译器进行编译程序。,多线程后,用Intel线程监测器进行查找线程错误:资源竞争、线程死锁等问题。,用Intel Thread Profiler工具开定位程序中负载不失衡或开销过大的问题。,多线程后,用Intel线程监测器进行查找线程错误:资源竞争、,首先用OpenMP进行并行编程。,前面讲过,这里不再详细描述。,首先用OpenMP进行并行编程。,VTune Performance Analyzer 6.0,VTune Performance Analyzer 6.,优化过程Intel VTune,TM,的使用,优化过程Intel VTuneTM的使用,有助于:,找到算法的瓶颈,由数据规划引起的瓶颈,应用结构的瓶颈,系统级以及硬件的瓶颈,有助于:找到算法的瓶颈,术语热点(hotspot),hotspot是你的代码花费很长时间执行的区域。,通过定位hotspot,VTune性能分析工具可以帮助你分析应用程序的性能。,但是简单的知道hotspot的位置是不够的,你必须知道什么导致hotspot的产生,怎样改进,通过对热区的进一步分析,你可以跟踪关键的函数调用,监控特殊的处理器事件,如cache miss,术语热点(hotspot)hotspot是你的代码花费很长,Hotspot与Bottleneck的区别,Bottleneck,是系统中性能受到约束的位置,VTune Performance Analyzer,帮助你找到并删除,Bottlenecks,.,找到软件,Hotspots,是一个分析方法,帮助你定位,Bottlenecks,.,Hotspot与Bottleneck的区别Bottlenec,性能优化方法,性能优化方法,有三种数据收集器,Sampling 取样,call graph 调用曲线图,counter monitor 计数器监控器,有三种数据收集器Sampling 取样,两种跟踪位置的方法,Problem:,我需要知道你在哪花费了多长时间,Statistical Solution:,我每30分钟呼叫你,Instrumentation Solution:,每个地方有一个特殊的电话点,你每到一个地点向我报告,两种跟踪位置的方法Problem:,第一种方法:我固定时间间隔给你电话,优点:,低开销:没有太多的中断,没有建站点的开销,无论你在那里都能精确定位,缺点:,如果你的双手拿满东西,我必须等待,你可能第一次没有听到铃声,所以我不能精确确定我呼叫你时,你在那里,由于你不经常去有一些地方,我可能根本不知道你去过,第一种方法:我固定时间间隔给你电话优点:由于你不经常去有一些,第二种方法:当你到了,你打电话给我。,优点:,你到达新的地方我能立刻知道,我知道你在一个地方呆了多长时间,我知道你到达同一个地方多少次,缺点:,不知道你在街道内做了什么,粒度:站点,浪费了大量时间打电话,建立站点扩大了街道空间,第二种方法:当你到了,你打电话给我。优点:,如何识别热点?,Sampling Data Collector,The Statistical Solution,描述执行的一个侧面(柱状图),低开销,Call Graph Data Collector,The Instrumentation Solution,函数的时间信息,函数调用者和被调用者的关系,比sampling的开销高,如何识别热点?Sampling Data Collector,三种性能监控方式的比较,三种性能监控方式的比较,VTune,Projects(项目),什么是,Project,?,Project,由一个或多个,Activities,组成,什么是,Activity,?,包含你应用程序的信息和希望运行的数据收集器信息。,VTune Projects(项目)什么是 Project,项目的组织如下,My Cool Project 1,Activity 1(Call Graph,),Call Graph Results-3 Apr,2007,3:30 PM,Call Graph Results-4 Apr,2007,3:30 PM,Activity 2(Counter Monitor),Counter Monitor Results-3 Apr,2007,4:30 PM,Activity 3(Sampling),Sampling Results-5 Apr,2007,8:30 AM,Run o,Clockticks,Instructions Retired,Run 1,Mispredicted Branches Retired,项目的组织如下My Cool Project 1,取样,打断处理器的执行,获得执行上下文,中断可以是周期性的,如每秒1,000次采样,采样的触发 Event Based Sampling(EBS).,采样事件:处理器相关事件,如 L2 Cache Misses,Branch Mispredictions,Floating-point instructions retired,etc.,取样打断处理器的执行,获得执行上下文,举例:gzip 采样分析,介绍 EBS 与 Sampling 用户界面,gzip是一个开放源压缩程序文件,举例:gzip 采样分析介绍 EBS 与 Sampling,选择一个新的项目,选择一个新的项目,选择“Sampling Wizard”,点击 OK,选择“Sampling Wizard”,点击 OK,选择Win32*/Win64*/Linux*Profiling 选择按钮,然后确定,选择Win32*/Win64*/Linux*Profili,记住:每个活动都有自己的应用/模块轮廓(profile),打开应用程序:gzip.exe,命令行选项:-f testfile.dat,选中 Modify default configuration,点击 Finish,记住:每个活动都有自己的应用/模块轮廓(profile)打开,修改采样行为,Select the Sampling check box.,Click on Configure,修改采样行为Select the Sampling chec,Click OK to run the activity,Click OK to run the activity,根据采样次数找到hotspot,根据采样次数找到hotspot,调用图,根据总时间找到关键路径,调用图根据总时间找到关键路径,计数器监视,根据占处理器时间找hotspot,计数器监视根据占处理器时间找hotspot,修改代码进行优化,修改代码进行优化,
展开阅读全文