Вот мой код:
#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] в коде устройства?