* Copyright (c) Huawei Technologies Co., Ltd. 2023-2024. All rights reserved.
*/
#ifndef DYNAMIC_SCATTER_TILING_H
#define DYNAMIC_SCATTER_TILING_H
#include "register/op_def_registry.h"
#include "register/tilingdata_base.h"
#include "tiling/tiling_api.h"
namespace optiling {
BEGIN_TILING_DATA_DEF(DynamicScatterTilingData)
TILING_DATA_FIELD_DEF(uint32_t, totalPointNum);
TILING_DATA_FIELD_DEF(uint32_t, totalVoxelNum);
TILING_DATA_FIELD_DEF(uint32_t, featsDim);
TILING_DATA_FIELD_DEF(uint32_t, pointFeatsNum);
TILING_DATA_FIELD_DEF(uint32_t, voxelNumPerCore);
TILING_DATA_FIELD_DEF(uint32_t, voxelNumLastCore);
TILING_DATA_FIELD_DEF(uint32_t, voxelFeatsNumPerCore);
TILING_DATA_FIELD_DEF(uint32_t, voxelFeatsNumLastCore);
TILING_DATA_FIELD_DEF(uint32_t, alignedNum);
TILING_DATA_FIELD_DEF(uint32_t, featsDimAligned);
TILING_DATA_FIELD_DEF(uint32_t, availablePointNum);
TILING_DATA_FIELD_DEF(uint64_t, maskNum);
TILING_DATA_FIELD_DEF(uint32_t, maskDim);
TILING_DATA_FIELD_DEF(uint32_t, maskDimAligned);
TILING_DATA_FIELD_DEF(uint32_t, maskDimAlignedB16);
TILING_DATA_FIELD_DEF(uint32_t, blockLen);
TILING_DATA_FIELD_DEF(uint32_t, blockLenPad);
TILING_DATA_FIELD_DEF(uint32_t, blockLenMask);
TILING_DATA_FIELD_DEF(uint32_t, repeatTimes);
TILING_DATA_FIELD_DEF(uint32_t, usedCoreNum);
TILING_DATA_FIELD_DEF(bool, isFeatsAligned);
END_TILING_DATA_DEF;
REGISTER_TILING_DATA_CLASS(DynamicScatter, DynamicScatterTilingData)
class DynamicScatterTiling {
public:
explicit DynamicScatterTiling(gert::TilingContext* context) : tilingContext(context) {};
ge::graphStatus Init();
ge::graphStatus RunKernelTiling();
private:
void CalUsedCoreNum();
ge::graphStatus CalTilingAligned();
void CalMaskTiling();
void CalAvailableUbTiling();
private:
DynamicScatterTilingData tilingData;
gert::TilingContext* tilingContext = nullptr;
uint32_t coreNum;
uint32_t usedCoreNum = 1;
uint32_t totalPointNum;
uint32_t totalVoxelNum;
uint32_t featsDim;
uint32_t pointFeatsNum;
uint32_t voxelNumPerCore;
uint32_t voxelNumLastCore;
uint32_t voxelFeatsNumPerCore;
uint32_t voxelFeatsNumLastCore;
uint32_t alignedNum;
uint32_t featsDimAligned;
uint32_t availablePointNum = 1;
uint64_t maskNum = 0;
uint32_t maskDim = 0;
uint32_t maskDimAligned = 0;
uint32_t maskDimAlignedB16 = 0;
uint32_t blockLen = 0;
uint32_t blockLenPad = 0;
uint32_t blockLenMask = 0;
uint32_t repeatTimes = 1;
uint64_t ubSizePlatForm;
bool isFeatsAligned = false;
};
}
#endif