在 DLLMain 中调用 CUDA 函数
Posted
技术标签:
【中文标题】在 DLLMain 中调用 CUDA 函数【英文标题】:Calling CUDA function in DLLMain 【发布时间】:2012-09-09 18:12:59 【问题描述】:我在 Windows 中开发了一个 C++ DLL,它具有许多 CUDA 加速功能。 目前我还没有创建 DllMain 函数,因为它不是强制性的。
我知道在 DllMain 中可以调用的函数有很多限制。
我只是想知道在DllMain中调用CUDA Runtime函数只是为了初始化默认上下文是否安全,以便后续的CUDA调用更快?
我正在使用 Visual Studio 2008、CUDA 5.0 和 Windows 8 进行开发。
【问题讨论】:
【参考方案1】:Reading the DLLMain documentation,我建议不要这样做。来自文档:
警告 在 DLL 入口点中可以执行的操作受到严格限制。要提供更复杂的初始化,请为 DLL 创建一个初始化例程。您可以要求应用程序在调用 DLL 中的任何其他例程之前调用初始化例程。
更具体地说:
调用需要 Kernel32.dll 以外的 DLL 的函数可能会导致难以诊断的问题。
由于 CUDA Runtime API 需要 cudart.dll,这适用于您的问题。
所以我会为你的库创建一个初始化函数来进行 CUDA 初始化,并要求在应用程序启动时显式调用它。
【讨论】:
马克是对的。 DllMain() 的限制很多。另见:msdn.microsoft.com/en-us/windows/hardware/gg487379.aspx @ArchaeaSoftware,harrism... 现在静态 cuda 运行时自 CUDA 5.5 起可用,如果我将我的 DLL 链接到静态 cuda 运行时,这个答案是否仍然适用。 静态运行时很好地预防了 DLL 地狱,但它并没有真正满足您从 DllMain() 初始化默认上下文的愿望,这似乎仍然不明智。如果我是你,我只会让我的 DLL 的用户调用一个初始化函数。以上是关于在 DLLMain 中调用 CUDA 函数的主要内容,如果未能解决你的问题,请参考以下文章