Когда я определяю массив на устройстве (который инициализируется строкой «Hello» в этом примере) и пытаюсь скопировать его на хост, я получаю код ошибки cudaErrorInvalidValue
.Однако из ядра можно получить доступ к d_helloStr[]
.Обращаясь к главе B.2.1 руководства по программированию CUDA, такая переменная также должна быть доступна через библиотеку времени выполнения.Почему этот пример кода не работает?
#include <cuda.h>
#include <stdio.h>
__device__ char d_helloStr[] = {'H','e','l','l','o','\0'};
// Host function
int
main(int argc, char** argv)
{
cudaError_t err;
char h_helloStr [sizeof(d_helloStr)];
// copy device string to host string:
err = cudaMemcpy(h_helloStr, d_helloStr, sizeof(d_helloStr), cudaMemcpyDeviceToHost);
printf("err = %d\n", err);
// result string:
printf("%s\n", h_helloStr);
return 0;
}