【问题标题】:Can I use cuda without using nvcc on my host code?我可以在主机代码上不使用 nvcc 的情况下使用 cuda 吗?
【发布时间】:2016-02-12 01:01:33
【问题描述】:

我正在编写一个执行 cuda 内核的头库。我想知道是否有办法绕过 >> 语法,或者从 nvcc 获取 C 源代码输出?

【问题讨论】:

  • 您可以通过将内核编译成 CUBIN 或 PTX 文件来避免调用 nvcc,并使用驱动程序 API 加载并执行它,最终将运行时 API 的 <<<...>>> 语法调用替换为致电cuLaunchKernel。 (如果这足够了,我会详细说明一下并将其转换为答案)
  • 一句话回答就是“使用CUDA驱动API”。
  • 谢谢,这正是我想要的!

标签: cuda gpgpu


【解决方案1】:

您可以改用 CUDA driver API 来避免宿主语言扩展。它有点冗长,您将需要更多样板代码来管理上下文,但这并不太难。

通常,您可以编译为 PTX 或二进制有效负载以在运行时加载,但 NVIDIA 现在还提供了一个实验性的 JIT CUDA C 编译器库 libNVVM,如果您希望从源代码获得 JIT,您可以尝试一下。

【讨论】:

  • 如果还想依赖runtime API还不够:在宿主代码中使用cuLaunchKernel,手动包含正确的runtime headers,使用nvcc链接设备和宿主代码?
  • @pszilard:不。运行时 API 依赖于大量 nvcc 生成的样板文件和几个未记录的 API 调用来使惰性上下文初始化工作。如果您不使用 nvcc 进行编译,您将不会得到它,并且不会有任何效果。除非您使用驱动程序 API 并自己显式管理上下文和模块。
猜你喜欢
  • 1970-01-01
  • 2020-04-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-30
相关资源
最近更新 更多