CUDA程序有问题

时间:2011-02-27 22:19:08

标签: c++ c 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);
}

现在它只是一个测试程序,并不意味着做任何有用的事情。编译并运行正常,但它似乎没有正确设置grid [0]。是因为我在设备代码中设置了网格[0]错误了吗?

1 个答案:

答案 0 :(得分:4)

使用

float3 *grid[sizeOfGrid];

你正在为float3分配一个指针数组,而不是一个float3数组。 你应该声明

float3 grid[sizeOfGrid];

并使用。而不是 - &gt;,或

float3 *grid;

并使用malloc和free。