Казалось бы, функция в три строчки для копирования массива:
#include <cuda_runtime.h>
#include <stdexcept>
static cudaError_t crc;
template<typename T>
void gpu_allocate(T* g_ptr, size_t n){
crc = cudaMalloc((T**)&g_ptr, sizeof(T)*n);
if(crc) throw std::runtime_error("cudaMalloc Error");
}
template<typename T>
void gpu_copyin(T* src, T* g_dst, size_t n){
crc = cudaMemcpy((void*)g_dst, (void*)src, sizeof(T)*n,cudaMemcpyHostToDevice);
if(crc){
throw std::runtime_error("cudaMemcpyHostToDevice Error");
}
}
Аллокация проходит нормально, но копирование приводит к срабатыванию исключения:
cudaMemcpyHostToDevice float Error=11:invalid argument