基于多核的程序优化技术多核架构及编程技术内容•1、编译回顾•2、基于多核的程序优化技术编译回顾•什么是编译?–用高级语言编制的程序,计算机不能立即执行,必须通过一个“翻译程序”加工,转化为与其等价的机器语言程序,机器才能执行。编译过程是指将高级语言程序翻译为等价的目标程序的过程。•编译的作用?源程序编译程序源程序的中间形式输入数据解释程序输出数据词法分析语法分析语义分析、生成中间代码代码优化生成目标程序编译过程的5个基本阶段:编译过程是指将高级语言程序翻译为等价的目标程序的过程。代码优化•代码优化:–指编译程序为了生成高质量的目标程序而做的各种加工和处理。•目的:提高目标代码运行效率–时间效率:减少运行时间–空间效率:减少内存容量•原则:–严格遵循“不能改变原有程序语义”原则。优化的分类•从优化的层次,与机器是否有关:–独立于机器的优化•与目标机无关的优化,通常是在中间代码上进行的优化。–与机器有关的优化:•充分利用系统资源(指令系统,寄存器资源)。•从优化涉及的范围,可以分为:–局部优化:•是指在基本块内进行的优化。–循环优化:•对循环语句所生成的中间代码序列上所进行的优化。–全局优化:•跨越多个基本块的全局范围内的优化。并行编译基础•并行编译系统:–就是能够处理并行程序设计语言,能够实现串行程序并行化,具有并行优化能力的编译系统。•并行编译技术的主要内容:–串行程序的向量化和并行化。•向量化:–将串行程序中可向量化部分改写成用向量运算表示的等价程序;•其编译技术已趋成熟•并行化:–将串行程序中可并行化部分改写成在多处理机上并行执行的等价程序;•难度大,涉及数据的私有化、分布和通信,以及并行任务划分等问题。–借助于OpenMP。基于多核的程序优化技术•并行编程模型•并行语言•并行编译器•并行语言运行时•可伸缩的执行环境•多核处理器。多核软件栈普遍并行编程•多核编程和编译是一重大挑战:–一般的程序员经常需要为多核处理器编程,即使对专家来说,并行编程也是一件难事。•如何使并行编程变得容易?–并发控制–并行化。并发控制•通常会使用锁。——锁不可取。•锁存在根本性的问题:–容易出错:•忽略关键锁、死锁、有限级倒置、护送问题。–难以优化性能:•粗粒度锁会妨碍并行,细粒锁会导致高开销。锁的程序/库线程不能随意构成。•事务型内存:–基本的原子结构:HPCS语言(Fortress、X10、chapel)提供原子结构以取代锁。多线程的两种方法•本地线程(NativeThreading)•OpenMP线程优化关键•选择关键的代码(费时间的代码)进行多线程设计。•如果不能确定程序的主要计算部分(?)–借助于Intel®VTune™Analyzers来进行程序分析。一些要点•建议使用IntelC++编译器进行编译程序。•使用Intel®MathKernelLibrary(IntelMKL)–IntelMKL函数库中提供了VML函数,这些函数可以对超越函数(sin,cos,exp,log等)进行优化。提高程序性能。•现在串行上要调试通过,然后再进行多核多线程的编程工作。•多线程后,用Intel线程监测器进行查找线程错误:资源竞争、线程死锁等问题。•用IntelThreadProfiler工具开定位程序中负载不失衡或开销过大的问题。•首先用OpenMP进行并行编程。–前面讲过,这里不再详细描述。VTune™PerformanceAnalyzer6.0优化过程-IntelVTuneTM的使用有助于:•找到算法的瓶颈•由数据规划引起的瓶颈•应用结构的瓶颈•系统级以及硬件的瓶颈术语-热点(hotspot)•hotspot是你的代码花费很长时间执行的区域。•通过定位hotspot,VTune性能分析工具可以帮助你分析应用程序的性能。•但是简单的知道hotspot的位置是不够的,你必须知道什么导致hotspot的产生,怎样改进•通过对热区的进一步分析,你可以跟踪关键的函数调用,监控特殊的处理器事件,如cachemissHotspot与Bottleneck的区别•Bottleneck是系统中性能受到约束的位置•VTune™PerformanceAnalyzer帮助你找到并删除Bottlenecks.•找到软件Hotspots是一个分析方法,帮助你定位Bottlenecks.性能优化方法有三种数据收集器•Sampling取样•callgraph调用曲线图•countermonitor计数器监控器两种跟踪位置的方法•Problem:–我需要知道你在哪花费了多长时间•StatisticalSolution:–我每30分钟呼叫你•InstrumentationSolution:–每个地方有一个特殊的电话点,你每到一个地点向我报告第一种方法:我固定时间间隔给你电话•优点:–低开销:没有太多的中断–没有建站点的开销–无论你在那里都能精确定位•缺点:–如果你的双手拿满东西,我必须等待–你可能第一次没有听到铃声,所以我不能精确确定我呼叫你时,你在那里由于你不经常去有一些地方,我可能根本不知道你去过第二种方法:当你到了,你打电话给我。•优点:•你到达新的地方我能立刻知道•我知道你在一个地方呆了多长时间•我知道你到达同一个地方多少次•缺点:•不知道你在街道内做了什么•粒度:站点•浪费了大量时间打电话•建立站点扩大了街道空间如何识别热点?•SamplingDataCollector–TheStatisticalSolution–描述执行的一个侧面(柱状图)–低开销•CallGraphDataCollector–TheInstrumentationSolution–函数的时间信息–函数调用者和被调用者的关系–比sampling的开销高三种性能监控方式的比较VTune™Projects(项目)•什么是Project?–Project由一个或多个Activities组成•什么是Activity?–包含你应用程序的信息和希望运行的数据收集器信息。项目的组织如下MyCoolProject1Activity1(CallGraph)CallGraphResults-3Apr,2007,3:30PMCallGraphResults-4Apr,2007,3:30PMActivity2(CounterMonitor)CounterMonitorResults-3Apr,2007,4:30PMActivity3(Sampling)SamplingResults-5Apr,2007,8:30AMRunoClockticksInstructionsRetiredRun1MispredictedBranchesRetired取样•打断处理器的执行,获得执行上下文–中断可以是周期性的,如每秒1,000次采样–采样的触发EventBasedSampling(EBS).•采样事件:处理器相关事件,如L2CacheMisses,BranchMispredictions,Floating-pointinstructionsretired,etc.举例:gzip采样分析•介绍EBS与Sampling用户界面•gzip是一个开放源压缩程序文件选择一个新的项目选择“SamplingWizard”,点击OK选择Win32*/Win64*/Linux*Profiling选择按钮,然后确定记住:每个活动都有自己的应用/模块轮廓(profile)1.打开应用程序:gzip.exe2.命令行选项:-ftestfile.dat3.选中Modifydefaultconfiguration4.点击Finish修改采样行为1.SelecttheSamplingcheckbox.2.ClickonConfigureClickOKtoruntheactivity根据采样次数找到hotspot调用图•根据总时间找到关键路径计数器监视•根据占处理器时间找hotspot修改代码进行优化