gpt4 book ai didi

c# - CUDA 驱动程序 API 与 CUDA 运行时

转载 作者:IT老高 更新时间:2023-10-28 12:30:52 25 4
gpt4 key购买 nike

在编写 CUDA 应用程序时,您可以在驱动程序级别或运行时级别工作,如图所示(库是 CUFFT 和 CUBLAS 用于高级数学):

CUDA layer model
(来源:tomshw.it)

我假设两者之间的权衡是提高低级 API 的性能,但以增加代码复杂性为代价。具体的区别是什么?有哪些重要的事情是高级 API 不能做的?

我正在使用 CUDA.net 与 C# 进行互操作,它是作为驱动程序 API 的拷贝构建的。这鼓励在 C# 中编写大量相当复杂的代码,而使用运行时 API 的 C++ 等效代码会更简单。这样做有什么好处吗?我可以看到的一个好处是更容易将智能错误处理与其他 C# 代码集成。

最佳答案

CUDA 运行时可以将您的 CUDA 内核编译并链接到可执行文件中。这意味着您不必将 cubin 文件与您的应用程序一起分发,或者处理通过驱动程序 API 加载它们。正如您所指出的,它通常更易于使用。

相比之下,驱动程序 API 更难编程,但可以更好地控制 CUDA 的使用方式。程序员必须直接处理初始化、模块加载等。

显然,通过驱动程序 API 可以查询比通过运行时 API 更详细的设备信息。例如,设备上可用的空闲内存只能通过驱动程序 API 查询。

来自 CUDA 程序员指南:

It is composed of two APIs:

  • A low-level API called the CUDA driver API,
  • A higher-level API called the CUDA runtime API that is implemented on top of the CUDA driver API.

These APIs are mutually exclusive: An application should use either one or the other.

The CUDA runtime eases device code management by providing implicit initialization, context management, and module management. The C host code generated by nvcc is based on the CUDA runtime (see Section 4.2.5), so applications that link to this code must use the CUDA runtime API.

In contrast, the CUDA driver API requires more code, is harder to program and debug, but offers a better level of control and is language-independent since it only deals with cubin objects (see Section 4.2.5). In particular, it is more difficult to configure and launch kernels using the CUDA driver API, since the execution configuration and kernel parameters must be specified with explicit function calls instead of the execution configuration syntax described in Section 4.2.3. Also, device emulation (see Section 4.5.2.9) does not work with the CUDA driver API.

API 之间没有明显的性能差异。你的内核如何使用内存以及它们在 GPU 上的布局方式(在扭曲和 block 中)将产生更明显的效果。

关于c# - CUDA 驱动程序 API 与 CUDA 运行时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/242894/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com