没有合适的资源?快使用搜索试试~ 我知道了~
444→海报:CuPBoP:一个框架,使CUDA可移植韩若冰佐治亚理工学院hanruobing@gatech.edu杰弗里·杨佐治亚理工学院jyoung9@gatech.edu陈俊佐治亚理工学院jchen706@gatech.edu沈在雄首尔大学ong@snu.ac.kr巴努·加格佐治亚理工学院bgarg@gatech.edu金惠顺佐治亚理工学院hyesoon@cc.gatech.edu摘要CUDA 作 为 GPU编程最 流 行 的选 择 之 一 , 只 能 在NVIDIA GPU 上 执 行 。 为 了 在 非 NVIDIA 设 备 上 执 行CUDA,研究人员建议将CUDA翻译为其他编程语言。然而,由于源到源翻译的挑战,这种方法无法实现高覆盖率。我们提出了一个框架,CuPBoP,在非NVIDIA设备上执行CUDA程序,而不依赖于其他编程语言。CuPBoP由两部分组成。编译部分在CUDA主机/内核IR上应用转换。运行时部分由CUDA内置函数的运行时库组成对于CPU后端,与现有框架兼容,CuPBoP在我们评估的所有CPU(x86,aarch 64,RISC-V)上实现了最高的覆盖率。我们公开CuPBoP,以激发更多的作品在这一领域1。CCS概念:·计算方法并行计算方法。关键词:可移植编程,CUDA,RISC-V,X86,AArch 641引言CUDA是GPU编程的实际选择然而,CUDA是一种专有语言,不能在非NVIDIA设备上执行。 如果我们能够消除这一限制,非NVIDIA设备就可以从CUDA应用的快速发展中受益。第1https://github.com/cupbop/CuPBoP*这些作者对这项工作做出了同样的允许制作部分或全部本作品的数字或硬拷贝供个人或课堂使用,无需付费,前提是复制品不以营利或商业利益为目的制作或分发,并且复制品在第一页上带有此通知和完整的引用。本作品的第三方组件的版权必须得到尊重。对于所有其他用途,请联系所有者/作者。PPoPP©2023版权归所有者/作者所有。ACM ISBN979-8-4007-0015-6/23/02。https://doi.org/10.1145/3572848.3577504一些开发人员尝试使用翻译器将CUDA程序翻译成可移植的语言。然而,CUDA此外,CUDA和目标语言之间的API可能有很大的差异。这些挑战阻碍了翻译人员在CUDA应用程序上实现高覆盖率。基于这些观察,我们提出了CuPBoP,一个新的框架,用于迁移CUDA程序,而不依赖于其他语言。 CUDA程序由两部分组成:主机代码和内核代码。主机代码通常在CPU上运行,内核代码通过调用由运行时系统和GPU驱动程序完成的内核启动在NVIDIA GPU上运行。 要在非NVIDIA设备上执行CUDA,CuPBoP首先通过Clang[5]将CUDA编译为 LLVM/NVVM IR,然后在IR上应用转换,并生成二进制代码。这些二进制代码将与CuPBoP运行时库链接,并为非NVIDIA设备生成可执行文件。从CuPBoP中的CUDA源代码生成非NVIDIA设备的可执行文件的工作流程如图1所示。2汇编CuPBoP首先使用Clang将CUDA源代码编译为两个中间表示(IR):NVVMIR [6](内核代码)和LLVMIR(主机代码)。然后,CuP-BoP在主机和内核IR上应用转换,以生成适合在非NVIDIA设备上执行的程序。例如,目标架构可能没有与NVIDIA GPU相同的内存层次结构,因此需要进行内存布局转换。此外,对于线程少得多的CPU,CuPBoP必须在线程之间重新分配工作负载-通过使每个线程执行更多的工作负载-以减少线程的数量。在本节中,我们将描述在CPU上支持CUDA所需的转换。更改内存布局:CuPBoP将CUDA全局内存 映射到CPU堆内存,并将其他CUDA内存空间映射到CPU堆栈内存。插入额外变量:NVIDIA GPU有许多特殊寄存器来支持某些CUDA固有函数[2]。例如,NVIDIA GPU具有特殊的寄存器445PPoPP图1.CuPBoP的工作流程。以存储块索引。这些寄存器在CPU体系结构中没有等价物CuPBoP插入这些变量的声明(例如,block_index,block_dim)。变量的赋值在运行时完成将GPU块转换为CPU线程:由于GPU具有比CPU高得多的并行性,研究人员提出了将GPU块映射到CPU线程的转换[4,8- 10 ]。CuPBoP使用特定的实现在COX中提出[4]。Pack/unpack参数:当主机线程执行内核启动函数时,它将任务推送到任务队列,该任务队列由线程池中的线程查询和获取。不同的CUDA内核在任务队列中应该具有相同的 由于CUDA内核具有不同数量的参数和类型,CuPBoP必须将参数打包到单个对象中。CuPBoP应用转换在内核启动之前插入序言,将所有参数打包到单个基于指针的对象中。 CuPBoP还在内核函数的开头插入了一个- other序言来解包参数对象。300万CUDA主机程序在CPU上运行,并依赖于运行时系统来调用内核启动、内存分配、内存管理等。由于CUDA运行时系统是作为NVIDIA的库提供的,并且特定于NVIDIAGPU,因此我们需要开发自己的库版本,以提供与CUDA库(等)类似的功能libcud-asrt.so)。CuPBoP运行时包括在非NVIDIA设备上实现CUDA运行时功能通过与不同的库链接,未修改的CUDA代码可以在NVIDIA GPU和CPU上执行(图2)。 最关键的功能是内核启动功能。对于CPU,CuPBoP维护一个线程池和一个任务队列。对于内核启动,主机线程将任务变量插入任务队列。线程池中的线程查询队列,获取并执行任务。内核启动函数还配置用于在运行时执行例如,为了支持CPU上的CUDA动态 共 享 内 存 功 能 , CuPBoP 在内核启动函数中调 用 C++malloc来动态分配内存空间。由CuPBoP编译插入的变量block_index,block_dim)也由内核启动函数分配。图2. 通过链接到不同的库,程序可以在NVIDIA GPU和CPU上执行。4评价DPC++[7] ( 2021.3.0 ) 和 HIP-CPU [1] ( commit : 56f559 c9)这两个框架被用作基线。我们使用CuPBoP和这两个框架在x86、aarch 64和RISC-V机器上执行未经修改的CUDA程序。Ro-dinia [3]基准用于评估覆盖率。总的来说,CuPBoP实现了最高的覆盖率(在x86上,CuPBoP:73.9%,DPC++:56.5%,HIP-CPU:56.5%)。对于Rodinia基准测试中的应用程序,由于这些框架都不支持CPU上的纹理内存,因此不支持hybridsort,kmeans,leukocyte和mummergpu应用程序。 HIP-CPU不支持基于C的代码,如b+tree和backprop。 对于dwt2d,内核在共享内存中声明了一个自定义的结构变量,目前CuPBoP不支持。5结论大多数在非NVIDIA设备上运行CUDA的现有作品都使用源到源翻译器将CUDA翻译为其他编程语言。相反,CuPBoP使CUDA可移植,而不依赖于任何其他语言。我们描述了编译转换和运行时库,CuPBoP实现支持CUDA的CPU。通过Rodinia基准测试,我们证明了CuPBoP可以在我们评估的所有CPU(x86,aarch 64,RISC-V)上获得高覆盖率6承认我们衷心感谢AMD 公司的支持我们还要感谢BlaiseTine 、 Jaewon Lee 、 Jiashen Cao 、 Xule Zhou 和 JohnLu。446海报:CuPBoP:一个框架,使CUDA便携式PPoPP引用[1] 2020. HIP-CPU 。 https://github.com/ROCm-Developer-Tools/HIP-CPU[2] 2022. NVIDIA文档。https://docs.nvidia.com/cuda/parallel-thread-execution/index.html#special-registers[3] ShuaiChe,Michael Boyer,Jiayuan Meng,David Tarjan,Jeremy W Sheaffer,Sang-Ha Lee,and Kevin Skadron. 2009 年Rodinia:异构计算的基准套件2009年IEEE工作负载表征国际研讨会(IISWC)。44-54.[4] Ruobing Han , Jaewon Lee , Jaewoong Sim , and HyesoonKim.2022年。COX:将CUDA Warp-Level函数暴露给CPU。 ACM架构和代码优化(TACO)(2022)。[5] 克里斯·拉特纳。2008年LLVM和Clang:下一代编译器技术。在BSD会议上,卷。五、1-20。[6] NVIDIA。2012. NVVM。https://docs.nvidia.com/cuda/nvvm-ir-spec/index.html#abstract[7] James Reinders , Ben Ashbaugh , James Brodman , MichaelKinsner , John Pennycook , and Xinmin Tian.2021 年 数 据 并 行C++:掌握DPC++,使用C++和SYCL进行异构系统编程。施普林格自然。[8] John A Stratton , Vinod Grover , Jaydeep Margaret , BastiaanAarts,Mike Murphy,Ziang Hu,and Wen-mei W Hwu.2010.为多核CPU高效编译细粒度的SPMD线程程序。第八届IEEE/ACM国际代码生成与优化研讨会论文集。111-119[9] John A Stratton , Sam S Stone , Wen-Mei W Hwu 。 2008 年MCUDA:一种用于多核CPU的 CUDA内核的高效实现并行计算语言和编译器国际研讨会。斯普林格,16[10] 张耀,马克·辛克莱和安德鲁·钱。2013年。 提高OpenCL程序的性能可移植性。在国际超级计算机大会上。斯普林格,136
下载后可阅读完整内容,剩余1页未读,立即下载
cpongm
- 粉丝: 5
- 资源: 2万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 黑板风格计算机毕业答辩PPT模板下载
- CodeSandbox实现ListView快速创建指南
- Node.js脚本实现WXR文件到Postgres数据库帖子导入
- 清新简约创意三角毕业论文答辩PPT模板
- DISCORD-JS-CRUD:提升 Discord 机器人开发体验
- Node.js v4.3.2版本Linux ARM64平台运行时环境发布
- SQLight:C++11编写的轻量级MySQL客户端
- 计算机专业毕业论文答辩PPT模板
- Wireshark网络抓包工具的使用与数据包解析
- Wild Match Map: JavaScript中实现通配符映射与事件绑定
- 毕业答辩利器:蝶恋花毕业设计PPT模板
- Node.js深度解析:高性能Web服务器与实时应用构建
- 掌握深度图技术:游戏开发中的绚丽应用案例
- Dart语言的HTTP扩展包功能详解
- MoonMaker: 投资组合加固神器,助力$GME投资者登月
- 计算机毕业设计答辩PPT模板下载
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功