0

我已经使用 Visual Studio 2010 编译了我的 cuda 项目。我反驳了一个错误:

student_func.cu(65):错误 C2059:语法错误:'<'

发生错误的行是调用内核函数时:

rgba_to_greyscale<<< gridSize, blockSize >>>(d_rgbaImage, d_greyImage, numRows, numCols);

这是 student_func.cu 的代码:

#include "reference_calc.cpp"
#include "utils.h"
#include <stdio.h>



__global__ 
void rgba_to_greyscale(const uchar4* const rgbaImage,
                   unsigned char* const greyImage,
                   int numRows, int numCols)
{

}


void your_rgba_to_greyscale(const uchar4 * const h_rgbaImage, uchar4 * const d_rgbaImage,
                        unsigned char* const d_greyImage, size_t numRows, size_t numCols)
{
    //You must fill in the correct sizes for the blockSize and gridSize
    //currently only one block with one thread is being launched
    const dim3 blockSize(1, 1, 1);  //TODO
    const dim3 gridSize( 1, 1, 1);  //TODO
    rgba_to_greyscale<<< gridSize, blockSize >>>(d_rgbaImage, d_greyImage, numRows, numCols);

    cudaDeviceSynchronize(); checkCudaErrors(cudaGetLastError());
}
4

1 回答 1

1

请首先查看本指南,了解如何将 CUDA 集成到 Visual Studio C++ 项目中。

此外,您应该组织代码,以便:

  • .h、.cpp、.c、.hpp文件不应包含 CUDA 代码(如__device__您的情况下的函数和内核调用)。但是,在这些文件中,您可以调用 CUDA API(例如cudaMalloccudaMemcpy等)。这些文件由 NVCC 以外的编译器编译。
  • .cuh、.cu文件应包含 CUDA 代码。这些文件由 NVCC 编译。

例如,假设有一个基于 GPU 的 FDTD 代码。我通常会执行以下操作(Visual Studio 2010)。

  • main.cpp文件,包括 CPU-GPU 内存传输;
  • FDTD.cu,包括一个extern "C" void E_update(...)包含内核<<< >>>调用的函数;
  • main.h文件,包括extern "C" void E_update(...)原型;
  • FDTD.cuh,包括__global__ void E_update_kernel(...)函数。
于 2013-06-14T21:50:40.150 回答