4

我已经使用 CUDA 4.2 一个星期了,但我遇到了一个小问题。当我编写 __syncthreads() 函数时,它会变成下划线,看起来好像是错误的......

然后,如果我将鼠标放在功能上,则会出现一条消息:

标识符 __syncthreads(); 未定义。

但是当我编译我的项目时,输出表单 build 说:

========== 构建:1 成功,0 失败,0 最新,0 跳过 ==========

所以我猜测一切正常,但 Visual Studio 强调该函数的事实让我感到困惑......我怎样才能让 Visual Studio 知道这个函数是在编译过程之前定义的?

注意:内核调用也会发生同样的事情: kernel<<<...,...>>> 其中第三个“<”也带有红色下划线...

我知道这可能是一个小问题,但我想解决它......非常感谢!我在带有 Cuda 4.2 和 Nsight 2.2 的 win7 上使用 Visual Studio 2010

4

5 回答 5

4

我在 cu 文件的顶部添加了以下几行,它开始识别这些函数。出于某种原因,Intellisense 没有选择这个#define:

#ifndef __CUDACC__  
    #define __CUDACC__
#endif

我在代码中丢失了一些颜色编码,但我不再遇到奇怪的误报错误。

于 2014-01-03T15:21:42.340 回答
1

我正在使用CUDA 9.1Visual Studio 2017 15.6.4。以下代码帮助我消除“__syncthreads() 未定义”错误。

//for __syncthreads()
#ifndef __CUDACC__ 
#define __CUDACC__
#endif
#include <device_functions.h>

但是,不推荐这种方法,因为它可能会带来不可预知的副作用。解决此智能感知警告的另一种方法是:

#ifdef __INTELLISENSE___
// in here put whatever is your favorite flavor of intellisense workarounds
#endif

参考: __syncthreads(); 未定义需要帮助

于 2018-03-25T05:09:37.607 回答
0

我有CUDA 8.0Visual Studio 2015我有同样的问题。以下几行帮助了我:
在这些行之后:(已经在代码中)

#include "cuda_runtime.h"
#include "device_launch_parameters.h"

我添加了这些行:

//for __syncthreads()
#ifndef __CUDACC_RTC__ 
#define __CUDACC_RTC__
#endif // !(__CUDACC_RTC__)

#include <device_functions.h>

它基于此链接:https ://devtalk.nvidia.com/default/topic/1009723/__syncthreads-and-atomicadd-are-undefined-in-visual-studio-2015/

于 2017-08-18T19:59:43.773 回答
0

尝试__global__在文件中定义函数体时遇到过这种情况.cuh。将函数体移动到.cu源文件中解决了它。

但是,这意味着我的一些模板化函数不能使用基本的东西,例如__syncthreads(),因为模板可能必须在.cuh标题中定义。

因此,您可能需要放弃函数模板,而是坚持使用几个函数,每个函数的名称略有不同。

于 2019-03-01T12:38:22.787 回答
-1

其他解决方案要么没有解决 Eclipse 2021-06 中使用 CMake 3.16.3 发生的相同问题,要么使用 CUDA Runtime Version = 10.1 产生以下警告:

/usr/include/device_functions.h:54:2: warning: #warning "device_functions.h is an internal header file and must not be used directly.  This file will be removed in a future CUDA release.

以下在 Eclipse 中给出了正确的突出显示和代码完成,并且没有产生编译警告:

#ifndef __CUDACC__
    #define __CUDACC__
    #include <device_functions.h>
#endif
于 2021-08-17T21:14:27.820 回答