这是我的代码:
#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]错误了吗?
答案 0 :(得分:4)
使用
float3 *grid[sizeOfGrid];
你正在为float3分配一个指针数组,而不是一个float3数组。 你应该声明
float3 grid[sizeOfGrid];
并使用。而不是 - &gt;,或
float3 *grid;
并使用malloc和free。