Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

CUDA, как загружать и выгружать двухмерный массив из памяти GPU

10K
22 мая 2012 года
Frenzyk
41 / / 16.01.2009
На хосте код, создающий динамический двухмерный массив.


Код:
template<class float_double> void createMatrix(float_double ***Matrixp,unsigned int matrixSize)
    {
        *Matrixp = new float_double*[matrixSize];
        float_double **c= *Matrixp;
        for (int i=0; i<matrixSize; i++) //цикл по всем указателям
        {
         c[i]=new float_double[matrixSize]; //выделить память на строку i
        }

    }


void someFunc()
{
    float **A;
    createMatrix( &A,MatSize);
   
    float_double *aDev = 0;
    size_t apitch=0;
    cudaMallocPitch((void **)&aDev, &apitch, MatSize*sizeof(float_double), MatSize );
    // как быть дальше?

}
Что делать далье? И можно ли вообще передать в ядро float_double **aDev ; и работать с ним как с полноценным двухмерным aDev[y][x]? Ну и как правильно выгрузить такой массив?
412
24 мая 2012 года
grgdvo
323 / / 04.07.2007
cudaMemcpy, а указатель передать как параметр в ядерную функцию
10K
26 мая 2012 года
Frenzyk
41 / / 16.01.2009
Так в двухммерном же массив указателей + указатель на указаель, который указывает на этот массив.
412
27 мая 2012 года
grgdvo
323 / / 04.07.2007
Сорри. не обратил сразу внимания.
Насколько мне известно, память под обычные многомерные массивы может выделяться на устройстве только линейно cudaMalloc (cudaMallocPitch). Поэтому к многомерным массивам идет обращение только через одномерный высчитываемый индекс.
Во всяком случае я не нашел другой альтернативы и делал имеено так.

Вот исчерпывающее руководство по работе с память gpu
CUDA 4.2 memory management
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог