sj7*_*755 19 intellisense cuda visual-studio-2010 gpu-programming
我刚刚开始进行CUDA编程,而且它的功能非常好,我的GPU已经被认可了.我在这里使用这个非常有用的指南在Visual Studio中部分设置了Intellisense:
http://www.ademiller.com/blogs/tech/2010/10/visual-studio-2010-adding-intellisense-support-for-cuda-c/
和这里:
http://www.ademiller.com/blogs/tech/2011/05/visual-studio-2010-and-cuda-easier-with-rc2/
但是,Intellisense仍然没有像这样接受内核调用:
// KernelCall.cu
#include <iostream>
#include "cuda.h"
#include "cuda_runtime.h"
#include "device_launch_parameters.h"
__global__ void kernel(void){}
int main()
{
kernel<<<1,1>>>();
system("pause");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
行内核<<< 1,1 >>>()用红色下划线,特别是第一个左边的一个箭头,错误读数为"Error:expected and expression".但是,如果我将鼠标悬停在该函数上,则会正确显示其返回类型和参数.它仍然编译得很好,我只是想知道如何摆脱这个小烦恼.
小智 28
哇,这个帖子上有很多灰尘.我提出了一个宏修复(好吧,更像是解决方法......),我想我会分享:
// nvcc does not seem to like variadic macros, so we have to define
// one for each kernel parameter list:
#ifdef __CUDACC__
#define KERNEL_ARGS2(grid, block) <<< grid, block >>>
#define KERNEL_ARGS3(grid, block, sh_mem) <<< grid, block, sh_mem >>>
#define KERNEL_ARGS4(grid, block, sh_mem, stream) <<< grid, block, sh_mem, stream >>>
#else
#define KERNEL_ARGS2(grid, block)
#define KERNEL_ARGS3(grid, block, sh_mem)
#define KERNEL_ARGS4(grid, block, sh_mem, stream)
#endif
// Now launch your kernel using the appropriate macro:
kernel KERNEL_ARGS2(dim3(nBlockCount), dim3(nThreadCount)) (param1);
Run Code Online (Sandbox Code Playgroud)
我更喜欢这种方法,因为由于某种原因,我总是在我的代码中丢失'<<<',但宏通过语法着色获得了一些帮助:).
Bri*_*ler 13
Visual Studio为C++提供了IntelliSense,来自火箭科学家博客的技巧基本上依赖于CUDA-C对C++的相似性,仅此而已.
在C++语言中,正确解析尖括号很麻烦.你已经得到了<
和模板一样少的东西,并且<<
作为移位,记得不久前我们不得不在嵌套模板声明之间放置一个空格.
所以事实证明,NVIDIA的那个提出这种语法的人不是语言专家,碰巧选择了最差的分隔符,然后将它增加了三倍,好吧,你将遇到麻烦.令人惊讶的是,当Intellisense看到这一点时,它会起作用.
我知道在CUDA中获得完整IntelliSense的唯一方法是从Runtime API切换到Driver API.C++只是C++,而CUDA仍然是(有点)C++,<<<>>>
语言解析不需要解决.
从VS 2015和CUDA 7开始,您可以在其他任何内容之前添加这两个包含,只要您的文件具有.cu
扩展名:
#include "cuda_runtime.h"
#include "device_launch_parameters.h"
Run Code Online (Sandbox Code Playgroud)
不需要MACROS或任何东西.之后一切都会完美运作.