CUDA __syncthreads()编译得很好但用红色加下划线

时间:2012-12-15 16:19:58

标签: visual-studio-2010 cuda

我一直在使用CUDA 4.2一周,我有一点问题。 当我编写__syncthreads()函数时,它会加下划线并看起来像是错误的......

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

  

identifier __syncthreads();未定义。

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

  

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

所以我猜测一切正常,但Visual Studio强调功能的事实令我困惑......如何让Visual Studio知道在编译过程之前定义了这个函数?

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

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

4 个答案:

答案 0 :(得分:2)

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

#ifndef __CUDACC__  
    #define __CUDACC__
#endif

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

答案 1 :(得分: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(); is undefined need a help

答案 2 :(得分: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/

答案 3 :(得分:0)

尝试在__global__文件中定义.cuh函数的主体时遇到此问题。将函数主体移至.cu源文件中即可解决此问题。

但是,这意味着我的某些模板化函数无法使用诸如__syncthreads()之类的基本功能,因为模板可能必须在.cuh标头中定义。

因此,您可能需要放弃功能模板,而坚持使用多个功能,每个功能的名称稍有不同。