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>>>();

3番目<は「expected an expression」エラーになりますが、コードは問題なくコンパイルされ、カーネル関数に到達します。

構成プロパティ:

  • cpp ファイル項目タイプ c/c++ コンパイラ
  • cu ファイル項目タイプ cuda c/c++
  • cuh ファイル アイテム タイプはビルドに参加しません
  • カーネル ファイル アイテム タイプはビルドに参加しません
4

1 に答える 1

2

IDE (MSVC++) とそれが IntelliSense に使用するコンパイラ フロントエンド (オートコンプリートの提案、および「正しくない」コードの下の赤い線) は、CUDA とその固有の構文について認識していません。VS がほとんどの CUDA コードを理解する方法はいくつかありますが、CUDA の<<< >>>for ブロック/スレッドの選択は、C++ コンパイラ フロントエンドが理解できない非常に残念なものです (少なくとも、パーサーに非常に広範な変更が必要になります)。 )。

全体として、下の赤い波線と一緒に暮らす必要があります<<< >>>

于 2013-03-04T15:59:37.737 に答える