【发布时间】:2012-11-28 00:56:46
【问题描述】:
我尝试使用 CUDA 驱动程序 API 运行由 .cl 内核生成的 PTX 汇编代码。我采取的步骤是这些(标准的 opencl 程序):
1) 加载 .cl 内核
2) JIT 编译它
3) 获取编译好的ptx代码并保存。
到目前为止一切顺利。
我注意到 ptx 程序集中的一些特殊寄存器,%envreg3,%envreg6 等。问题是当我尝试执行带有驱动程序 API 的代码。所以代码陷入了无限循环,无法正确运行。但是,如果我手动设置值(不完全是我将 %envreg6 替换为 ptx 中的块大小),代码正在执行并且我得到正确的结果(与 cpu 结果相比是正确的)。
有谁知道我们如何为这些寄存器设置值,或者如果我遗漏了什么?即 cuLaunchKernel 上的标志,为这些寄存器设置值?
【问题讨论】:
-
您最终是否以某种方式实现了自动化?