Spaces:
Runtime error
Runtime error
| // If you create a global `thrust::device_vector` with the default allocator, | |
| // you'll get an error during program termination when the memory of the vector | |
| // is freed, as the CUDA runtime cannot be used during program termination. | |
| // | |
| // To get around this, you can create your own allocator which ignores | |
| // deallocation failures that occur because the CUDA runtime is shut down. | |
| extern "C" cudaError_t cudaFreeIgnoreShutdown(void* ptr) { | |
| cudaError_t const err = cudaFree(ptr); | |
| if (cudaSuccess == err || cudaErrorCudartUnloading == err) | |
| return cudaSuccess; | |
| return err; | |
| } | |
| typedef thrust::system::cuda::detail::cuda_memory_resource< | |
| cudaMalloc, | |
| cudaFreeIgnoreShutdown, | |
| thrust::cuda::pointer<void> | |
| > device_ignore_shutdown_memory_resource; | |
| template <typename T> | |
| using device_ignore_shutdown_allocator = | |
| thrust::mr::stateless_resource_allocator< | |
| T, | |
| thrust::device_ptr_memory_resource<device_ignore_shutdown_memory_resource> | |
| >; | |
| thrust::device_vector<double, device_ignore_shutdown_allocator<double>> d; | |
| thrust::device_vector< | |
| double, | |
| thrust::mr::stateless_resource_allocator< | |
| double, | |
| thrust::device_ptr_memory_resource<device_ignore_shutdown_memory_resource> | |
| > | |
| > d; | |
| int main() { | |
| d.resize(25); | |
| } | |