【问题标题】:CUDA: incomplete type is not allowed et al.CUDA:不允许不完整的类型等。
【发布时间】:2013-10-26 15:32:49
【问题描述】:

代码:

#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

【问题讨论】:

  • ucharuint 未定义。你的意思是unsigned charunsigned int
  • 也许我错了,但是extern "C"后面的括号{好像没有闭合?

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


【解决方案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 ...
    

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多