diff --git a/dnn/include/megdnn/oprs/base.h b/dnn/include/megdnn/oprs/base.h index d111a0c2..21e34794 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 af929217..600c540e 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 adf9e0a2..5e7741d8 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 88c0255f..24611d63 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 903c51b1..4d743d26 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 844eb815..0581a6c1 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 a27a5ad8..cc9b3dcd 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 0d057e40..eec52d0d 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 cba6509f..d297492b 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 18f98900..e777fd95 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 be255df6..d87e4b52 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 fa8dde27..7da12fcb 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; }