[发明专利]一种CUDA线程放置优化方法有效
申请号: | 201910680644.2 | 申请日: | 2019-07-25 |
公开(公告)号: | CN110399182B | 公开(公告)日: | 2023-05-12 |
发明(设计)人: | 张伟哲;何慧;谢根栓;鲁刚钊 | 申请(专利权)人: | 哈尔滨工业大学 |
主分类号: | G06F9/448 | 分类号: | G06F9/448;G06F9/52;G06F18/2411 |
代理公司: | 哈尔滨市松花江专利商标事务所 23109 | 代理人: | 杨立超 |
地址: | 150001 黑龙*** | 国省代码: | 黑龙江;23 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 cuda 线程 放置 优化 方法 | ||
1.一种CUDA线程放置优化方法,其特征在于,所述方法的实现过程为:
程序信息采集:包括两个部分:
第一部分使用CUDA的性能分析工具nvprof获得程序运行时信息、程序执行时间信息集;
程序运行时信息采集的内容为:通过阅读nvprof官方文档,总结出nvprof收集的metric信息分为指令操作信息、存储操作信息、线程信息三类;第二部分,首先使用LLVM内的工具clang把CUDA源程序转换成中间表示形式,再使用分析pass采集CUDA程序核函数的静态信息;
所述CUDA程序核函数的静态信息包括指令信息和存储空间信息;
用部分静态信息建立与运行时信息的等价关系,具体为:
(1)浮点计算单元利用率
可以用静态信息Ninstrfloat计算得到浮点计算单元利用率,对应nvprof工具获取的信息flop_dp_efficiency、flop_sp_efficiency;设核函数的执行时间为Tkernel,GPU浮点计算理论峰值为Pmax,则GPU浮点计算单元利用率Ufloatstatic可以表示为:
(2)存储器吞吐量统计
我们用指令数量替代存储器吞吐量统计信息:Ninstrstore替代gst_throughput,Ninstrload替代gld_throughput,Ssharedmem替代shared_load_throughput、shared_store_throughput;
(3)线程分歧率
在CUDA程序的指令集中,影响线程分歧率的指令包括分支指令、同步指令,因此我们用Nbranch、Nsync、Nisntr、Nloop等替代nvprof工具的信息branch_efficiency,计算公式为:
与原计划提取的运行时信息相比,经过替换后,由原来的提取15条变为8条;
其中,Nloop是总循环次数,Nbranch是分支指令次数,Nisntr是总体指令数量,Ninstrfloat是浮点型指令数量,Ninstrstore是内存写入指令数量,Ninstrload是内存加载指令数量,Nsync是CUDA线程间同步指令数量,Ssharedmem是线程共享内存大小;fIop_dp_efficiency、flop_sp_efficiency是浮点计算单元利用率,gld_throughput是全局内存加载吞吐量,gst_throughput是全局内存存储吞吐量,shared_load_throughput是共享内存加载吞吐量,shared_store_throughput是共享内存存储吞吐量,branch_efficiency是分支指令占全部指令比率;
程序信息处理:对静态信息和程序运行时信息进行信息汇总、数值化处理、归一化处理得到训练集程序特征,并利用程序执行时间信息集设置标签从而完成标签数据的生成;
机器学习模型训练:将训练集程序特征和标签数据作为输入,利用支持向量机算法进行性能建模,得到程序性能预测模型;
在线程优化放置应用时,首先需调用程序信息采集模块,采集待优化程序的程序信息,然后输入已训练好的程序性能预测模型,即可获得合适的线程块设置方案。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于哈尔滨工业大学,未经哈尔滨工业大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201910680644.2/1.html,转载请声明来源钻瓜专利网。