2011-02-27 29 views
0

這裏是我的代碼:問題的CUDA程序

#include <vector_types.h> 
#define sizeOfGrid 5 
__global__ void stuff(float3 *grid) { 
    grid[0].x = 0.4f; //PROBLEM HERE?! 
} 
int main(void) { 
    float3 *grid[sizeOfGrid]; 
    float3 *dev_grid; 
    HANDLE_ERROR(cudaMalloc((void**)&dev_grid, sizeOfGrid*sizeof(float3))); 
    for(int i = 0; i < sizeOfGrid; i++) 
    { 
     grid[i] = new float3(); 
     grid[i]->x = 1.3f; 
     grid[i]->y = 1.3f; 
     grid[i]->z = 1.3f; 
    } 


    HANDLE_ERROR(cudaMemcpy(dev_grid, grid, sizeOfGrid * sizeof(float3), cudaMemcpyHostToDevice)); 
    stuff<<<sizeOfGrid, 1>>> (dev_grid); 
    cudaMemcpy(grid, dev_grid, sizeOfGrid*sizeof(float3), cudaMemcpyDeviceToHost); 
    cudaFree(dev_grid); 
} 

現在它只是一個測試程序,並不意味着做任何有用的東西。編譯並運行良好,但它似乎沒有正確設置網格[0]。是否因爲我在設備代碼中設置了錯誤的網格[0]?

回答

4

隨着

float3 *grid[sizeOfGrid]; 

你分配一個指針數組來FLOAT3,不FLOAT3的數組。 您應該聲明

float3 grid[sizeOfGrid]; 

和使用。而不是 - >或

float3 *grid; 

並使用malloc和free。

+0

謝謝!成功了!不知道你是否和IRC聊天室裏的人一樣。但是要感謝你們兩個人,如果你們不是。 :d – ninjaneer