2

我在具有许多 CUDA 加速功能的 Windows 中开发了一个 C++ DLL。目前我还没有创建 DllMain 函数,因为它不是强制性的。

我知道在 DllMain 中可以调用的函数有很多限制。

我只是想知道在 DllMain 中调用 CUDA Runtime 函数只是为了初始化默认上下文是否安全,以便后续的 CUDA 调用更快?

我正在使用 Visual Studio 2008、CUDA 5.0 和 Windows 8 进行开发。

4

1 回答 1

3

阅读 DLLMain 文档,我建议不要这样做。从文档:

警告 您可以在 DLL 入口点执行的操作受到严格限制。要提供更复杂的初始化,请为 DLL 创建一个初始化例程。您可以要求应用程序在调用 DLL 中的任何其他例程之前调用初始化例程。

进一步来说:

调用需要除 Kernel32.dll 之外的 DLL 的函数可能会导致难以诊断的问题。

由于 CUDA Runtime API 需要 cudart.dll,这适用于您的问题。

所以我会为你的库创建一个初始化函数来进行 CUDA 初始化,并要求在应用程序启动时显式调用它。

于 2012-09-10T03:14:55.197 回答