提交 f36e99d3 编写于 作者: M Megvii Engine Team

fix(build): fix naive build

GitOrigin-RevId: 0050ff5d9c760564c179219cf7164fdc2c49c1f3
上级 51676939
...@@ -6,7 +6,8 @@ ...@@ -6,7 +6,8 @@
* *
* Unless required by applicable law or agreed to in writing, * Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an * software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or
* implied.
*/ */
#include "megdnn/basic_types.h" #include "megdnn/basic_types.h"
...@@ -65,7 +66,7 @@ std::unique_ptr<Handle> Handle::make(megcoreComputingHandle_t computing_handle, ...@@ -65,7 +66,7 @@ std::unique_ptr<Handle> Handle::make(megcoreComputingHandle_t computing_handle,
// only enable midout for CPU, becuase CPU might be unused when some // only enable midout for CPU, becuase CPU might be unused when some
// other platforms are used // other platforms are used
MIDOUT_BEGIN(HandlePlatform, midout_iv(megcorePlatformCPU)) { MIDOUT_BEGIN(HandlePlatform, midout_iv(megcorePlatformCPU)) {
// CPU // CPU
#if MEGDNN_NAIVE #if MEGDNN_NAIVE
return make_unique<naive::HandleImpl>(computing_handle); return make_unique<naive::HandleImpl>(computing_handle);
#else #else
...@@ -90,91 +91,92 @@ std::unique_ptr<Handle> Handle::make(megcoreComputingHandle_t computing_handle, ...@@ -90,91 +91,92 @@ std::unique_ptr<Handle> Handle::make(megcoreComputingHandle_t computing_handle,
} else { } else {
megdnn_throw("Debug level must be 0/1/2."); megdnn_throw("Debug level must be 0/1/2.");
} }
}
MIDOUT_END();
#endif #endif
} }
else if (platform == megcorePlatformROCM) { MIDOUT_END();
}
else if (platform == megcorePlatformROCM) {
#if MEGDNN_WITH_ROCM #if MEGDNN_WITH_ROCM
return make_rocm_handle(computing_handle); return make_rocm_handle(computing_handle);
#else #else
return nullptr; return nullptr;
#endif #endif
} } else if (platform == megcorePlatformCambricon) {
else if (platform == megcorePlatformCambricon) {
#if MEGDNN_WITH_CAMBRICON #if MEGDNN_WITH_CAMBRICON
return make_unique<cambricon::HandleImpl>(computing_handle); return make_unique<cambricon::HandleImpl>(computing_handle);
#else #else
return nullptr; return nullptr;
#endif #endif
} } else if (platform == megcorePlatformAtlas) {
else if (platform == megcorePlatformAtlas) {
#if MEGDNN_WITH_ATLAS #if MEGDNN_WITH_ATLAS
return make_unique<atlas::HandleImpl>(computing_handle); return make_unique<atlas::HandleImpl>(computing_handle);
#else #else
return nullptr; return nullptr;
#endif #endif
} }
else { else {
// CUDA // CUDA
megdnn_throw_if(platform != megcorePlatformCUDA, megdnn_error, megdnn_throw_if(platform != megcorePlatformCUDA, megdnn_error,
"platform should be CUDA Platform"); "platform should be CUDA Platform");
#if MEGDNN_WITH_CUDA #if MEGDNN_WITH_CUDA
return make_unique<cuda::HandleImpl>(computing_handle); return make_unique<cuda::HandleImpl>(computing_handle);
#else #else
return nullptr;
#endif
}
return nullptr; return nullptr;
#endif
} }
return nullptr;
}
void Handle::set_destructor(const thin_function<void()>& d) {
megdnn_assert(!m_destructor, "destructor can be set only once");
m_destructor = d; void Handle::set_destructor(const thin_function<void()>& d) {
} megdnn_assert(!m_destructor, "destructor can be set only once");
m_destructor = d;
Handle::~Handle() { }
if (m_destructor)
m_destructor(); Handle::~Handle() {
m_alive_magic = 0; if (m_destructor)
} m_destructor();
m_alive_magic = 0;
size_t Handle::alignment_requirement() const { }
// default to 32
return 32; size_t Handle::alignment_requirement() const {
// default to 32
return 32;
}
size_t Handle::image2d_pitch_alignment() const {
megdnn_throw("image2d tensor format not supported on this handle");
}
megdnn::HandleImplHelper::HandleVendorType Handle::vendor_type() const {
return HandleVendorType::NOT_SPEC;
}
bool Handle::check_cross_dev_copy_constraint(const TensorLayout& src) {
return src.is_contiguous();
}
void Handle::on_opr_destructed(OperatorBase* opr) {
if (m_alive_magic != ALIVE_MAGIC) {
megdnn_log_error(
"Handle is destructed before opr gets destructed. "
"Please fix the destruction order as this would cause "
"undefined memory access. "
"Abort now to avoid further problems.");
abort();
} }
if (m_on_opr_destructed) {
size_t Handle::image2d_pitch_alignment() const { m_on_opr_destructed(opr);
megdnn_throw("image2d tensor format not supported on this handle");
} }
}
megdnn::HandleImplHelper::HandleVendorType Handle::vendor_type() const { OperatorBase::~OperatorBase() {
return HandleVendorType::NOT_SPEC; m_handle->on_opr_destructed(this);
} }
bool Handle::check_cross_dev_copy_constraint(const TensorLayout& src) { template <typename Opr>
return src.is_contiguous(); std::unique_ptr<Opr> Handle::create_operator() {
}
void Handle::on_opr_destructed(OperatorBase * opr) {
if (m_alive_magic != ALIVE_MAGIC) {
megdnn_log_error(
"Handle is destructed before opr gets destructed. "
"Please fix the destruction order as this would cause "
"undefined memory access. "
"Abort now to avoid further problems.");
abort();
}
if (m_on_opr_destructed) {
m_on_opr_destructed(opr);
}
}
OperatorBase::~OperatorBase() { m_handle->on_opr_destructed(this); }
template <typename Opr>
std::unique_ptr<Opr> Handle::create_operator() {
#define CASE(etype, nm) \ #define CASE(etype, nm) \
case HandleType::etype: { \ case HandleType::etype: { \
MIDOUT_BEGIN(HandleOpr, Opr, midout_iv(HandleType::etype)) { \ MIDOUT_BEGIN(HandleOpr, Opr, midout_iv(HandleType::etype)) { \
...@@ -183,48 +185,47 @@ std::unique_ptr<Handle> Handle::make(megcoreComputingHandle_t computing_handle, ...@@ -183,48 +185,47 @@ std::unique_ptr<Handle> Handle::make(megcoreComputingHandle_t computing_handle,
MIDOUT_END(); \ MIDOUT_END(); \
} }
switch (m_handle_type) { switch (m_handle_type) {
CASE(NAIVE, naive); CASE(NAIVE, naive);
#if !MEGDNN_NAIVE #if !MEGDNN_NAIVE
CASE(FALLBACK, fallback); CASE(FALLBACK, fallback);
#if MEGDNN_X86 #if MEGDNN_X86
CASE(X86, x86); CASE(X86, x86);
#endif #endif
#if MEGDNN_ARMV7 #if MEGDNN_ARMV7
CASE(ARMV7, armv7); CASE(ARMV7, armv7);
#endif #endif
#if MEGDNN_AARCH64 #if MEGDNN_AARCH64
CASE(AARCH64, aarch64); CASE(AARCH64, aarch64);
#endif #endif
#if MEGDNN_ARMV7 || MEGDNN_AARCH64 #if MEGDNN_ARMV7 || MEGDNN_AARCH64
CASE(ARM_COMMON, arm_common); CASE(ARM_COMMON, arm_common);
#endif #endif
#endif // !MEGDNN_NAIVE #endif // !MEGDNN_NAIVE
#if MEGDNN_WITH_CUDA #if MEGDNN_WITH_CUDA
CASE(CUDA,cuda); CASE(CUDA, cuda);
#endif #endif
#if MEGDNN_WITH_ATLAS #if MEGDNN_WITH_ATLAS
CASE(ATLAS, atlas); CASE(ATLAS, atlas);
#endif #endif
#if MEGDNN_WITH_ROCM #if MEGDNN_WITH_ROCM
case HandleType::ROCM: { case HandleType::ROCM: {
MIDOUT_BEGIN(HandleOpr, Opr, midout_iv(HandleType::ROCM)) { MIDOUT_BEGIN(HandleOpr, Opr, midout_iv(HandleType::ROCM)) {
return create_rocm_operator<Opr>(); return create_rocm_operator<Opr>();
}
MIDOUT_END();
} }
MIDOUT_END();
}
#endif #endif
#if MEGDNN_WITH_CAMBRICON #if MEGDNN_WITH_CAMBRICON
CASE(CAMBRICON, cambricon); CASE(CAMBRICON, cambricon);
#endif #endif
default: default:
megdnn_throw("bad handle type"); megdnn_throw("bad handle type");
}
#undef CASE
} }
#undef CASE
}
#define INST(opr) template std::unique_ptr<opr> Handle::create_operator(); #define INST(opr) template std::unique_ptr<opr> Handle::create_operator();
MEGDNN_FOREACH_OPR_CLASS(INST) MEGDNN_FOREACH_OPR_CLASS(INST)
#undef INST #undef INST
// vim: syntax=cpp.doxygen // vim: syntax=cpp.doxygen
...@@ -41,7 +41,7 @@ bool is_transpose(const TensorLayout& src, const TensorLayout& dst, ...@@ -41,7 +41,7 @@ bool is_transpose(const TensorLayout& src, const TensorLayout& dst,
namespace transpose_fallback { namespace transpose_fallback {
#if MEGDNN_X86 #if MEGDNN_X86 || MEGDNN_NAIVE
constexpr size_t BLOCK_LINE_SIZE_BYTES = 64; constexpr size_t BLOCK_LINE_SIZE_BYTES = 64;
#elif MEGDNN_AARCH64 || MEGDNN_ARMV7 /*BEGIN-INLINE-INTERNAL*/ || \ #elif MEGDNN_AARCH64 || MEGDNN_ARMV7 /*BEGIN-INLINE-INTERNAL*/ || \
MEGDNN_MIPS /*END-INLINE-INTERNAL*/ MEGDNN_MIPS /*END-INLINE-INTERNAL*/
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册