я реализовал эту CuArray
, чтобы упростить использование массива с реализацией от свойств Rows
и Columns
:Я использую cudaMemcpy неправильно?
#include <cuda_runtime_api.h>
#include <cuda.h>
template<class TType>
class CuArray
{
public:
int Rows;
int Columns;
int Elements;
TType *ArrayPointer;
CuArray<TType>(int rows, int columns = 1)
{
this->Rows = rows;
this->Columns = columns;
Elements = this->Rows * this->Columns;
cudaMalloc(&this->ArrayPointer, sizeof(TType)*this->Elements);
}
static CuArray<TType>* GpuCreate(int rows, int columns = 1)
{
CuArray<TType>* cuArray = new CuArray<TType>(rows, columns);
CuArray<TType>* gpuCuArray;
size_t size = sizeof(CuArray<TType>);
cudaMalloc(&gpuCuArray, size);
cudaMemcpy(gpuCuArray, cuArray, size, cudaMemcpyHostToDevice);
return gpuCuArray;
}
};
Однако cudaMemcpy
, кажется, не работает, как ожидалось, и я не знаю, что я делаю неправильно.
Это значения (и позиции указателя) переменных для вызова, например. CuArray<int*>::GpuCreate(11);
:
Отлаживал с Nsight Eclipse, 7.5, Ubuntu 14.04 64bit
cuArray = {0xb6e8b0, Ряды = 11, Столбцы = 1, элементы = 11}
размер = 32
gpuCuArray = {0x7053e3600, Ряды = 0, Столбцы = 0, элементы = 0}
значения указателей после new
и cudaMalloc
выглядит хорошо для меня, но cudaMemcpy
не похоже на работу.
Так что я делаю неправильно?
Я новичок в кодировании в CUDA, но ваша аргументация, кажется, хорошо, потому что если я называю ядро я буду называть его от хоста, а затем я могу передать строки и столбцы в качестве параметра в ядро. Но это требует большего количества параметров. – Jens
Однако ваше решение не решает проблему с cudaMemcpy. Было бы здорово понять, почему он не работает в моем коде. – Jens
@JensHorstmann, так что с вашим исходным кодом, каково ваше ожидание? что, похоже, не работает? Вы можете более подробно рассказать о том, над чем работаете. – kangshiyin