【技术实现步骤摘要】
【国外来华专利技术】
本专利技术涉及编译内核的源代码,且更具体地说涉及用于编译用于存储器存取的内核的源代码的技术。
技术介绍
已存在朝向所谓的异构计算架构的趋势。在异构计算架构中,称为内核的程序可使用框架来进行编译,使得例如CPU(中央处理单元)、GPU(图形处理单元)、FPGA(现场可编程门阵列)等多种不同类型的处理器可执行所述内核。最近的支持异构计算的框架包含OpenCL框架以及DirectCompute框架。
技术实现思路
本专利技术描述用于检测内核中的存储器参考的存储器混叠和存储器重叠以便产生用于编译优化的元数据的技术。为了执行本专利技术的技术,例如及时编译器(JIT)等编译器将程序的源代码(也被称作“内核”)编译为二进制文件。执行编译器的编译处理器可在运行时间(当编译处理器产生执行内核所需要的自变量时)使用例如OpenCL等异构计算框架编译所述内核。在本专利技术中描述的技术中,驱动程序分析在缓冲器中一起传递的将传递到将执行内核的目标处理器的自变量,而不是指示目标处理器使用所产生自变量执行内核。基于所述分析,驱动程序/运行时间产生指示第一存储器参考与第二存储器参考之间的关系(例如,第一存储器参考和第二存储器参考的存储器区是否重叠、重叠达何种范围等)的元数据。如果存储器区是不相同的,那么编译处理器可使用编译器基于元数据且使用例如循环展开等更积极的编译技术而重新编译内核。驱动程序也可以能够确定内核的存储器存取重叠达何种范围,且可基于存储器重叠量使用更积极的技术重新编译内核。以此方式,本专利技术的技术可增加使用及时编译器编译的内核的执行性能。在一个实例中,本专利技术描述一种方法 ...
【技术保护点】
一种编译用于执行的内核的方法,其包括:通过由在编译处理器上执行的编译器和运行时间组成的群组中的至少一者产生用于执行经编译内核的二进制代码的自变量;通过由在所述编译处理器上执行的所述编译器和所述运行时间组成的所述群组中的所述至少一者确定对所述内核自变量的第一存储器区的第一存储器参考和对所述内核自变量的第二存储器区的第二存储器参考是否参考同一存储器区;通过由在所述编译处理器上执行的所述编译器和所述运行时间组成的所述群组中的所述至少一者基于所述确定而产生与所述第一存储器参考和所述第二存储器参考相关联的元数据,其中所述元数据指示所述第一存储器区与所述第二存储器区之间的关系;以及响应于通过由在所述编译处理器上执行的所述编译器和所述运行时间组成的所述群组中的所述至少一者确定所述内核的第一和第二存储器参考并不参考所述同一存储器区而进行以下操作:通过由在所述编译处理器上执行的所述编译器和所述运行时间组成的所述群组中的所述至少一者致使编译器基于所述元数据而重新编译所述内核;以及通过由在所述编译处理器上执行的所述编译器和所述运行时间组成的所述群组中的所述至少一者指示目标处理器执行所述经重新编译的内核。
【技术特征摘要】
【国外来华专利技术】2014.04.04 US 14/245,9461.一种编译用于执行的内核的方法,其包括:通过由在编译处理器上执行的编译器和运行时间组成的群组中的至少一者产生用于执行经编译内核的二进制代码的自变量;通过由在所述编译处理器上执行的所述编译器和所述运行时间组成的所述群组中的所述至少一者确定对所述内核自变量的第一存储器区的第一存储器参考和对所述内核自变量的第二存储器区的第二存储器参考是否参考同一存储器区;通过由在所述编译处理器上执行的所述编译器和所述运行时间组成的所述群组中的所述至少一者基于所述确定而产生与所述第一存储器参考和所述第二存储器参考相关联的元数据,其中所述元数据指示所述第一存储器区与所述第二存储器区之间的关系;以及响应于通过由在所述编译处理器上执行的所述编译器和所述运行时间组成的所述群组中的所述至少一者确定所述内核的第一和第二存储器参考并不参考所述同一存储器区而进行以下操作:通过由在所述编译处理器上执行的所述编译器和所述运行时间组成的所述群组中的所述至少一者致使编译器基于所述元数据而重新编译所述内核;以及通过由在所述编译处理器上执行的所述编译器和所述运行时间组成的所述群组中的所述至少一者指示目标处理器执行所述经重新编译的内核。2.根据权利要求1所述的方法,其中确定所述内核的所述第一存储器参考和所述第二存储器参考是否参考所述同一存储器区进一步包括:通过由在所述编译处理器上执行的所述编译器和所述运行时间组成的所述群组中的所述至少一者确定所述内核的包含所述第一和第二存储器参考的循环代码区段,其中重新编译所述内核包括:通过由在所述编译处理器上执行的所述编译器和所述运行时间组成的所述群组中的所述至少一者基于所述产生的元数据而展开所述循环代码区段,且编译所述展开的循环代码区段。3.根据权利要求1所述的方法,其中确定所述内核的所述第一存储器参考和所述第二存储器参考是否参考所述同一存储器区进一步包括:通过由在所述编译处理器上执行的所述编译器和所述运行时间组成的所述群组中的所述至少一者确定所述内核的包含所述第一和第二存储器参考的代码区段,其中重新编译所述内核进一步包括:响应于确定所述代码区段的所述第一和第二存储器参考并不参考所述同一存储器区,通过由在所述编译处理器上执行的所述编译器和所述运行时间组成的所述群组中的所述至少一者基于所述产生的元数据而重排序所述代码区段的加载操作和存储操作中的至少一者。4.根据权利要求1所述的方法,其中确定所述内核的所述第一存储器参考和所述第二存储器参考是否参考所述同一存储器区进一步包括:通过由在所述编译处理器上执行的所述编译器和所述运行时间组成的所述群组中的所述至少一者确定所述内核的包含所述第一和第二存储器参考的代码区段,其中重新编译所述内核进一步包括:响应于确定所述代码区段的所述第一和第二存储器参考并不参考所述同一存储器区,通过由在所述编译处理器上执行的所述编译器和所述运行时间组成的所述群组中的所述至少一者基于所述产生的元数据而将所述代码区段的多个标量指令向量化为至少一个向量指令。5.根据权利要求1所述的方法,其中所述元数据进一步指示所述第一存储器区与所述第二存储器区之间的重叠区。6.根据权利要求5所述的方法,其中所述元数据包含所述第一存储器区与所述第二存储器区之间的重叠的字节数目。7.根据权利要求5所述的方法,其中所述元数据进一步包括所述存储器重叠区的起始地址和所述存储器重叠区的结束地址中的至少一者。8.根据权利要求1所述的方法,其中所述编译处理器包括中央处理单元CPU,且所述目标处理器包括图形处理单元GPU。9.根据权利要求1所述的方法,其中所述编译器使用包括微软DirectCompute和OpenCL中的至少一者的异构计算框架来重新编译所述内核。10.根据权利要求1所述的方法,其中所述内核自变量包括为所述自变量分配的存储器的缓冲器区域。11.一种装置,其包括:存储器;以及编译处理器,其经配置以:通过由在所述编译处理器上执行的编译器和运行时间组成的群组中的至少一者产生用于执行经编译内核的二进制代码的自变量;通过由在所述编译处理器上执行的所述编译器和所述运行时间组成的所述群组中的所述至少一者确定对所述内核自变量的第一存储器区的第一存储器参考和对所述内核自变量的第二存储器区的第二存储器参考是否参考同一存储器区;通过由在所述编译处理器上执行的所述编译器和所述运行时间组成的所述群组中的所述至少一者基于所述确定而产生与所述第一存储器参考和所述第二存储器参考相关联的元数据,其中所述元数据指示所述第一存储器区与所述第二存储器区之间的关系;以及响应于通过由在所述编译处理器上执行的所述编译器和所述运行时间组成的所述群组中的所述至少一者确定所述内核的第一和第二存储器参考并不参考所述同一存储器区而进行以下操作:通过由在所述编译处理器上执行的所述编译器和所述运行时间组成的所述群组中的所述至少一者致使编译器基于所述元数据而重新编译所述内核;以及通过由在所述编译处理器上执行的所述编译器和所述运行时间组成的所述群组中的所述至少一者指示目标处理器执行所述经重新编译的内核。12.根据权利要求11所述的装置,其中为了确定所述内核的所述第一存储器参考和所述第二存储器参考是否参考所述同一存储器区,所述编译处理器进一步经配置以:通过由在所述编译处理器上执行的所述编译器和所述运行时间组成的所述群组中的所述至少一者确定所述内核的包含所述第一和第二存储器参考的循环代码区段,其中为了重新编译所述内核,所述编译处理器进一步经配置以:通过由在所述编译处理器上执行的所述编译器和所述运行时间组成的所述群组中的所述至少一者基于所述产生的元数据而展开所述循环代码区段,且编译所述展开的循环代码区段。13.根据权利要求11所述的装置,其中为了确定所述内核的所述第一存储器参考和所述第二存储器参考是否参考所述同一存储器区,所述编译处理器进一步经配置以:通过由在所述编译处理器上执行的所述编译器和所述运行时间组成的所述群组中的所述至少一者确定所述内核的包含所述第一和第二存储器参考的代码区段,其中为了重新编译所述内核,所述编译处理器进一步经配置以:响应于确定所述代码区段的所述第一和第二存储器参考并不参考所述同一存储器区,通过由在所述编译处理器上执行的所述编译器和所述运行时间组成...
【专利技术属性】
技术研发人员:C·C·利姆,D·S·布拉克曼,
申请(专利权)人:高通股份有限公司,
类型:发明
国别省市:美国;US
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。