我一直在使用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
答案 0 :(得分:2)
我在cu文件的顶部添加了以下几行,它开始识别这些功能。出于某种原因,Intellisense没有拿到这个#define:
#ifndef __CUDACC__
#define __CUDACC__
#endif
我在代码中丢失了一些颜色编码,但我不再发现奇怪的误报错误。
答案 1 :(得分:1)
我正在使用CUDA 9.1
和Visual 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
答案 2 :(得分:0)
我有CUDA 8.0
和Visual 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>
答案 3 :(得分:0)
尝试在__global__
文件中定义.cuh
函数的主体时遇到此问题。将函数主体移至.cu
源文件中即可解决此问题。
但是,这意味着我的某些模板化函数无法使用诸如__syncthreads()
之类的基本功能,因为模板可能必须在.cuh
标头中定义。
因此,您可能需要放弃功能模板,而坚持使用多个功能,每个功能的名称稍有不同。