* This file is part of the MindStudio project.
* Copyright (c) 2025 Huawei Technologies Co.,Ltd.
*
* MindStudio is licensed under Mulan PSL v2.
* You can use this software according to the terms and conditions of the Mulan PSL v2.
* You may obtain a copy of Mulan PSL v2 at:
*
* http://license.coscl.org.cn/MulanPSL2
*
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
* See the Mulan PSL v2 for more details.
* ------------------------------------------------------------------------- */
#ifndef __DBI_DEFS_H__
#define __DBI_DEFS_H__
#include <cstdint>
#include "BasicDefs.h"
constexpr uint16_t INSTR_PROF_MEMSIZE = 8;
constexpr uint64_t BLOCK_GAP = 64U;
constexpr uint64_t MAX_BLOCK = 108U;
constexpr uint64_t SIMT_THREAD_GAP = 64U;
constexpr uint32_t MAX_THREAD_NUM = 2048U;
constexpr uint64_t MAX_BLOCK_DATA_SIZE = 100U * 1024 * 1024;
constexpr uint64_t BLOCK_MEM_SIZE = MAX_BLOCK_DATA_SIZE + BLOCK_GAP;
constexpr uint64_t RECORD_OVERFLOW_BIT = 1ULL << 63;
constexpr char const *OPERAND_RECORD = "OperandRecord.bin";
constexpr char const *WARP_TIMELINE = "WarpTimeline.bin";
constexpr uint32_t WARP_NUM_PER_BLOCK = 64U;
enum class ProfDBIType {
AS_IS = 0,
OPERAND_RECORD,
MEMORY_CHART,
INSTR_PROF_START,
INSTR_PROF_END,
INSTR_PROF_DFX,
BB_COUNT,
WARP_TIMELINE
};
constexpr uint32_t DBI_FLAG_OPERAND_RECORD = 1U << static_cast<uint32_t>(ProfDBIType::OPERAND_RECORD);
constexpr uint32_t DBI_FLAG_MEMORY_CHART = 1U << static_cast<uint32_t>(ProfDBIType::MEMORY_CHART);
constexpr uint32_t DBI_FLAG_INSTR_PROF_START = 1U << static_cast<uint32_t>(ProfDBIType::INSTR_PROF_START);
constexpr uint32_t DBI_FLAG_INSTR_PROF_END = 1U << static_cast<uint32_t>(ProfDBIType::INSTR_PROF_END);
constexpr uint32_t DBI_FLAG_INSTR_PROF_DFX = 1U << static_cast<uint32_t>(ProfDBIType::INSTR_PROF_DFX);
constexpr uint32_t DBI_FLAG_BB_COUNT = 1U << static_cast<uint32_t>(ProfDBIType::BB_COUNT);
constexpr uint32_t DBI_FLAG_WARP_TIMELINE = 1U << static_cast<uint32_t>(ProfDBIType::WARP_TIMELINE);
enum class OperandType : uint8_t {
DATA_F16 = 0,
DATA_F16X2,
DATA_BF16,
DATA_BF16X2,
DATA_E4M3,
DATA_E5M2,
DATA_E1M2,
DATA_E2M1,
DATA_V2BF16,
DATA_V2F16,
DATA_HIF8X2,
DATA_F8E4M3X2,
DATA_F8E5M2X2,
DATA_FMIX,
DATA_HALF,
DATA_F32,
DATA_F32X2,
DATA_FLOAT_MAX = DATA_F32X2,
DATA_B4,
DATA_B8,
DATA_B16,
DATA_B32,
DATA_B64,
DATA_B128,
DATA_S16,
DATA_S32,
DATA_U16,
DATA_U32,
DATA_S8,
DATA_U8,
DATA_U64,
DATA_S64,
DATA_SX32,
DATA_ZX32,
END
};
struct OperandHeader {
uint32_t magicWords;
uint32_t reverse;
};
#pragma pack(4)
struct WarpRecord {
uint64_t startTime;
uint64_t endTime;
};
struct WarpHeader {
uint32_t magicWords;
uint32_t warpCount;
uint32_t coreId;
uint32_t coreType;
};
struct OperandRecord {
uint64_t instructions{};
uint64_t operands{};
uint64_t funcType{};
};
struct BlockHeader {
uint64_t count;
uint64_t length;
uint64_t ndPara;
uint64_t loop3Para;
uint64_t channelPara;
uint64_t loopSizeOuttol1;
uint64_t loop1StrideOuttol1;
uint64_t loop2StrideOuttol1;
uint64_t loopSizeOuttoub;
uint64_t loop1StrideOuttoub;
uint64_t loop2StrideOuttoub;
uint64_t loopSizeUbToOut;
uint64_t loop1StrideUbToOut;
uint64_t loop2StrideUbToOut;
uint64_t mte2NzPara;
uint64_t padCntNdDma;
uint64_t loop0StrideNdDma;
uint64_t loop1StrideNdDma;
uint64_t loop2StrideNdDma;
uint64_t loop3StrideNdDma;
uint64_t loop4StrideNdDma;
uint64_t mte2SrcPara;
};
struct DBIDataHeader {
uint64_t count;
uint64_t length;
uint64_t overflow;
uint16_t blockId;
uint8_t endFlag;
};
#pragma pack()
#endif