diff --git a/dnn/include/megdnn/oprs/base.h b/dnn/include/megdnn/oprs/base.h index d111a0c2adcb320482b63093b3be0d69b42154df..21e3479475f1553018064c028f29fa950b89d074 100644 --- a/dnn/include/megdnn/oprs/base.h +++ b/dnn/include/megdnn/oprs/base.h @@ -172,7 +172,10 @@ public: template static void serialize_write_pod(const T& val, std::string& result) { - static_assert(std::is_standard_layout::value, "invalid type"); + static_assert(std::is_trivially_copyable::value, + "type should be trivially copyable"); + static_assert(!std::is_pointer::value, + "serialize pointer is unsafe in eager execution mode"); result.append(reinterpret_cast(&val), sizeof(T)); } @@ -182,7 +185,7 @@ public: template static T deserialize_read_pod(const std::string& data, size_t offset = 0) { - static_assert(std::is_standard_layout::value, "invalid type"); + static_assert(std::is_trivially_copyable::value, "invalid type"); T ret; //! A pointer to an object or incomplete type may be converted to a //! pointer to a different object or incomplete type. If the resulting @@ -197,7 +200,7 @@ public: template static T deserialize_read_pod(const char* data, size_t offset = 0) { - static_assert(std::is_standard_layout::value, "invalid type"); + static_assert(std::is_trivially_copyable::value, "invalid type"); T ret; //! A pointer to an object or incomplete type may be converted to a //! pointer to a different object or incomplete type. If the resulting diff --git a/dnn/src/cuda/conv_bias/algo.h b/dnn/src/cuda/conv_bias/algo.h index af9292173a73e8b7d73b0e41340efc5741246f4f..600c540e1d1b2580b39e213d3af9beaf5fefc41d 100644 --- a/dnn/src/cuda/conv_bias/algo.h +++ b/dnn/src/cuda/conv_bias/algo.h @@ -439,7 +439,7 @@ public: std::string param() const override { std::string ret; - serialize_write_pod(m_impl, ret); + serialize_write_pod(m_impl->name(), ret); return ret; } diff --git a/dnn/src/cuda/convolution/backward_data/algo.h b/dnn/src/cuda/convolution/backward_data/algo.h index adf9e0a24c5268f1e3c4a9cd71911260226acdf0..5e7741d8abd62faf03429569493f2a9a5a544f0c 100644 --- a/dnn/src/cuda/convolution/backward_data/algo.h +++ b/dnn/src/cuda/convolution/backward_data/algo.h @@ -238,7 +238,7 @@ public: std::string param() const override { std::string ret; - serialize_write_pod(m_impl, ret); + serialize_write_pod(m_impl->name(), ret); return ret; } }; diff --git a/dnn/src/cuda/convolution/backward_filter/algo.h b/dnn/src/cuda/convolution/backward_filter/algo.h index 88c0255f21d5d39f3963df9e1f2c4f8e8aa4c1a3..24611d633ea5bb41fb3ba034fae73fe869f2e86b 100644 --- a/dnn/src/cuda/convolution/backward_filter/algo.h +++ b/dnn/src/cuda/convolution/backward_filter/algo.h @@ -223,7 +223,7 @@ public: std::string param() const override { std::string ret; - serialize_write_pod(m_impl, ret); + serialize_write_pod(m_impl->name(), ret); return ret; } }; diff --git a/dnn/src/cuda/convolution3d/backward_data/algo.h b/dnn/src/cuda/convolution3d/backward_data/algo.h index 903c51b1ae53bc707fdf4ae915bc6feed4d4f356..4d743d26a1f3dfdf4c9b526e23f69f07edd40d32 100644 --- a/dnn/src/cuda/convolution3d/backward_data/algo.h +++ b/dnn/src/cuda/convolution3d/backward_data/algo.h @@ -174,7 +174,7 @@ public: MEGDNN_DECL_ALGO_TYPE(CUDA_GROUP_CONV_GENERAL) std::string param() const override { std::string ret; - serialize_write_pod(m_impl, ret); + serialize_write_pod(m_impl->name(), ret); return ret; } }; diff --git a/dnn/src/cuda/convolution3d/backward_filter/algo.h b/dnn/src/cuda/convolution3d/backward_filter/algo.h index 844eb815047cb4dfddf631ce4a7857861ba1a627..0581a6c160c58646c1f16e72eb67632036b9e6d1 100644 --- a/dnn/src/cuda/convolution3d/backward_filter/algo.h +++ b/dnn/src/cuda/convolution3d/backward_filter/algo.h @@ -183,7 +183,7 @@ public: MEGDNN_DECL_ALGO_TYPE(CUDA_GROUP_CONV_GENERAL) std::string param() const override { std::string ret; - serialize_write_pod(m_impl, ret); + serialize_write_pod(m_impl->name(), ret); return ret; } }; diff --git a/dnn/src/cuda/convolution3d/forward/algo.h b/dnn/src/cuda/convolution3d/forward/algo.h index a27a5ad8f8db0ec95781573430099123a7d38f7e..cc9b3dcd8ec0b275653f98f909113ebe06248046 100644 --- a/dnn/src/cuda/convolution3d/forward/algo.h +++ b/dnn/src/cuda/convolution3d/forward/algo.h @@ -135,7 +135,7 @@ public: MEGDNN_DECL_ALGO_TYPE(CUDA_GROUP_CONV_GENERAL) std::string param() const override { std::string ret; - serialize_write_pod(m_impl, ret); + serialize_write_pod(m_impl->name(), ret); return ret; } }; diff --git a/dnn/src/fallback/conv_bias/algos.h b/dnn/src/fallback/conv_bias/algos.h index 0d057e40f67667e7e9745cc4d266891e1aff32e4..eec52d0dd58b537aab73b7cb107f1a15098f3c41 100644 --- a/dnn/src/fallback/conv_bias/algos.h +++ b/dnn/src/fallback/conv_bias/algos.h @@ -67,7 +67,7 @@ public: MEGDNN_DECL_ALGO_TYPE(FB_WINOGRAD_F32) std::string param() const override { std::string ret; - serialize_write_pod(m_matmul_algo, ret); + serialize_write_pod(m_matmul_algo->name(), ret); return ret; } @@ -103,7 +103,7 @@ public: MEGDNN_DECL_ALGO_TYPE(FB_WINOGRAD_4X4_F32) std::string param() const override { std::string ret; - serialize_write_pod(m_matmul_algo, ret); + serialize_write_pod(m_matmul_algo->name(), ret); return ret; } @@ -139,7 +139,7 @@ public: MEGDNN_DECL_ALGO_TYPE(FB_WINOGRAD_QS8) std::string param() const override { std::string ret; - serialize_write_pod(m_matmul_algo, ret); + serialize_write_pod(m_matmul_algo->name(), ret); return ret; } @@ -175,7 +175,7 @@ public: MEGDNN_DECL_ALGO_TYPE(FB_WINOGRAD_8X8_QS8) std::string param() const override { std::string ret; - serialize_write_pod(m_matmul_algo, ret); + serialize_write_pod(m_matmul_algo->name(), ret); return ret; } diff --git a/dnn/src/fallback/conv_bias/common.h b/dnn/src/fallback/conv_bias/common.h index cba6509f9ac032d0b368a46c694806dc10cd4667..d297492b4cdd9275c1ef4f8532a13e3f6f0734c4 100644 --- a/dnn/src/fallback/conv_bias/common.h +++ b/dnn/src/fallback/conv_bias/common.h @@ -157,7 +157,7 @@ using BiasMode = ConvBiasForward::BiasMode; } \ std::string param() const override { \ std::string ret; \ - serialize_write_pod(m_matmul_algo, ret); \ + serialize_write_pod(m_matmul_algo->name(), ret); \ serialize_write_pod(m_tile_size, ret); \ return ret; \ } \ diff --git a/dnn/src/fallback/conv_bias/conv1x1/algos.h b/dnn/src/fallback/conv_bias/conv1x1/algos.h index 18f98900fea9d07b10e4121023e876db4de35001..e777fd95797676087209d50e37de99fcf51dc5f7 100644 --- a/dnn/src/fallback/conv_bias/conv1x1/algos.h +++ b/dnn/src/fallback/conv_bias/conv1x1/algos.h @@ -65,7 +65,7 @@ public: MEGDNN_DECL_ALGO_TYPE(FB_WINOGRAD_8X8_QS8) std::string param() const override { std::string ret; - serialize_write_pod(m_matmul_algo, ret); + serialize_write_pod(m_matmul_algo->name(), ret); serialize_write_pod(m_oc_block_size, ret); return ret; } diff --git a/dnn/src/fallback/conv_bias/im2col/algos.h b/dnn/src/fallback/conv_bias/im2col/algos.h index be255df67b567f8b3d3912fd117e787ab7382be5..d87e4b526806fe17c99e3520dcc0e0d30455323a 100644 --- a/dnn/src/fallback/conv_bias/im2col/algos.h +++ b/dnn/src/fallback/conv_bias/im2col/algos.h @@ -74,7 +74,7 @@ public: std::string param() const override { std::string ret; - serialize_write_pod(m_matmul_algo, ret); + serialize_write_pod(m_matmul_algo->name(), ret); serialize_write_pod(m_ohw_tile_size, ret); return ret; } diff --git a/dnn/src/fallback/convolution/algos.h b/dnn/src/fallback/convolution/algos.h index fa8dde27976fbf5ea7ab770730a89d261f1432d6..7da12fcbbb66fd0513d97c545e20838a1f7304b9 100644 --- a/dnn/src/fallback/convolution/algos.h +++ b/dnn/src/fallback/convolution/algos.h @@ -157,7 +157,7 @@ public: std::string param() const override { std::string ret; - serialize_write_pod(m_algorithm, ret); + serialize_write_pod(m_algorithm->name(), ret); return ret; }