Я новичок в CUDA. Может кто-нибудь объяснить мне, пожалуйста, почему этот код является недействительным? Я пытаюсь запустить его на видеокарте GT240, и средство проверки памяти показывает мне ошибку нарушения доступа в строке с buf [0] [0].
Вот код:
__global__ void addKernel(char *c)
{
int i = threadIdx.x;
if(i < 1) {
char* buf[2];
char some[3] = "ab";
char another[3] = "cd";
buf[0] = some;
buf[1] = another;
c[i] = buf[0][0];
}
}
Спасибо.
UPDATE:
Возможное решение для вычисления чего-либо в одной функции и передачи результатов другой функции - это сохранение данных в глобальной памяти (вычисление 1.x), например:
__device__ char* buf[2];
__device__ char some[3];
__device__ char another[3];
__global__ void addKernel(int *c, const int *a, const int *b)
{
int i = threadIdx.x;
if(i < 1) {
some[0] = 'a';
some[1] = 'b';
another[0] = 'c';
another[1] = 'd';
buf[0] = some;
buf[1] = another;
buf[0][0] = 'b';
c[i] = 1;
}
}