Как использовать cudaMalloc и cudaMemcpy для выделения динамической памяти в структуре?C++

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

Сообщение Anonymous »

Я пытаюсь использовать cudaMalloc и cudaMemcpy для выделения динамической памяти, но во время работы возникает ошибка Segmentation Fault. Я думаю, что никогда не выделяю память для двойных *данных для устройства, но не знаю, как это сделать правильно.
Вот код:#include
#include
#include
#include

#define cugo(ans) gpu::execute_cuda_runtime((ans), __FILE__, __LINE__)

namespace calcu {
namespace cpu {
class Nuclide {
public:
int Z_;
int A_;
int Diff_;
std::vector data;

Nuclide(int Z, int A, int Diff) : Z_(Z), A_(A), Diff_(Diff) {}
};

std::vector nuclides;
}

namespace gpu {
struct gpuNuclide {
int Z_;
int A_;
double *data;
};

gpuNuclide* nuclides = nullptr; // Device pointer

void execute_cuda_runtime(cudaError_t code, const char* fname, int line)
{
if (code != cudaSuccess) {
std::cerr data.push_back(6908.0);
cpu::nuclides.push_back(std::make_unique(94, 240, 99999));
cpu::nuclides[2]->data.push_back(0.0001);
cpu::nuclides[2]->data.push_back(0.10006);

// Allocate memory on the device for all nuclides
cugo(cudaMalloc(&gpu::nuclides, cpu::nuclides.size() * sizeof(gpu::gpuNuclide)));

// Copy each data element one by one from host to device
for (size_t i = 0; i < cpu::nuclides.size(); ++i) {

cugo(cudaMemcpy(&gpu::nuclides.Z_, &cpu::nuclides->Z_, sizeof(int), cudaMemcpyHostToDevice));
cugo(cudaMemcpy(&gpu::nuclides.A_, &cpu::nuclides->A_, sizeof(int), cudaMemcpyHostToDevice));

// Treatments for vector
cugo(cudaMalloc(&gpu::nuclides.data, cpu::nuclides->data.size() * sizeof(double)));
cugo(cudaMemcpy(gpu::nuclides.data, cpu::nuclides->data.data(), cpu::nuclides->data.size() * sizeof(double), cudaMemcpyHostToDevice));
}

// Call kernel function
gpu::test_print_kernel(gpu::nuclides);

cugo(cudaDeviceSynchronize());

// Free device memory
cugo(cudaFree(gpu::nuclides));

return 0;
}



Подробнее здесь: https://stackoverflow.com/questions/787 ... n-a-struct

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