2013-10-17 94 views
0

代碼: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

+5

'uchar'和'沒有定義uint'。你的意思是'unsigned char'和'unsigned int'嗎? –

+2

也許我錯了,但是看起來''''extern「C」'後沒有關閉? – JackOLantern

回答

1

正如已經指出的那樣,您有一些語法錯誤。

  1. uchar沒有在程序中的任何位置定義。爲其添加 defintion或將其更改爲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 ... 
    
相關問題