static void THCudaTensor_rawSet(THCState *state, THCudaTensor *self, THCudaStorage *storage, long storageOffset, int nDimension, long *size, long *stride) { THAssert(self->storage != NULL); /* storage */ if(self->storage != storage) { if(self->storage) THCudaStorage_free(state, self->storage); if(storage) { self->storage = storage; THCudaStorage_retain(state, self->storage); } else self->storage = THCudaStorage_new(state); } /* storageOffset */ if(storageOffset < 0) THError("Tensor: invalid storage offset"); self->storageOffset = storageOffset; /* size and stride */ THCudaTensor_rawResize(state, self, nDimension, size, stride); }
void THCudaTensor_free(THCState *state, THCudaTensor *self) { if(!self) return; if(self->flag & TH_TENSOR_REFCOUNTED) { if(THAtomicDecrementRef(&self->refcount)) { THFree(self->size); THFree(self->stride); if(self->storage) THCudaStorage_free(state, self->storage); THFree(self); } } }
void THCudaTensor_free(THCState *state, THCudaTensor *self) { if(!self) return; if(self->flag & TH_TENSOR_REFCOUNTED) { if(--self->refcount == 0) { THFree(self->size); THFree(self->stride); if(self->storage) THCudaStorage_free(state, self->storage); THFree(self); } } }