CUDA kernel return value shortcut
CUDA の kernel 関数からの戻り値を毎回 cudaMemcpy したくない時につかう
template<class T> class CudaValue { private: T* ptr; public: CudaValue() { cudaMalloc(&ptr, sizeof(T)); } ~CudaValue() { cudaFree(ptr); } operator T() { T ret; cudaMemcpy(&ret, ptr, sizeof(T), cudaMemcpyDeviceToHost); return ret; } CudaValue& operator=(const T& rhs) { cudaMemcpy(ptr, &rhs, sizeof(T), cudaMemcpyHostToDevice); return this; } T* get() { return ptr; } private: CudaValue(const CudaValue&); CudaValue operator=(const CudaValue&); };