/************************************************************************* * Copyright (C) [2023-2024] by Cambricon, Inc. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. *************************************************************************/ #ifndef CSRC_KERNELS_KERNEL_UTILS_H_ #define CSRC_KERNELS_KERNEL_UTILS_H_ #include #include #include #include "cnnl.h" #include "cnrt.h" namespace tmo { const std::string arch_370 = "MLU370"; enum class KernelStatus { KERNEL_STATUS_SUCCESS = 0, KERNEL_STATUS_FAILED }; #ifndef PAD_DOWN #define PAD_DOWN(x, y) (((x) / (y)) * (y)) #endif #ifndef PAD_UP #define PAD_UP(x, y) (((x) / (y) + (int)((x) % (y) > 0)) * (y)) #endif inline bool isMlu300(const std::string &dev_name) { if (dev_name.find("MLU3") != std::string::npos) { return true; } else { return false; } } inline bool is_arch300() { int card_id = -1; cnrtDeviceProp_t dev_info; CNRT_CHECK(cnrtGetDevice(&card_id)); CNRT_CHECK(cnrtGetDeviceProperties(&dev_info, card_id)); std::string dev_name = dev_info.name; return isMlu300(dev_name); } inline bool isBf16Supported() { return !is_arch300(); } } // namespace tmo #endif // CSRC_KERNELS_KERNEL_UTILS_H_