#pragma once #include struct DeviceMem { DeviceMem() = delete; DeviceMem(std::size_t mem_size); void* GetDeviceBuffer(); void ToDevice(const void* p); void FromDevice(void* p); ~DeviceMem(); void* mpDeviceBuf; std::size_t mMemSize; }; struct KernelTimerImpl; struct KernelTimer { KernelTimer(); ~KernelTimer(); void Start(); void End(); float GetElapsedTime() const; std::unique_ptr impl; }; void launch_kernel(const void* func, dim3 grid_dim, dim3 block_dim, void** args, float& time);