5、CUDA编程:设备、初始化与上下文管理

CUDA编程:设备、初始化与上下文管理

1. CUDA编译过程

CUDA编译分为离线编译和在线编译(即时编译,JIT)。离线编译是指提前将中间代码(如PTX)编译为特定GPU版本的原生微代码。nvcc可以通过调用PTX汇编器ptxas来离线编译PTX,生成的微代码会被写入一个名为“cubin”的CUDA二进制文件中。可以使用cuobjdump –dump-sass命令反汇编cubin文件,以查看GPU特定微代码的SASS助记符。

在线编译则是在运行应用程序的计算机上即时编译中间代码(如PTX)以立即执行。当使用–fatbin选项(默认选项)构建的CUDART应用程序运行时,在线编译会自动发生。可执行文件中包含每个内核的.cubin和PTX表示,如果在不支持任何.cubin表示的硬件上运行,驱动程序将编译PTX版本。由于编译PTX可能很耗时,驱动程序会将这些编译后的内核缓存在磁盘上。

此外,还可以在运行时生成PTX,并通过调用cuModuleLoadEx()由驱动程序显式编译。驱动程序API不会自动嵌入或加载GPU微代码。可以将.cubin和.ptx文件传递给cuModuleLoadEx(),如果.cubin不适合目标GPU架构,将返回错误。对于驱动程序API开发者来说,一个合理的策略是编译并嵌入PTX,并始终使用cuModuleLoadEx()将其即时编译到GPU上,依靠驱动程序缓存编译后的微代码。

graph LR
    classDef startend fill:#F5EBFF,stroke:#BE8FED,stroke-width:2px
    classDef process fil
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值