Cuda выделение памяти - PullRequest
0 голосов
/ 31 марта 2020

Я работаю с Jetson TX2. Я снимаю изображения с камеры, как unsigned char *image.

Затем мне нужно немного обработать изображение. Для этого я использую графический процессор. С помощью Jetson TX2 мы можем избежать передачи данных хоста / устройства и устройства / хоста, поскольку оперативная память распределяется между графическим процессором и процессором. Для этого я использую:

int height = 6004 ;
int width = 7920 ;
int NumElement = height*width ;
unsigned char *img1 ;
cudaMallocManaged(&img1, NumElement*sizeof(unsigned char));

При использовании этого метода ограничений по PCI нет. Моя проблема в том, как назначить изображение из буфера, img1. Этот метод работает, но он слишком длинный:

for(int i =0 ; i<NumElement ; i++)
    img[i] = buffer[i] ;

Я теряю преимущество графического процессора, использующего naive для l oop ... И я, если просто использовать этот метод:

img = buffer

Вот так у меня возникает проблема при входе в ядро.

1 Ответ

1 голос
/ 31 марта 2020

Используйте cudaMemcpy с cudaMemcpyDefault, что-то вроде

cudaMemcpy(&buffer[0], &img[0], NumElement * sizeof(char), cudaMemcpyDefault);

Вы также можете потенциально использовать memcpy

...