blob: e9dc060c7120e82d8a33755330c00dfb00bdc668 [file] [log] [blame]
#include "../ModuleCopy.h"
#define DECLARE_COPY(THNAME) \
void TH_CONCAT_3(_THPCopy_,THNAME,_copyDouble)(PyObject *dst, PyObject *src); \
void TH_CONCAT_3(_THPCopy_,THNAME,_copyFloat)(PyObject *dst, PyObject *src); \
void TH_CONCAT_3(_THPCopy_,THNAME,_copyLong)(PyObject *dst, PyObject *src); \
void TH_CONCAT_3(_THPCopy_,THNAME,_copyInt)(PyObject *dst, PyObject *src); \
void TH_CONCAT_3(_THPCopy_,THNAME,_copyShort)(PyObject *dst, PyObject *src); \
void TH_CONCAT_3(_THPCopy_,THNAME,_copyChar)(PyObject *dst, PyObject *src); \
void TH_CONCAT_3(_THPCopy_,THNAME,_copyByte)(PyObject *dst, PyObject *src);
#define DECLARE_CUDA_COPY(THNAME) \
void TH_CONCAT_3(_THPCopy_,THNAME,_copyCudaDouble)(PyObject *dst, PyObject *src); \
void TH_CONCAT_3(_THPCopy_,THNAME,_copyCudaFloat)(PyObject *dst, PyObject *src); \
void TH_CONCAT_3(_THPCopy_,THNAME,_copyCudaLong)(PyObject *dst, PyObject *src); \
void TH_CONCAT_3(_THPCopy_,THNAME,_copyCudaInt)(PyObject *dst, PyObject *src); \
void TH_CONCAT_3(_THPCopy_,THNAME,_copyCudaShort)(PyObject *dst, PyObject *src); \
void TH_CONCAT_3(_THPCopy_,THNAME,_copyCudaChar)(PyObject *dst, PyObject *src); \
void TH_CONCAT_3(_THPCopy_,THNAME,_copyCudaByte)(PyObject *dst, PyObject *src);
DECLARE_CUDA_COPY(THDoubleTensor)
DECLARE_CUDA_COPY(THFloatTensor)
DECLARE_CUDA_COPY(THLongTensor)
DECLARE_CUDA_COPY(THIntTensor)
DECLARE_CUDA_COPY(THShortTensor)
DECLARE_CUDA_COPY(THCharTensor)
DECLARE_CUDA_COPY(THByteTensor)
DECLARE_COPY(THCudaDoubleTensor)
DECLARE_COPY(THCudaTensor)
DECLARE_COPY(THCudaLongTensor)
DECLARE_COPY(THCudaIntTensor)
DECLARE_COPY(THCudaShortTensor)
DECLARE_COPY(THCudaCharTensor)
DECLARE_COPY(THCudaByteTensor)
DECLARE_CUDA_COPY(THCudaDoubleTensor)
DECLARE_CUDA_COPY(THCudaTensor)
DECLARE_CUDA_COPY(THCudaLongTensor)
DECLARE_CUDA_COPY(THCudaIntTensor)
DECLARE_CUDA_COPY(THCudaShortTensor)
DECLARE_CUDA_COPY(THCudaCharTensor)
DECLARE_CUDA_COPY(THCudaByteTensor)
DECLARE_CUDA_COPY(THDoubleStorage)
DECLARE_CUDA_COPY(THFloatStorage)
DECLARE_CUDA_COPY(THLongStorage)
DECLARE_CUDA_COPY(THIntStorage)
DECLARE_CUDA_COPY(THShortStorage)
DECLARE_CUDA_COPY(THCharStorage)
DECLARE_CUDA_COPY(THByteStorage)
DECLARE_COPY(THCudaDoubleStorage)
DECLARE_COPY(THCudaStorage)
DECLARE_COPY(THCudaLongStorage)
DECLARE_COPY(THCudaIntStorage)
DECLARE_COPY(THCudaShortStorage)
DECLARE_COPY(THCudaCharStorage)
DECLARE_COPY(THCudaByteStorage)
DECLARE_CUDA_COPY(THCudaDoubleStorage)
DECLARE_CUDA_COPY(THCudaStorage)
DECLARE_CUDA_COPY(THCudaLongStorage)
DECLARE_CUDA_COPY(THCudaIntStorage)
DECLARE_CUDA_COPY(THCudaShortStorage)
DECLARE_CUDA_COPY(THCudaCharStorage)
DECLARE_CUDA_COPY(THCudaByteStorage)
#undef DECLARE_COPY
#define DECLARE_ASYNC_COPY(TYPE) \
void TH_CONCAT_3(THCP,TYPE,Tensor_copyAsyncCPU)(PyObject *dst, PyObject *src); \
void TH_CONCAT_3(THP,TYPE,Tensor_copyAsyncGPU)(PyObject *dst, PyObject *src);
DECLARE_ASYNC_COPY(Double)
DECLARE_ASYNC_COPY(Float)
DECLARE_ASYNC_COPY(Long)
DECLARE_ASYNC_COPY(Int)
DECLARE_ASYNC_COPY(Short)
DECLARE_ASYNC_COPY(Char)
DECLARE_ASYNC_COPY(Byte)
#undef DECLARE_ASYNC_COPY
extern PyObject *THPDoubleStorageClass;
extern PyObject *THPFloatStorageClass;
extern PyObject *THPLongStorageClass;
extern PyObject *THPIntStorageClass;
extern PyObject *THPShortStorageClass;
extern PyObject *THPCharStorageClass;
extern PyObject *THPByteStorageClass;
extern PyObject *THPDoubleTensorClass;
extern PyObject *THPFloatTensorClass;
extern PyObject *THPLongTensorClass;
extern PyObject *THPIntTensorClass;
extern PyObject *THPShortTensorClass;
extern PyObject *THPCharTensorClass;
extern PyObject *THPByteTensorClass;
static bool THCPModule_initCopy()
{
// TODO: half
#define INIT_TENSOR_GPU_CPU_COPY(TYPE, THNAME) \
tensor_copy_handlers.insert({{TYPE, THCPDoubleTensorClass}, TH_CONCAT_3(_THPCopy_,THNAME,_copyCudaDouble)}); \
tensor_copy_handlers.insert({{TYPE, THCPFloatTensorClass}, TH_CONCAT_3(_THPCopy_,THNAME,_copyCudaFloat)}); \
tensor_copy_handlers.insert({{TYPE, THCPLongTensorClass}, TH_CONCAT_3(_THPCopy_,THNAME,_copyCudaLong)}); \
tensor_copy_handlers.insert({{TYPE, THCPIntTensorClass}, TH_CONCAT_3(_THPCopy_,THNAME,_copyCudaInt)}); \
tensor_copy_handlers.insert({{TYPE, THCPShortTensorClass}, TH_CONCAT_3(_THPCopy_,THNAME,_copyCudaShort)}); \
tensor_copy_handlers.insert({{TYPE, THCPCharTensorClass}, TH_CONCAT_3(_THPCopy_,THNAME,_copyCudaChar)}); \
tensor_copy_handlers.insert({{TYPE, THCPByteTensorClass}, TH_CONCAT_3(_THPCopy_,THNAME,_copyCudaByte)});
#define INIT_TENSOR_GPU_GPU_COPY(TYPE, THNAME) \
tensor_copy_handlers.insert({{TYPE, THCPDoubleTensorClass}, TH_CONCAT_3(_THPCopy_,THNAME,_copyCudaDouble)}); \
tensor_copy_handlers.insert({{TYPE, THCPFloatTensorClass}, TH_CONCAT_3(_THPCopy_,THNAME,_copyCudaFloat)}); \
tensor_copy_handlers.insert({{TYPE, THCPLongTensorClass}, TH_CONCAT_3(_THPCopy_,THNAME,_copyCudaLong)}); \
tensor_copy_handlers.insert({{TYPE, THCPIntTensorClass}, TH_CONCAT_3(_THPCopy_,THNAME,_copyCudaInt)}); \
tensor_copy_handlers.insert({{TYPE, THCPShortTensorClass}, TH_CONCAT_3(_THPCopy_,THNAME,_copyCudaShort)}); \
tensor_copy_handlers.insert({{TYPE, THCPCharTensorClass}, TH_CONCAT_3(_THPCopy_,THNAME,_copyCudaChar)}); \
tensor_copy_handlers.insert({{TYPE, THCPByteTensorClass}, TH_CONCAT_3(_THPCopy_,THNAME,_copyCudaByte)}); \
/* CUDA copy launches are always async */ \
tensor_async_copy_handlers.insert({{TYPE, THCPDoubleTensorClass}, TH_CONCAT_3(_THPCopy_,THNAME,_copyCudaDouble)}); \
tensor_async_copy_handlers.insert({{TYPE, THCPFloatTensorClass}, TH_CONCAT_3(_THPCopy_,THNAME,_copyCudaFloat)}); \
tensor_async_copy_handlers.insert({{TYPE, THCPLongTensorClass}, TH_CONCAT_3(_THPCopy_,THNAME,_copyCudaLong)}); \
tensor_async_copy_handlers.insert({{TYPE, THCPIntTensorClass}, TH_CONCAT_3(_THPCopy_,THNAME,_copyCudaInt)}); \
tensor_async_copy_handlers.insert({{TYPE, THCPShortTensorClass}, TH_CONCAT_3(_THPCopy_,THNAME,_copyCudaShort)}); \
tensor_async_copy_handlers.insert({{TYPE, THCPCharTensorClass}, TH_CONCAT_3(_THPCopy_,THNAME,_copyCudaChar)}); \
tensor_async_copy_handlers.insert({{TYPE, THCPByteTensorClass}, TH_CONCAT_3(_THPCopy_,THNAME,_copyCudaByte)});
#define INIT_TENSOR_CPU_GPU_COPY(TYPE, THNAME) \
tensor_copy_handlers.insert({{TYPE, THPDoubleTensorClass}, TH_CONCAT_3(_THPCopy_,THNAME,_copyDouble)}); \
tensor_copy_handlers.insert({{TYPE, THPFloatTensorClass}, TH_CONCAT_3(_THPCopy_,THNAME,_copyFloat)}); \
tensor_copy_handlers.insert({{TYPE, THPLongTensorClass}, TH_CONCAT_3(_THPCopy_,THNAME,_copyLong)}); \
tensor_copy_handlers.insert({{TYPE, THPIntTensorClass}, TH_CONCAT_3(_THPCopy_,THNAME,_copyInt)}); \
tensor_copy_handlers.insert({{TYPE, THPShortTensorClass}, TH_CONCAT_3(_THPCopy_,THNAME,_copyShort)}); \
tensor_copy_handlers.insert({{TYPE, THPCharTensorClass}, TH_CONCAT_3(_THPCopy_,THNAME,_copyChar)}); \
tensor_copy_handlers.insert({{TYPE, THPByteTensorClass}, TH_CONCAT_3(_THPCopy_,THNAME,_copyByte)});
#define INIT_TENSOR_ASYNC_COPY(TYPE) \
tensor_async_copy_handlers.insert({{TH_CONCAT_3(THP,TYPE,TensorClass), TH_CONCAT_3(THCP,TYPE,TensorClass)}, TH_CONCAT_3(THP,TYPE,Tensor_copyAsyncGPU)}); \
tensor_async_copy_handlers.insert({{TH_CONCAT_3(THCP,TYPE,TensorClass), TH_CONCAT_3(THP,TYPE,TensorClass)}, TH_CONCAT_3(THCP,TYPE,Tensor_copyAsyncCPU)});
INIT_TENSOR_GPU_CPU_COPY(THPDoubleTensorClass, THDoubleTensor);
INIT_TENSOR_GPU_CPU_COPY(THPFloatTensorClass, THFloatTensor);
INIT_TENSOR_GPU_CPU_COPY(THPLongTensorClass, THLongTensor);
INIT_TENSOR_GPU_CPU_COPY(THPIntTensorClass, THIntTensor);
INIT_TENSOR_GPU_CPU_COPY(THPShortTensorClass, THShortTensor);
INIT_TENSOR_GPU_CPU_COPY(THPCharTensorClass, THCharTensor);
INIT_TENSOR_GPU_CPU_COPY(THPByteTensorClass, THByteTensor);
INIT_TENSOR_GPU_GPU_COPY(THCPDoubleTensorClass, THCudaDoubleTensor);
INIT_TENSOR_GPU_GPU_COPY(THCPFloatTensorClass, THCudaTensor);
INIT_TENSOR_GPU_GPU_COPY(THCPLongTensorClass, THCudaLongTensor);
INIT_TENSOR_GPU_GPU_COPY(THCPIntTensorClass, THCudaIntTensor);
INIT_TENSOR_GPU_GPU_COPY(THCPShortTensorClass, THCudaShortTensor);
INIT_TENSOR_GPU_GPU_COPY(THCPCharTensorClass, THCudaCharTensor);
INIT_TENSOR_GPU_GPU_COPY(THCPByteTensorClass, THCudaByteTensor);
INIT_TENSOR_CPU_GPU_COPY(THCPDoubleTensorClass, THCudaDoubleTensor);
INIT_TENSOR_CPU_GPU_COPY(THCPFloatTensorClass, THCudaTensor);
INIT_TENSOR_CPU_GPU_COPY(THCPLongTensorClass, THCudaLongTensor);
INIT_TENSOR_CPU_GPU_COPY(THCPIntTensorClass, THCudaIntTensor);
INIT_TENSOR_CPU_GPU_COPY(THCPShortTensorClass, THCudaShortTensor);
INIT_TENSOR_CPU_GPU_COPY(THCPCharTensorClass, THCudaCharTensor);
INIT_TENSOR_CPU_GPU_COPY(THCPByteTensorClass, THCudaByteTensor);
INIT_TENSOR_ASYNC_COPY(Double)
INIT_TENSOR_ASYNC_COPY(Float)
INIT_TENSOR_ASYNC_COPY(Long)
INIT_TENSOR_ASYNC_COPY(Int)
INIT_TENSOR_ASYNC_COPY(Short)
INIT_TENSOR_ASYNC_COPY(Char)
INIT_TENSOR_ASYNC_COPY(Byte)
#define INIT_STORAGE_GPU_CPU_COPY(TYPE, THNAME) \
storage_copy_handlers.insert({{TYPE, THCPDoubleStorageClass}, TH_CONCAT_3(_THPCopy_,THNAME,_copyCudaDouble)}); \
storage_copy_handlers.insert({{TYPE, THCPFloatStorageClass}, TH_CONCAT_3(_THPCopy_,THNAME,_copyCudaFloat)}); \
storage_copy_handlers.insert({{TYPE, THCPLongStorageClass}, TH_CONCAT_3(_THPCopy_,THNAME,_copyCudaLong)}); \
storage_copy_handlers.insert({{TYPE, THCPIntStorageClass}, TH_CONCAT_3(_THPCopy_,THNAME,_copyCudaInt)}); \
storage_copy_handlers.insert({{TYPE, THCPShortStorageClass}, TH_CONCAT_3(_THPCopy_,THNAME,_copyCudaShort)}); \
storage_copy_handlers.insert({{TYPE, THCPCharStorageClass}, TH_CONCAT_3(_THPCopy_,THNAME,_copyCudaChar)}); \
storage_copy_handlers.insert({{TYPE, THCPByteStorageClass}, TH_CONCAT_3(_THPCopy_,THNAME,_copyCudaByte)});
#define INIT_STORAGE_GPU_GPU_COPY(TYPE, THNAME) \
storage_copy_handlers.insert({{TYPE, THCPDoubleStorageClass}, TH_CONCAT_3(_THPCopy_,THNAME,_copyCudaDouble)}); \
storage_copy_handlers.insert({{TYPE, THCPFloatStorageClass}, TH_CONCAT_3(_THPCopy_,THNAME,_copyCudaFloat)}); \
storage_copy_handlers.insert({{TYPE, THCPLongStorageClass}, TH_CONCAT_3(_THPCopy_,THNAME,_copyCudaLong)}); \
storage_copy_handlers.insert({{TYPE, THCPIntStorageClass}, TH_CONCAT_3(_THPCopy_,THNAME,_copyCudaInt)}); \
storage_copy_handlers.insert({{TYPE, THCPShortStorageClass}, TH_CONCAT_3(_THPCopy_,THNAME,_copyCudaShort)}); \
storage_copy_handlers.insert({{TYPE, THCPCharStorageClass}, TH_CONCAT_3(_THPCopy_,THNAME,_copyCudaChar)}); \
storage_copy_handlers.insert({{TYPE, THCPByteStorageClass}, TH_CONCAT_3(_THPCopy_,THNAME,_copyCudaByte)});
#define INIT_STORAGE_CPU_GPU_COPY(TYPE, THNAME) \
storage_copy_handlers.insert({{TYPE, THPDoubleStorageClass}, TH_CONCAT_3(_THPCopy_,THNAME,_copyDouble)}); \
storage_copy_handlers.insert({{TYPE, THPFloatStorageClass}, TH_CONCAT_3(_THPCopy_,THNAME,_copyFloat)}); \
storage_copy_handlers.insert({{TYPE, THPLongStorageClass}, TH_CONCAT_3(_THPCopy_,THNAME,_copyLong)}); \
storage_copy_handlers.insert({{TYPE, THPIntStorageClass}, TH_CONCAT_3(_THPCopy_,THNAME,_copyInt)}); \
storage_copy_handlers.insert({{TYPE, THPShortStorageClass}, TH_CONCAT_3(_THPCopy_,THNAME,_copyShort)}); \
storage_copy_handlers.insert({{TYPE, THPCharStorageClass}, TH_CONCAT_3(_THPCopy_,THNAME,_copyChar)}); \
storage_copy_handlers.insert({{TYPE, THPByteStorageClass}, TH_CONCAT_3(_THPCopy_,THNAME,_copyByte)});
INIT_STORAGE_GPU_CPU_COPY(THPDoubleStorageClass, THDoubleStorage);
INIT_STORAGE_GPU_CPU_COPY(THPFloatStorageClass, THFloatStorage);
INIT_STORAGE_GPU_CPU_COPY(THPLongStorageClass, THLongStorage);
INIT_STORAGE_GPU_CPU_COPY(THPIntStorageClass, THIntStorage);
INIT_STORAGE_GPU_CPU_COPY(THPShortStorageClass, THShortStorage);
INIT_STORAGE_GPU_CPU_COPY(THPCharStorageClass, THCharStorage);
INIT_STORAGE_GPU_CPU_COPY(THPByteStorageClass, THByteStorage);
INIT_STORAGE_GPU_GPU_COPY(THCPDoubleStorageClass, THCudaDoubleStorage);
INIT_STORAGE_GPU_GPU_COPY(THCPFloatStorageClass, THCudaStorage);
INIT_STORAGE_GPU_GPU_COPY(THCPLongStorageClass, THCudaLongStorage);
INIT_STORAGE_GPU_GPU_COPY(THCPIntStorageClass, THCudaIntStorage);
INIT_STORAGE_GPU_GPU_COPY(THCPShortStorageClass, THCudaShortStorage);
INIT_STORAGE_GPU_GPU_COPY(THCPCharStorageClass, THCudaCharStorage);
INIT_STORAGE_GPU_GPU_COPY(THCPByteStorageClass, THCudaByteStorage);
INIT_STORAGE_CPU_GPU_COPY(THCPDoubleStorageClass, THCudaDoubleStorage);
INIT_STORAGE_CPU_GPU_COPY(THCPFloatStorageClass, THCudaStorage);
INIT_STORAGE_CPU_GPU_COPY(THCPLongStorageClass, THCudaLongStorage);
INIT_STORAGE_CPU_GPU_COPY(THCPIntStorageClass, THCudaIntStorage);
INIT_STORAGE_CPU_GPU_COPY(THCPShortStorageClass, THCudaShortStorage);
INIT_STORAGE_CPU_GPU_COPY(THCPCharStorageClass, THCudaCharStorage);
INIT_STORAGE_CPU_GPU_COPY(THCPByteStorageClass, THCudaByteStorage);
return true;
#undef INIT_TENSOR_GPU_CPU_COPY
#undef INIT_TENSOR_GPU_GPU_COPY
#undef INIT_TENSOR_CPU_GPU_COPY
#undef INIT_TENSOR_ASYNC_COPY
#undef INIT_STORAGE_GPU_CPU_COPY
#undef INIT_STORAGE_GPU_GPU_COPY
#undef INIT_STORAGE_CPU_GPU_COPY
}