CUDA:不允许不完整类型等。

时间:2013-10-17 22:52:19

标签: visual-studio-2010 visual-c++ cuda

代码:

#include <cutil.h>
#include <cstdlib>
#include <cstdio>
#include <string.h>

#if defined(__APPLE__) || defined(MACOSX)
    #include <GLUT/glut.h>
#else
    #include <GL/glut.h>
#endif
#include <cuda_gl_interop.h>

#include "fluid_system_kern.cu"

extern "C"
{

// Compute number of blocks to create
int iDivUp (int a, int b) {
    return (a % b != 0) ? (a / b + 1) : (a / b);
}
void computeNumBlocks (int numPnts, int minThreads, int &numBlocks, int &numThreads)
{
    numThreads = min( minThreads, numPnts );
    numBlocks = iDivUp ( numPnts, numThreads );
}


void Grid_InsertParticlesCUDA ( uchar* data, uint stride, uint numPoints )
{
    int numThreads, numBlocks;
    computeNumBlocks (numPoints, 256, numBlocks, numThreads);

    // transfer point data to device
    char* pntData;
    size = numPoints * stride;
    cudaMalloc( (void**) &pntData, size);
    cudaMemcpy( pntData, data, size, cudaMemcpyHostToDevice);    

    // execute the kernel
    insertParticles<<< numBlocks, numThreads >>> ( pntData, stride );

    // transfer data back to host
    cudaMemcpy( data, pntData, cudaMemcpyDeviceToHost);

    // check if kernel invocation generated an error
    CUT_CHECK_ERROR("Kernel execution failed");
    CUDA_SAFE_CALL(cudaGLUnmapBufferObject(vboPos));
}

错误:

src/fluid_system.cu(30): error : incomplete type is not allowed (points to line -> "void Grid_InsertParticleCUDA")
src/fluid_system.cu(30): error : identifier "uchar" is undefined (points to line -> "void Grid_InsertParticleCUDA")
src/fluid_system.cu(30): error : identifier "data" is undefined (points to line -> "void Grid_InsertParticleCUDA")
src/fluid_system.cu(30): error : expected a ")" (points to line -> "void Grid_InsertParticleCUDA")
src/fluid_system.cu(31): error : expected a ";" (points to line after line-> "void Grid_InsertParticleCUDA")

我不明白这似乎是什么问题。因为我没有看到任何奇怪的那条线。我使用CUDA 4.2

1 个答案:

答案 0 :(得分:1)

正如已经指出的,你有一些语法错误。

  1. uchar未在您的计划中的任何位置定义。要么添加一个 定义它或将其更改为unsigned char这是正确的 C / C ++类型。
  2. 您的花括号排列不正确:

    extern "C"
    {  // this opening curly-brace has no proper corresponding close-brace
    
    // Compute number of blocks to create
    int iDivUp (int a, int b) {  // this open brace
        return (a % b != 0) ? (a / b + 1) : (a / b);
    } // ... closes here
    //  you should insert another closing curly-brace here }
    void computeNumBlocks ...