У меня есть приложение CUDA, над которым я работаю, с массивом объектов; каждый объект имеет указатель на массив std :: pair
. Я пытаюсь cudaMemcpy массив объектов поверх, затем cudaMemcpy массив пар для каждого из объектов, однако это приносит мне все виды горя. При попытке копирования во внутренний массив происходит сбой; Я не понимаю, как переместить это ...
#include <cuda.h> #include <cuda_runtime.h> #include <iostream> using namespace std; class Object { public: int id; float something; std::pair<int, float> *somePairs; }; Object *objects; void initObjects() { objects = new Object[10]; for( int idx = 0; idx < 10; idx++ ) { objects[idx].id = idx; objects[idx].something = (float) idx; objects[idx].somePairs = new std::pair<int, float>[10]; for ( int jdx = 10; jdx < 10; jdx++ ) { objects[idx].somePairs[jdx] = std::pair<int, float>( jdx, (float) jdx ); } } } void cudaMemcpyObjects() { Object *devObjects; cudaMalloc( &devObjects, sizeof(Object) * 10 ); cudaMemcpy( devObjects, objects, sizeof(Object) * 10, cudaMemcpyHostToDevice ); for ( int idx = 0; idx < 10; idx++ ) { size_t pairSetSize = sizeof(std::pair<int, float>) * 10; // CRASH HERE ... v cudaMalloc( &(devObjects[idx].somePairs), pairSetSize ); cudaMemcpy( devObjects[idx].somePairs, objects[idx].somePairs, sizeof( std::pair<int, float> ) * 10, cudaMemcpyHostToDevice ); } } int main() { initObjects(); cudaMemcpyObjects(); return 0; }