Как выделить память в структуре в CUDA?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Как выделить память в структуре в CUDA?

Сообщение Anonymous »

Я новичок в CUDA, и я хочу создать простой проект CUDA, который использует структуру, которая содержит поле Size_t и поле массива Int. < /p>
Вот код. Выделение не удается на поле «Биты».

Код: Выделить всё

#include "z_cu_t.cuh"

int main()
{
z_t z = z_init(2);
z_cu_t* z_cu;
cudaMalloc(&z_cu, sizeof(z_cu_t));

z_cu_from_z(z_cu, &z); //Segmentation fault here

z_free(&z);
z_cu_free(z_cu);
cudaFree(z_cu);

return 0;
}
< /code>
z_cu_t.cu
#include 

#include 

#include "z_cu_t.cuh"

__global__ void z_cu_free(z_cu_t* z)
{
cudaFree(z->bits);
z->bits = 0;
z->size = 0;
}

void z_cu_from_z(z_cu_t* to, z_t const* from)
{
cudaMemcpy(&to->size, &from->size, sizeof(size_t), cudaMemcpyHostToDevice);
printf("OK\n");
cudaMalloc(&to->bits, sizeof(int) * from->size); //Segmentation fault here
printf("KO\n");
cudaMemcpy(to->bits, from->bits, sizeof(int) * from->size, cudaMemcpyHostToDevice);
}

void z_from_z_cu(z_t* to, z_cu_t const* from)
{
cudaMemcpy(&to->size, &from->size, sizeof(size_t), cudaMemcpyDeviceToHost);
cudaMalloc(&to->bits, sizeof(int) * to->size);
cudaMemcpy(to->bits, from->bits, sizeof(int) * to->size, cudaMemcpyDeviceToHost);
}
< /code>
z_cu_t.cuh
#ifndef Z_CU_T_H
#define Z_CU_T_H

struct z_cu_t_struct
{
int* bits;
size_t size;
};

typedef struct z_cu_t_struct z_cu_t;

__global__ void z_cu_free(z_cu_t* z);

extern "C"
{
#include "z_t.h"
}

void z_cu_from_z(z_cu_t* to, z_t const* from);
void z_from_z_cu(z_t* to, z_cu_t const* from);

#endif // Z_CU_T_H
< /code>
z_t.c
#include 
#include 

#include "z_t.h"

z_t z_init(size_t size)
{
z_t z;

z.size = size;
z.bits = malloc(sizeof(int) * size);
memset(z.bits, 0, sizeof(int) * size);

return z;
}

void z_free(z_t* z)
{
free(z->bits);
z->bits = 0;
z->size = 0;
}
< /code>
z_t.h
#ifndef Z_T_H
#define Z_T_H

struct z_t_struct
{
int* bits;
size_t size;
};

typedef struct z_t_struct z_t;

z_t z_init(size_t size);
void z_free(z_t* z);

#endif // Z_T_H
< /code>
Затем я компилируюсь и компилируется и ссылкой проект: < /p>
nvcc -c main.cu
nvcc -rdc=true -c z_cu_t.cu
nvcc z_t.o main.o z_cu_t.o -o main
< /code>
Выход: < /p>
OK
Segmentation error (core dumped)
< /code>
он сбои на строке 18 "z_cu_t.cu": < /p>
    cudaMalloc(&to->bits, sizeof(int) * from->size); //Segmentation fault here
Я не знаю, что не так.

Подробнее здесь: https://stackoverflow.com/questions/794 ... re-in-cuda
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»