clang 编译cuda原理

news2024/11/15 20:38:48

背景

最近在看一门julia的语言,里面是原生支持cuda的,不过在国产卡上却无法适配,为了开展工作有必要了解非常清楚整个编译的机制。此外在研究过程中发现openai 的triton,以及tvm等一些ai框架对nvidia的支持原理都及其类似,所以了解原理更加有必要。

julia编译流程

julia对cuda进行编程主要分为几步:

  • 用julia语言实现一个kernel
  • 运行jualia file.jl 时后会先将julia的语言转为llvm IR(nvvm IR, 我理解两个一个概念,不过nvvm ir是llvm ir的一个子集,nvvm ir一定是llvm ir, 但是llvm的有些语法不一定是nvvm支持的),这个应该是作者自己实现的,但是我也不不知道源码在哪个位置。
  • 利用clang工具中的llc将nvvm ir转为ptx, 这个主要是库nvvm.jl
  • 利用cuda中的函数cuModuleLoadDataEx和cuModuleGetFunction分别加载ptx文件以及ptx中的function指针,然后利用该函数指针开始做计算

clang编译流程

在这里插入图片描述

  • 前端:c/c++ cuda转为nvvm IR (llvm ir), 实现原理在clang/lib/Basic/Targets 以及Clang/CodeGen中
  • 优化:经过几个pass的优化
  • 后端:利用NVPTX code generator生成ptx, 开源代码在llvm/lib/Target/NVPTX
  • 可执行:利用nvidia提供的ptxas工具将ptx转成cubin文件
  • 后续: fatbinary将cubin和ptx一起打包成fatbin文件,最后和主机代码一起生成可执行文件(这流程)

clang文档

https://llvm.org/docs/NVPTXUsage.html#id17

nvcc编译流程

在这里插入图片描述
用nvcc编译的时候无法看到LLVM IR(NVVM IR), 需要libnvvm.so这个库, 这个库在cuda的nvvm文件夹里。我理解clang编译时候不需要这个库,因为他有自己的PTX generator(也是nv提供的), 但是如果你有个llvm IR想用libnvvm编译成ptx也是可以的,可以用#include<nvvm.h>里面的一些函数做处理,比如nvvmCompileProgram->nvvmCompileProgram。但我觉得纯纯多余,因为用nvcc你是拿不到llvm ir的,只有用clang才可以打印出来,即然都用clang了那为啥不直接用clang自带的ptx生成器呢?我理解唯一的需求就是部分大佬喜欢手写llvm ir的cuda代码,或者是自己搞了一门新语言转成了llvm ir,但是用llvm的话又太重所以直接用cuda套件里的libnvvm比较方便。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1975746.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

LinkedList接口源码解读

LinkedList 接口源码解读&#xff08;一&#xff09; 前言 因为追求质量&#xff0c;所以写的较慢。大概在接下来的三天内会把LinkedList源码解析出完。大概还有两篇文章。废话不多说&#xff0c;正片开始&#xff01; 大家都知道&#xff0c;LinkedList是在Java底层中是由 …

【C++标准模版库】模拟实现vector+迭代器失效问题

模拟实现vector 一.vector成员变量二.构造函数1.无参&#xff08;默认&#xff09;构造2.有参构造3.拷贝构造1.传统写法2.现代写法 三.vector对象的容量操作1.size2.capacity3.clear4.empty5.reserve6.resize 四.vector对象的访问及遍历操作1.operator[]2.实现迭代器&#xff1…

一次Linux端口冲突问题排查记录

更多技术博客&#xff0c;请关注微信公众号&#xff1a;运维之美 一、问题现象 实施同学反馈说我们的服务部署到客户环境后&#xff0c;运行正常&#xff0c;但是后台页面就是无法打开&#xff0c;出现访问白屏问题 从console报错看是其中一个接口响应存在问题&#xff0c;…

老兵永远跟党走,团结奋进新征程-百余老兵庆八一暨《永远闪光的军徽》新书发布座谈会在昆举行

7月30日上午,由中国红色文化研究会老山精神专业委员会主办,昆明乡羊香园承办的百余老兵庆祝“八一”建军节暨《永远闪光的军徽》新书发布座谈会在昆明滇池湖畔乡羊香园举行。 上午10时左右,老战士、曾担任云南省军区领导的黄光汉、陶昌廉、和志光、李继才、雷玉德、王永银老将军…

海思Hi35XX系列(一)环境搭建与挂载

小白一个&#xff0c;新的开发板刚到手有点懵&#xff0c;之前没弄过没有经验&#xff0c;简单记录一下吧 一般买开发板都会给带一个已经配置好的虚拟机文件&#xff0c;直接使用就可以 一、下载安装虚拟机与镜像文件 VMware-workstation16.1.0 我的镜像文件是官方文档资料…

亨廷顿小勇士必看!你的维生素补给站来啦~

Hey小伙伴们~&#x1f44b; 今天咱们来聊聊一个超勇敢的话题——亨廷顿舞蹈症宝贝们的健康小秘密&#xff01;&#x1f389; 虽然路途偶尔有点小颠簸&#xff0c;但记得哦&#xff0c;你们是最闪耀的星星✨&#xff01;让我们一起加油&#xff0c;用对维生素&#xff0c;守护这…

C#知识|文件与目录操作:对象的创建、保存、读取

哈喽&#xff0c;你好啊&#xff0c;我是雷工&#xff01; 面向对象编程的特点就是一切皆对象&#xff0c;操作的也是对象&#xff0c;本节学习文件与目录操作中&#xff0c;对象的保存&#xff1b; 以下为学习笔记。 01 对象的特点 ①&#xff1a;对象运行在内存中&#xff…

4.5K Stars!为 RAG 而生的数据工程神器

—1 大模型 RAG 的难题是什么&#xff1f; RAG 或者 Fine-tuning 微调作为大模型的增强技术&#xff0c;最核心的技术在于如何把企业的私有数据清洗转换成知识&#xff0c;企业中能够第一时间拿到的私有数据&#xff0c;往往是异构的、数据质量参差不齐&#xff0c;通过数据…

ICM-20948芯片详解(3)

接前一篇文章&#xff1a;ICM-20948芯片详解&#xff08;2&#xff09; 三、引脚图、信号描述及内部框图 1. 引脚图 ICM-20948的引脚图如下图所示&#xff1a; 2. 引脚详细描述 ICM-20948的引脚详细描述如下表所示&#xff1a; 注意&#xff1a;不支持在SCL/SCLK和nCS引脚保…

Linux系统窗口水印难点分析

给应用程序加水印是保护数据的一种方式&#xff0c;window上可以通过给进程通过注入的方法给进程的窗口创建一个同大小的副窗口&#xff0c;在副窗口上绘制水印内容&#xff0c;同时设置副窗口透明同时透传事件&#xff0c;这样就可以达到在源窗口上显示水印的效果且不影响程序…

易媒助手:神似融媒宝的自媒体运营工具,新人送7天中级VIP

自媒体运营工具中还有一个易媒助手&#xff0c;功能与融媒宝、蚁小二类似&#xff0c;免费用户可发5个账号&#xff0c;三者同时用就可发15个账号了&#xff0c;所以今天也给大家介绍下&#xff1a; 易媒助手简介 易媒助手于2017年开发&#xff0c;致力于成为中国更优秀的新媒…

springboot集成海康SDK,设备抓图,热成像仪设置多个点代码获取,以及针对红外图点击某一点获取该点温度的需求

本文会介绍java对海康sdk的三个功能&#xff1a; 1、用代码实时抓图 2、用代码获取热成像仪21个点的坐标及其实时温度 3、针对海康热成像仪抓取的热图能够随便点击任意一个点就能获取其温度的功能。 第一个功能&#xff0c;抓图 抓图 在海康提供的sdk中取流后抓图调用的是 …

ollama运行阿里云通义千问72B大模型

准备 安装ollama https://github.com/ollama/ollama 模型 合并gguf copy /B qwen2-72b-instruct-q5_k_m-00001-of-00002.gguf qwen2-72b-instruct-q5_k_m-00002-of-00002.gguf qwen2-72b-instruct-q5_k_m.gguf设置并启动 新建Modelfile FROM ./qwen2-72b-instruct-q5_k…

【课程总结】Day18:Seq2Seq的深入了解

前言 在上一章【课程总结】Day17&#xff08;下&#xff09;&#xff1a;初始Seq2Seq模型中&#xff0c;我们初步了解了Seq2Seq模型的基本情况及代码运行效果&#xff0c;本章内容将深入了解Seq2Seq模型的代码&#xff0c;梳理代码的框架图、各部分组成部分以及运行流程。 框…

想做linux内核开发,该怎么开始(上)

作为一名应届生在选择从事 Linux 内核开发这一职业领域时&#xff0c;需要系统地规划自己的职业道路&#xff0c;这将有助于你更准确地了解未来的发展方向并制定相应的学习和职业发展计划。在这篇文章中&#xff0c;我将向你介绍应届生在 Linux 内核开发领域的职业道路规划&…

O’Reilly

--江上往来人&#xff0c;但爱鲈鱼美。 --君看一叶舟&#xff0c;出没风波里。 OReilly OReilly出版社出版的技术类图书 俗称动物系列 应该是每个技术人员的必备手册。 OReilly动物系列&#xff08;中译本&#xff09; 简介" 动物系列作为 OReilly 书籍的典型代表被普遍…

【Apache Doris】周FAQ集锦:第 18 期

【Apache Doris】周FAQ集锦&#xff1a;第 18 期 SQL问题数据操作问题运维常见问题其它问题关于社区 欢迎查阅本周的 Apache Doris 社区 FAQ 栏目&#xff01; 在这个栏目中&#xff0c;每周将筛选社区反馈的热门问题和话题&#xff0c;重点回答并进行深入探讨。旨在为广大用户…

基于级联深度学习算法在双参数MRI中检测前列腺病变的评估| 文献速递-AI辅助的放射影像疾病诊断

Title 题目 Evaluation of a Cascaded Deep Learning–based Algorithm for Prostate Lesion Detection at Biparametric MRI 基于级联深度学习算法在双参数MRI中检测前列腺病变的评估 Background 背景 Multiparametric MRI (mpMRI) improves prostate cancer (PCa) dete…

如何对我们要多次使用的页面进行一个抽取

有的时候,一个页面我们要多次使用,该怎么抽取呢? 创建一个文件夹,用于存放多次使用的页面 将要多次使用的组件(<template>)和风格(<style>)剪切出来,放入新建的页面 直接进行引用 导入 然后就可以使用

【FPGA设计】Vitis AI概述

一. Vitis AI简介 Vitis AI 是由 Xilinx&#xff08;现已被 AMD 收购&#xff09;提供的一套工具链和软件开发平台&#xff0c;用于简化和加速在基于 Xilinx FPGA 或自适应计算加速平台 (ACAP) 上部署深度学习推理应用的过程。Vitis AI 的目标是让开发者能够更容易地利用 FPGA…