You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

powc.cpp 1.3 kB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. /**
  2. * \file dnn/src/common/powc.cpp
  3. * MegEngine is Licensed under the Apache License, Version 2.0 (the "License")
  4. *
  5. * Copyright (c) 2014-2021 Megvii Inc. All rights reserved.
  6. *
  7. * Unless required by applicable law or agreed to in writing,
  8. * software distributed under the License is distributed on an
  9. * "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  10. */
  11. #include "megdnn/oprs/general.h"
  12. #include <cmath>
  13. #include "src/common/utils.h"
  14. using namespace megdnn;
  15. void PowC::exec(_megdnn_tensor_in src, _megdnn_tensor_out dst) {
  16. megdnn_assert(
  17. src.layout.dtype == dst.layout.dtype &&
  18. src.layout.dtype.category() == DTypeCategory::FLOAT &&
  19. src.layout.eq_shape(dst.layout),
  20. "invalid layout: %s vs %s", src.layout.to_string().c_str(),
  21. dst.layout.to_string().c_str());
  22. int iv, *ivp = nullptr;
  23. float fv, *fvp = nullptr;
  24. float p = param().exp;
  25. int pi = static_cast<int>(std::round(p));
  26. if (std::abs(static_cast<float>(pi) - p) < std::numeric_limits<float>::epsilon()) {
  27. iv = pi;
  28. ivp = &iv;
  29. } else {
  30. fv = p;
  31. fvp = &fv;
  32. }
  33. do_exec(src, dst, fvp, ivp);
  34. }
  35. // vim: syntax=cpp.doxygen