CUDA: использование realloc внутри ядра - PullRequest
3 голосов
/ 16 марта 2011

Я знаю, что можно использовать malloc внутри ядра для выделения памяти в глобальной памяти графического процессора. Можно ли также использовать realloc?

Ответы [ 2 ]

3 голосов
/ 29 мая 2012

Вы можете написать собственную функцию устройства realloc для вашего типа данных.

Просто выделите новое пространство для нового массива, скопируйте старые значения в новое, освободите старое пространство массива, верните новое с большим пространством.

Примерно как следующий фрагмент кода:

__device__ MY_TYPE* myrealloc(int oldsize, int newsize, MY_TYPE* old)
{
    MY_TYPE* newT = (MY_TYPE*) malloc (newsize*sizeof(MY_TYPE));

    int i;

    for(i=0; i<oldsize; i++)
    {
        newT[i] = old[i];
    }

    free(old);
    return newT;
}

Но обязательно позвони, если тебе это действительно нужно. Также добавьте правильную проверку ошибок.

3 голосов
/ 16 марта 2011

В Руководстве по программированию Cuda, когда они вводят функции malloc и free, нет упоминания о realloc.Я бы предположил, что он не существует.

Если вы хотите знать это наверняка, почему бы вам не написать простое ядро ​​и не попробовать его использовать?

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