#include "THCStream.h" | |
#include <cuda_runtime_api.h> | |
#include "THAtomic.h" | |
THCStream* THCStream_new(int flags) | |
{ | |
THCStream* self = (THCStream*) malloc(sizeof(THCStream)); | |
self->refcount = 1; | |
THCudaCheck(cudaGetDevice(&self->device)); | |
THCudaCheck(cudaStreamCreateWithFlags(&self->stream, flags)); | |
return self; | |
} | |
void THCStream_free(THCStream* self) | |
{ | |
if (!self) { | |
return; | |
} | |
if (THAtomicDecrementRef(&self->refcount)) { | |
THCudaCheck(cudaStreamDestroy(self->stream)); | |
free(self); | |
} | |
} | |
void THCStream_retain(THCStream* self) | |
{ | |
THAtomicIncrementRef(&self->refcount); | |
} |