【问题标题】:Calling CUDA function in DLLMain在 DLLMain 中调用 CUDA 函数
【发布时间】:2012-09-09 18:12:59
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: visual-c++ dll cuda


    【解决方案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 的用户调用一个初始化函数。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多