1

代码:

#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

4

1 回答 1

2

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

  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 ...
    
于 2013-10-19T14:18:35.493 回答