4

我有以下文件:

// Main.cpp
#include "kernel_util.cuh"

int main()
{
    call_kernel();
}

// kernel_util.cuh
#ifndef KERNEL_UTIL
#define KERNEL_UTIL

#include <cuda_runtime.h>

void call_kernel();

#endif

// kernel_util.cu
#include "kernel_util.cuh"
#include "kernel.curnel"

#define thread 16

void call_kernel() {

    dim3 blocks( ( width + thread - 1 ) / thread, ( height + thread - 1 ) / thread );

    dim3 threads( thread, thread );

    kernel<<<blocks, threads>>>();
}

// kernel.curnel
#ifndef KERNEL
#define KERNEL

#include <cuda_runtime.h>

__global__ void kernel() {

}

#endif

我安装了带有 64 位编译器和 CUDA 5.0 工具包的 Visual Studio 2010。上面的代码编译成功但是行

kernel<<<blocks, threads>>>();

3rd<给出“expected an expression”错误,但代码编译没有问题并达到内核函数。

配置属性:

  • cpp 文件项类型 c/c++ 编译器
  • cu 文件项类型 cuda c/c++
  • cuh 文件项类型 不参与构建
  • curnel 文件项类型 不参与构建
4

1 回答 1

2

IDE (MSVC++) 和它用于 IntelliSense 的编译器前端(自动完成建议和“不正确”代码下的红线)对 CUDA 及其特殊语法一无所知。VS 有一些方法可以理解大多数 CUDA 代码,但是在<<< >>>CUDA 中选择块/线程是非常不幸的,C++ 编译器前端无法理解(至少,它需要对解析器进行非常广泛的修改)。

总而言之,你必须忍受下面的红色波浪线<<< >>>

于 2013-03-04T15:59:37.737 回答