[0001]
技术领域
[0002] 本
发明涉及计算机
高性能计算领域、并行计算领域,具体涉及一种实现CPU串行程序移植到MIC平台的方法。
背景技术
[0003] MIC(Many Integrated Core)是Intel公司推出的众核处理器,跟通用的多核至强处理器相比,MIC众核架构具有更小的
内核和
硬件线程,众核处理器计算资源
密度更高,片上通信开销显著降低,更多的晶体管和
能量,能够胜任更为复杂的并行应用。
[0004] Intel MIC产品基于X86架构,基于重核的众核处理器,包含50个以上的核心,以及512bit的向量位宽,双精性能超过1TFlops。
[0005] Intel MIC产品采用PCI-E的方式与
主板连接,如图1所示,因此MIC做计算时需要先把数据由CPU内存传递到MIC内存中。另外,MIC作为众核处理器,并行线程数较多,与CPU平台上的并行方式有很大的不同,正确的MIC并行程序开发过程将获得快速、高效的结果,否则将不能有效地、合理地利用MIC
加速。
[0006] 可见,为实现MIC并行程序开发的需求,需要一种快速、有效地实现CPU串行程序移植到MIC平台的方法。
发明内容
[0007] 本发明的目的在于实现一种快速、有效地CPU串行程序移植到MIC平台的方法,提高MIC并行程序开发效率,降低MIC并行程序开发周期,该方法按照先
修改CPU串行程序后移植到MIC平台的原理,把需要在MIC上做的工作尽量先在CPU平台上修改,降低了程序的开发难度,同时有利用bug的调试。可以分为以下步骤:(1)CPU串行程序分析
对于CPU串行程序,首先需要测试串行程序中的热点函数,以及分析热点函数的并行性:
a)热点测试
根据时间的测试结果确定热点函数,作为后面移植的重点代码模
块。
[0008] b)并行性分析找出热点代码后,需要分析热点部分的
算法、数据特点,根据算法和数据的特点分析其是否可以并行,确定其并行性。
[0009] c)确定MIC内核使用的数组根据对串行程序的分析,确定哪些模块需要移植到MIC平台上运行,对于需要运行上MIC平台上的代码内的数据进行分析,确定数组在代码中的什么
位置传递到MIC上,传递的方向是in、out、还是inout,以及每次传递时的大小等信息。
[0010] (2)仿MIC格式的CPU串行程序MIC程序相对CPU程序比较复杂,当出现bug时,调试的难度也要比CPU程序大很多,为了降低MIC程序开发难度和周期,可以把一些MIC上的移植工作提前在CPU平台上实现,具体涉及下面几个方面:
a)修改成可并行算法
对于CPU串行程序,有些代码理论上可以并行,但经过CPU版本的优化之后导致代码不能直接并行化,这时需要根据并行算法的要求修改原程序,改成可并行的模式;有些模块理论上是可以并行的,但串行算法无法直接并行化,需要重新设计并行算法。
[0011] b)数组修改根据MIC并行程序对数组格式的要求对串行程序中的数组进行修改。
[0012] 根据前面几条的修改方式,对原CPU程序修改成一个仿MIC格式的CPU串行程序,为后面的移植工作做大量的准备,这样有利于后面MIC程序的开发和调试。
[0013] (3)CPU平台OpenMP版本程序基于CPU多核平台和步骤2得到的串行程序利用OpenMP并行编程模型实现其OpenMP并行程序,并保证其结果的正确性。
[0014] 为了满足程序往MIC平台的移植,设计CPU版本的OpenMP程序需要充分考虑扩展性,因为,MCI平台需要设置数百个线程,而CPU平台仅几十个线程。
[0015] (4)MIC并行程序基本版本根据对原程序数组的分析,把CPU平台上的OpenMP版本程序移植到MIC平台,主要包括:
a)实现Offload语句
根据对数组的分析,完成offload语句,实现数据的传递和MIC内核的调用。
[0016] b)修改OpenMP线程数根据MIC核的数目设计OpenMP的线程数,充分利用MIC的计算资源。
[0017] (5)MIC并行程序优化版本根据步骤4实现的基本版本的MIC并行程序,利用MIC的优化技术进一步提高并行程序的性能,主要优化包括两个方面:通信优化和内核优化。
[0018] a)MIC通信优化MIC计算需要CPU与MIC之间进行数据的传递,合理的利用通信优化技术有利用提高MIC并行程序的性能,主要手段包括:nocopy、异步传递等。
[0019] b)MIC内核优化MIC内核的优化对其性能更为重要,常见的方法有:并行度、Cache、向量化等。
[0020] 本发明的有益效果是:提出一种MIC程序开发的过程,可以快速、有效地实现CPU串行程序移植到MIC平台上,降低MIC并行程序开发的周期和难度,减少bug的调试时间。
附图说明
[0021] 附图1 CPU+MIC协同计算方式示意图;附图2 CPU串行程序移植到MIC平台的过程示意图。
具体实施方式
[0022] 为了使本发明的目的、技术方案和优点更加清晰,下面结合附图和
实施例,对本发明作以下详细说明。
[0023] (1)CPU串行程序分析对于CPU串行程序,首先需要测试串行程序中的热点函数,以及分析热点函数的并行性:
a)热点测试
通常测试热点有两种方法:(1)对每个函数模块添加时间函数,根据打印出来的时间确定热点模块;(2)使用Intel vTune Amplifier XE等热点分析工具确定热点模块。根据时间的测试结果确定热点函数,作为后面移植的重点代码模块。
[0024] b)并行性分析找出热点代码后,需要分析热点部分的算法、数据特点,根据算法和数据的特点分析其是否可以并行,确定其并行性。
[0025] c)确定MIC内核使用的数组根据对串行程序的分析,确定哪些模块需要移植到MIC平台上运行,对于需要运行上MIC平台上的代码内的数据进行分析,确定数组在代码中的什么位置传递到MIC上,传递的方向是in、out、还是inout,以及每次传递时的大小等信息。
[0026] (2)仿MIC格式的CPU串行程序MIC程序相对CPU程序比较复杂,当出现bug时,调试的难度也要比CPU程序大很多,为了降低MIC程序开发难度和周期,可以把一些MIC上的移植工作提前在CPU平台上实现,具体涉及下面几个方面:
a)修改成可并行算法
对于CPU串行程序,有些代码理论上可以并行,但经过CPU版本的优化之后导致代码不能直接并行化,这时需要根据并行算法的要求修改原程序,改成可并行的模式;有些模块理论上是可以并行的,但串行算法无法直接并行化,需要重新设计并行算法。
[0027] b)数组修改CPU串行程序中使用的数组定义的形式有可能无法在MIC上直接使用,这时需要对数组的定义进行修改,如C语言程序,多维数组改成一维数组,才能进行CPU与MIC之间的数据传递。另外,考虑到向量化和访存之间的关系,有时还需要对数组的
访问方向进行修改,从而也需要改变数组的定义形式(如做行列变换)。总之,根据MIC对数组使用和CPU串行程序之间的区别,提前把数组修改,方便程序的调试。
[0028] 根据前面几条的修改方式,对原CPU程序修改成一个仿MIC格式的CPU串行程序,为后面的移植工作做大量的准备,这样有利于后面MIC程序的开发和调试。
[0029] (3)CPU平台OpenMP版本程序基于CPU多核平台和步骤2得到的串行程序利用OpenMP并行编程模型实现其OpenMP并行程序,并保证其结果的正确性。
[0030] 为了满足程序往MIC平台的移植,设计CPU版本的OpenMP程序需要充分考虑扩展性,因为,MCI平台需要设置数百个线程,而CPU平台仅几十个线程。
[0031] (4)MIC并行程序基本版本根据对原程序数组的分析,把CPU平台上的OpenMP版本程序移植到MIC平台,主要包括:
a)实现Offload语句
根据对数组的分析,完成offload语句,实现数据的传递和MIC内核的调用,offload语句按下面格式实现:
#pragma offload target(mic: mic_id) \
in(A,B: length(N * N)) \
out(C: length(N * N))
{}
b)修改OpenMP线程数
根据MIC核的数目设计OpenMP的线程数,充分利用MIC的计算资源。根据MIC核数目计算OpenMP线程数目,如Intel Xeon Phi SE10P产品含有61个核,其中一个核运行
操作系统,那么OpenMP线程数可以设置为180或240(根据MIC程序优化技术,每个核上运行3个或4个线程性能较好)。
[0032] (5)MIC并行程序优化版本根据步骤4实现的基本版本的MIC并行程序,利用MIC的优化技术进一步提高并行程序的性能,主要优化包括两个方面:通信优化和内核优化。
[0033] a)MIC通信优化MIC计算需要CPU与MIC之间进行数据的传递,合理的利用通信优化技术有利用提高MIC并行程序的性能,主要手段包括:nocopy、异步传递等。
[0034] b)MIC内核优化MIC内核的优化对其性能更为重要,常见的方法有:并行度、Cache、向量化等。
[0035] 由本发明的技术方案可见,本发明该方法按照先修改CPU串行程序后移植到MIC平台的原理,把需要在MIC上做的工作尽量先在CPU平台上修改,降低了程序的开发难度,同时有利用bug的调试。通过实现一种快速、有效地CPU串行程序移植到MIC平台的方法,提高MIC并行程序开发效率,降低MIC并行程序开发周期和难度。