基于 GCC 开发异构处理器编程插件.pptx

基于 GCC 开发异构处理器编程插件.pptx

  1. 1、本文档共18页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

基于GCC开发异构处理器编程插件曹焕琦2024/9/6PACMAN@TsinghuaUniversity1

问题目标为什么做?要做什么?2024/9/6PACMAN@TsinghuaUniversity2

背景神威超级计算机所使用的申威众核处理器由于其异构特征编程困难:主从核指令集不同;主从核交互接口类似OpenCL,启动从核程序需要手动打包参数、处理数据格式问题等;主从核代码分开编译,从核代码无法以模板形式编写、根据主核调用展开。背后的问题是长期以来类似CUDA的语言扩展缺位。2024/9/6PACMAN@TsinghuaUniversity3CoreGroup1CoreGroup2CoreGroup3CoreGroup4CPEClusterMPECPEClusterMPECPEClusterCPEClusterMPEMPENOCMCDRAMDRAMMCMCMCDRAMDRAMCPEwithSPMRegisterBuses(verticalhorizontal)

代码示例按照当前的编程模型,同一个组件一般需要分三块实现。图示分别为公共头文件(下)、主核代码(右)、从核代码(右下)。2024/9/6PACMAN@TsinghuaUniversity4

如何改善?对语言进行扩展,合并主核和从核代码,由编译器进行拆分。(学习CUDA)2024/9/6PACMAN@TsinghuaUniversity5

方案设计基于GCCextension实现C/C++基础上的语言扩展2024/9/6PACMAN@TsinghuaUniversity6

编译器现状神威团队为GCC实现了两个后端扩展,分别对应于主核、从核。–mhost:后端支持完整的gccintrinsic,且运行时提供完整的Glibc、stdc++等–mslave:后端仅支持部分intrinsic,运行时提供功能受限的uClibc。同时,–mhybrid模式用于混合链接两种架构的obj文件。在-mslave模式下,后端会为所有函数增加slave_前缀,避免与主核代码的符号冲突。2024/9/6PACMAN@TsinghuaUniversity7

如何实现一份代码、两份二进制、混合链接?在插件中添加三个attribute:__attribute((kernel)):用来标注从核入口函数,必须由主核调用;__attribute((slave)):用来标注常规从核函数,必须由从核调用;__attribute((host)):用来标注主核函数,可以调用其他主核函数或kernel函数。一个函数可以同时是slave或host的,没有标记的函数是host的。利用插件实现一个过滤机制:当使用-mhost编译时,仅保留主核代码,并将从核入口函数变换为spawnwrapper。当使用-mslave编译时,仅保留从核代码。以-mhost和-mslave分别编译后链接。2024/9/6PACMAN@TsinghuaUniversity8

如何以最低代价使标准库和申威主从交互库可用?虽然主从核的标准库并非同一套,但可以认为其接口都符合C语言标准:在以-mhost编译时,认为所有出现在编译器内置库中的函数声明是host的;在以-mslave编译时,认为所有出现在编译器内置库中的函数声明是slave的。对于主从交互库,通过一套pragma来修改头文件:#pragmaswhc(push(host|slave)|pop)经过一次push后,将当前函数默认种类改为对应的架构;完成一段声明pop后,恢复原先的默认架构(主核)。在主从交互库的头文件中,将条件编译语句(#ifdef__sw_host__等)替换为相应的pragma。2024/9/6PACMAN@TsinghuaUniversity9

插件实现通过GCCpluginAPI实现自定义attribute、pragma及代码生成与变换(参见代码)2024/9/6PACMAN@TsinghuaUniversity10

开发经验和GCCInternal斗智斗勇…2024/9/6PACMAN@TsinghuaUniversity11

参考材料查找GCCPlugin的文档中有极为有限的一些内容,可以参考了解其大体结构。Linuxkernel中有几个GCCplugin的实现,其功能也很好理解,可以参考仿照编写插件。其余的就需要读GCC源码了…特别留意middle-end相关部分,包括tree

文档评论(0)

***** + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档