From: Lin Huang Date: Wed, 5 Dec 2018 21:12:37 +0000 (-0800) Subject: Define THPStorage struct only once (rather than N times) (#14802) X-Git-Tag: accepted/tizen/6.5/unified/20211028.231830~2445 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=524574ab73c9c874113ae74f6806591459adbaf8;p=platform%2Fupstream%2Fpytorch.git Define THPStorage struct only once (rather than N times) (#14802) Summary: Pull Request resolved: https://github.com/pytorch/pytorch/pull/14802 The definetion of THPStorage does not depend on any Real, its macro defintion is unnecessary, refactor the code so that THPStorage is not macro defined. Reviewed By: ezyang Differential Revision: D13340445 fbshipit-source-id: 343393d0a36c868b9a06eea2ad9b80f5e395e947 --- diff --git a/torch/csrc/Storage.h b/torch/csrc/Storage.h index f64fe84..8b539c2 100644 --- a/torch/csrc/Storage.h +++ b/torch/csrc/Storage.h @@ -1,7 +1,6 @@ #ifndef THP_STORAGE_INC #define THP_STORAGE_INC -#define THPStorage TH_CONCAT_3(THP,Real,Storage) #define THPStorageStr TH_CONCAT_STRING_3(torch.,Real,Storage) #define THPStorageClass TH_CONCAT_3(THP,Real,StorageClass) #define THPStorage_(NAME) TH_CONCAT_4(THP,Real,Storage_,NAME) diff --git a/torch/csrc/StorageDefs.h b/torch/csrc/StorageDefs.h new file mode 100644 index 0000000..7915f28 --- /dev/null +++ b/torch/csrc/StorageDefs.h @@ -0,0 +1,5 @@ +#pragma once +struct THPStorage { + PyObject_HEAD + THWStorage *cdata; +}; diff --git a/torch/csrc/cuda/Storage.h b/torch/csrc/cuda/Storage.h index 898164b..f7a63e5 100644 --- a/torch/csrc/cuda/Storage.h +++ b/torch/csrc/cuda/Storage.h @@ -1,7 +1,6 @@ #ifndef THCP_STORAGE_INC #define THCP_STORAGE_INC -#define THCPStorage TH_CONCAT_3(THCP,Real,Storage) #define THCPStorageStr TH_CONCAT_STRING_3(torch.cuda.,Real,Storage) #define THCPStorageClass TH_CONCAT_3(THCP,Real,StorageClass) #define THCPStorage_(NAME) TH_CONCAT_4(THCP,Real,Storage_,NAME) diff --git a/torch/csrc/cuda/override_macros.h b/torch/csrc/cuda/override_macros.h index 439f33d..c697a06 100644 --- a/torch/csrc/cuda/override_macros.h +++ b/torch/csrc/cuda/override_macros.h @@ -11,7 +11,6 @@ #define THWTensor_(NAME) THCTensor_(NAME) #define THPStorage_(NAME) TH_CONCAT_4(THCP,Real,Storage_,NAME) -#define THPStorage THCPStorage #define THPStorageBaseStr THCPStorageBaseStr #define THPStorageStr THCPStorageStr #define THPStorageClass THCPStorageClass diff --git a/torch/csrc/cuda/restore_macros.h b/torch/csrc/cuda/restore_macros.h index 054eec6..af8826f 100644 --- a/torch/csrc/cuda/restore_macros.h +++ b/torch/csrc/cuda/restore_macros.h @@ -7,7 +7,6 @@ #define THPTensorClass TH_CONCAT_3(THP,Real,TensorClass) #define THPTensor_(NAME) TH_CONCAT_4(THP,Real,Tensor_,NAME) -#define THPStorage TH_CONCAT_3(THP,Real,Storage) #define THPStorageStr TH_CONCAT_STRING_3(torch.,Real,Storage) #define THPStorageClass TH_CONCAT_3(THP,Real,StorageClass) #define THPStorage_(NAME) TH_CONCAT_4(THP,Real,Storage_,NAME) diff --git a/torch/csrc/cuda/undef_macros.h b/torch/csrc/cuda/undef_macros.h index a6d5e83..ff694c8 100644 --- a/torch/csrc/cuda/undef_macros.h +++ b/torch/csrc/cuda/undef_macros.h @@ -16,7 +16,6 @@ #undef THPTensorType #undef THPStorage_ -#undef THPStorage #undef THPStorageBaseStr #undef THPStorageStr #undef THPStorageClass diff --git a/torch/csrc/generic/Storage.cpp b/torch/csrc/generic/Storage.cpp index 82e3587..0249dde 100644 --- a/torch/csrc/generic/Storage.cpp +++ b/torch/csrc/generic/Storage.cpp @@ -291,37 +291,37 @@ void THPStorage_(initCopyMethods)() #ifndef THD_GENERIC_FILE auto& h = THWStorage_(copy_functions); // copy from CPU types - THPInsertStorageCopyFunction(&THPByteStorageType, h, &THWStorage_(copyByte)); - THPInsertStorageCopyFunction(&THPCharStorageType, h, &THWStorage_(copyChar)); - THPInsertStorageCopyFunction(&THPShortStorageType, h, &THWStorage_(copyShort)); - THPInsertStorageCopyFunction(&THPIntStorageType, h, &THWStorage_(copyInt)); - THPInsertStorageCopyFunction(&THPLongStorageType, h, &THWStorage_(copyLong)); - THPInsertStorageCopyFunction(&THPHalfStorageType, h, &THWStorage_(copyHalf)); - THPInsertStorageCopyFunction(&THPFloatStorageType, h, &THWStorage_(copyFloat)); - THPInsertStorageCopyFunction(&THPDoubleStorageType, h, &THWStorage_(copyDouble)); + THPInsertStorageCopyFunction(&THPByteStorageType, h, &THWStorage_(copyByte)); + THPInsertStorageCopyFunction(&THPCharStorageType, h, &THWStorage_(copyChar)); + THPInsertStorageCopyFunction(&THPShortStorageType, h, &THWStorage_(copyShort)); + THPInsertStorageCopyFunction(&THPIntStorageType, h, &THWStorage_(copyInt)); + THPInsertStorageCopyFunction(&THPLongStorageType, h, &THWStorage_(copyLong)); + THPInsertStorageCopyFunction(&THPHalfStorageType, h, &THWStorage_(copyHalf)); + THPInsertStorageCopyFunction(&THPFloatStorageType, h, &THWStorage_(copyFloat)); + THPInsertStorageCopyFunction(&THPDoubleStorageType, h, &THWStorage_(copyDouble)); #ifdef THC_GENERIC_FILE // copy from GPU types - THPInsertStorageCopyFunction(&THCPByteStorageType, h, &THWStorage_(copyCudaByte)); - THPInsertStorageCopyFunction(&THCPCharStorageType, h, &THWStorage_(copyCudaChar)); - THPInsertStorageCopyFunction(&THCPShortStorageType, h, &THWStorage_(copyCudaShort)); - THPInsertStorageCopyFunction(&THCPIntStorageType, h, &THWStorage_(copyCudaInt)); - THPInsertStorageCopyFunction(&THCPLongStorageType, h, &THWStorage_(copyCudaLong)); - THPInsertStorageCopyFunction(&THCPFloatStorageType, h, &THWStorage_(copyCudaFloat)); - THPInsertStorageCopyFunction(&THCPDoubleStorageType, h, &THWStorage_(copyCudaDouble)); - THPInsertStorageCopyFunction(&THCPHalfStorageType, h, &THWStorage_(copyCudaHalf)); + THPInsertStorageCopyFunction(&THCPByteStorageType, h, &THWStorage_(copyCudaByte)); + THPInsertStorageCopyFunction(&THCPCharStorageType, h, &THWStorage_(copyCudaChar)); + THPInsertStorageCopyFunction(&THCPShortStorageType, h, &THWStorage_(copyCudaShort)); + THPInsertStorageCopyFunction(&THCPIntStorageType, h, &THWStorage_(copyCudaInt)); + THPInsertStorageCopyFunction(&THCPLongStorageType, h, &THWStorage_(copyCudaLong)); + THPInsertStorageCopyFunction(&THCPFloatStorageType, h, &THWStorage_(copyCudaFloat)); + THPInsertStorageCopyFunction(&THCPDoubleStorageType, h, &THWStorage_(copyCudaDouble)); + THPInsertStorageCopyFunction(&THCPHalfStorageType, h, &THWStorage_(copyCudaHalf)); // add CPU <- GPU copies to base type - #define THPCpuStorage TH_CONCAT_3(THP, Real, Storage) + /// #define THPCpuStorage TH_CONCAT_3(THP, Real, Storage) #define THCpuStorage_(name) TH_CONCAT_4(TH, Real, Storage_, name) extern THPCopyList THCpuStorage_(copy_functions); auto& b = THCpuStorage_(copy_functions); - THPInsertStorageCopyFunction(&THCPByteStorageType, b, &THCpuStorage_(copyCudaByte)); - THPInsertStorageCopyFunction(&THCPCharStorageType, b, &THCpuStorage_(copyCudaChar)); - THPInsertStorageCopyFunction(&THCPShortStorageType, b, &THCpuStorage_(copyCudaShort)); - THPInsertStorageCopyFunction(&THCPIntStorageType, b, &THCpuStorage_(copyCudaInt)); - THPInsertStorageCopyFunction(&THCPLongStorageType, b, &THCpuStorage_(copyCudaLong)); - THPInsertStorageCopyFunction(&THCPFloatStorageType, b, &THCpuStorage_(copyCudaFloat)); - THPInsertStorageCopyFunction(&THCPDoubleStorageType, b, &THCpuStorage_(copyCudaDouble)); - THPInsertStorageCopyFunction(&THCPHalfStorageType, b, &THCpuStorage_(copyCudaHalf)); + THPInsertStorageCopyFunction(&THCPByteStorageType, b, &THCpuStorage_(copyCudaByte)); + THPInsertStorageCopyFunction(&THCPCharStorageType, b, &THCpuStorage_(copyCudaChar)); + THPInsertStorageCopyFunction(&THCPShortStorageType, b, &THCpuStorage_(copyCudaShort)); + THPInsertStorageCopyFunction(&THCPIntStorageType, b, &THCpuStorage_(copyCudaInt)); + THPInsertStorageCopyFunction(&THCPLongStorageType, b, &THCpuStorage_(copyCudaLong)); + THPInsertStorageCopyFunction(&THCPFloatStorageType, b, &THCpuStorage_(copyCudaFloat)); + THPInsertStorageCopyFunction(&THCPDoubleStorageType, b, &THCpuStorage_(copyCudaDouble)); + THPInsertStorageCopyFunction(&THCPHalfStorageType, b, &THCpuStorage_(copyCudaHalf)); #undef THCpuStorage #undef THCpuStorage_ #endif diff --git a/torch/csrc/generic/Storage.h b/torch/csrc/generic/Storage.h index 4a9b0ac..706fb41 100644 --- a/torch/csrc/generic/Storage.h +++ b/torch/csrc/generic/Storage.h @@ -2,10 +2,7 @@ #define TH_GENERIC_FILE "generic/Storage.h" #else -struct THPStorage { - PyObject_HEAD - THWStorage *cdata; -}; +#include "torch/csrc/StorageDefs.h" THP_API PyObject * THPStorage_(New)(THWStorage *ptr); extern PyObject *THPStorageClass; diff --git a/torch/csrc/generic/utils.cpp b/torch/csrc/generic/utils.cpp index 4bf6609..f61b3b9 100644 --- a/torch/csrc/generic/utils.cpp +++ b/torch/csrc/generic/utils.cpp @@ -7,15 +7,6 @@ #else #define GENERATE_SPARSE 1 #endif - -template<> -void THPPointer::free() { - if (ptr) - Py_DECREF(ptr); -} - -template class THPPointer; - #undef GENERATE_SPARSE #endif diff --git a/torch/csrc/utils.cpp b/torch/csrc/utils.cpp index e76a857..36b1ee7 100644 --- a/torch/csrc/utils.cpp +++ b/torch/csrc/utils.cpp @@ -234,3 +234,11 @@ void THPPointer::free() { THTensor_free(LIBRARY_STATE ptr); } } + +template<> +void THPPointer::free() { + if (ptr) + Py_DECREF(ptr); +} + +template class THPPointer;