Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Visual c++ 在DLLMain中调用CUDA函数 我在Windows中开发了一个C++ DLL,它具有许多CUDA加速功能。 目前我还没有创建DllMain函数,因为它不是必需的_Visual C++_Dll_Cuda - Fatal编程技术网

Visual c++ 在DLLMain中调用CUDA函数 我在Windows中开发了一个C++ DLL,它具有许多CUDA加速功能。 目前我还没有创建DllMain函数,因为它不是必需的

Visual c++ 在DLLMain中调用CUDA函数 我在Windows中开发了一个C++ DLL,它具有许多CUDA加速功能。 目前我还没有创建DllMain函数,因为它不是必需的,visual-c++,dll,cuda,Visual C++,Dll,Cuda,我知道在DllMain中可以调用的函数有很多限制 我只是想知道,在DllMain中调用CUDA运行时函数只是为了初始化默认上下文是否安全,以便后续CUDA调用更快 我正在使用Visual Studio 2008、CUDA 5.0和Windows 8进行开发。,我建议不要使用它。从文档中: 警告:在DLL入口点中可以执行的操作存在严重限制。要提供更复杂的初始化,请为DLL创建初始化例程。在调用DLL中的任何其他例程之前,可以要求应用程序调用初始化例程 更具体地说: 调用需要Kernel32.dll

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

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

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

,我建议不要使用它。从文档中:

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

更具体地说:

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

由于CUDA运行时API需要cudart.dll,这适用于您的问题


因此,我将为您的库创建一个进行CUDA初始化的初始化函数,并要求在应用程序启动时显式调用它。

Mark是正确的。对DllMain()的限制很多。另见:@ArchaeaSoftware,harrism。。。自从cuda 5.5以来,静态cuda运行时已经可用,如果我将我的DLL链接到静态cuda运行时,这个答案是否仍然适用。静态运行时很好地预防了DLL地狱,但它并没有真正满足您从DllMain()初始化默认上下文的愿望,这似乎仍然是不明智的。如果我是你,我会让DLL的用户调用初始化函数。