Проблема с программой CUDA - PullRequest
0 голосов
/ 28 февраля 2011

Вот мой код:

#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 Ответ

4 голосов
/ 28 февраля 2011

С

float3 *grid[sizeOfGrid];

вы выделяете массив указателей для float3, а не массив float3.Вы должны объявить

float3 grid[sizeOfGrid];

и использовать.вместо -> или

float3 *grid;

и используйте malloc и free.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...