我在具有许多 CUDA 加速功能的 Windows 中开发了一个 C++ DLL。目前我还没有创建 DllMain 函数,因为它不是强制性的。
我知道在 DllMain 中可以调用的函数有很多限制。
我只是想知道在 DllMain 中调用 CUDA Runtime 函数只是为了初始化默认上下文是否安全,以便后续的 CUDA 调用更快?
我正在使用 Visual Studio 2008、CUDA 5.0 和 Windows 8 进行开发。
我在具有许多 CUDA 加速功能的 Windows 中开发了一个 C++ DLL。目前我还没有创建 DllMain 函数,因为它不是强制性的。
我知道在 DllMain 中可以调用的函数有很多限制。
我只是想知道在 DllMain 中调用 CUDA Runtime 函数只是为了初始化默认上下文是否安全,以便后续的 CUDA 调用更快?
我正在使用 Visual Studio 2008、CUDA 5.0 和 Windows 8 进行开发。
阅读 DLLMain 文档,我建议不要这样做。从文档:
警告 您可以在 DLL 入口点执行的操作受到严格限制。要提供更复杂的初始化,请为 DLL 创建一个初始化例程。您可以要求应用程序在调用 DLL 中的任何其他例程之前调用初始化例程。
进一步来说:
调用需要除 Kernel32.dll 之外的 DLL 的函数可能会导致难以诊断的问题。
由于 CUDA Runtime API 需要 cudart.dll,这适用于您的问题。
所以我会为你的库创建一个初始化函数来进行 CUDA 初始化,并要求在应用程序启动时显式调用它。