@@ -72,6 +72,9 @@ FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY void Pb2Json::Message2Json(cons | |||||
void Pb2Json::OneField2Json(const ProtobufMsg &message, const ProtobufFieldDescriptor *field, | void Pb2Json::OneField2Json(const ProtobufMsg &message, const ProtobufFieldDescriptor *field, | ||||
const ProtobufReflection *reflection, const set<string> &black_fields, Json &json, | const ProtobufReflection *reflection, const set<string> &black_fields, Json &json, | ||||
bool enum2str) { | bool enum2str) { | ||||
if (field == nullptr || reflection == nullptr) { | |||||
return; | |||||
} | |||||
switch (field->type()) { | switch (field->type()) { | ||||
case ProtobufFieldDescriptor::TYPE_MESSAGE: { | case ProtobufFieldDescriptor::TYPE_MESSAGE: { | ||||
const ProtobufMsg &tmp_message = reflection->GetMessage(message, field); | const ProtobufMsg &tmp_message = reflection->GetMessage(message, field); | ||||
@@ -115,12 +118,8 @@ void Pb2Json::OneField2Json(const ProtobufMsg &message, const ProtobufFieldDescr | |||||
case ProtobufFieldDescriptor::TYPE_FLOAT: | case ProtobufFieldDescriptor::TYPE_FLOAT: | ||||
char str[kSignificantDigits]; | char str[kSignificantDigits]; | ||||
if (sprintf_s(str, kSignificantDigits, "%g", reflection->GetFloat(message, field)) != -1) { | |||||
json[field->name()] = str; | |||||
} else { | |||||
json[field->name()] = reflection->GetFloat(message, field); | |||||
} | |||||
sprintf_s(str, kSignificantDigits, "%g", reflection->GetFloat(message, field)); | |||||
json[field->name()] = str; | |||||
break; | break; | ||||
case ProtobufFieldDescriptor::TYPE_STRING: | case ProtobufFieldDescriptor::TYPE_STRING: | ||||
@@ -29,6 +29,7 @@ | |||||
namespace ge { | namespace ge { | ||||
namespace formats { | namespace formats { | ||||
namespace { | namespace { | ||||
enum DataTypeTransMode { | enum DataTypeTransMode { | ||||
kTransferWithDatatypeFloatToFloat16, | kTransferWithDatatypeFloatToFloat16, | ||||
@@ -27,6 +27,7 @@ | |||||
namespace ge { | namespace ge { | ||||
namespace formats { | namespace formats { | ||||
struct CastArgs { | struct CastArgs { | ||||
const uint8_t *data; | const uint8_t *data; | ||||
size_t src_data_size; | size_t src_data_size; | ||||
@@ -179,5 +179,6 @@ Status FormatTransferDhwcnFractalZ3D::TransShape(Format src_format, const std::v | |||||
} | } | ||||
REGISTER_FORMAT_TRANSFER(FormatTransferDhwcnFractalZ3D, FORMAT_DHWCN, FORMAT_FRACTAL_Z_3D) | REGISTER_FORMAT_TRANSFER(FormatTransferDhwcnFractalZ3D, FORMAT_DHWCN, FORMAT_FRACTAL_Z_3D) | ||||
} // namespace formats | } // namespace formats | ||||
} // namespace ge | } // namespace ge |
@@ -180,5 +180,6 @@ Status FormatTransferDhwncFractalZ3DTranspose::TransShape(Format src_format, con | |||||
} | } | ||||
REGISTER_FORMAT_TRANSFER(FormatTransferDhwncFractalZ3DTranspose, FORMAT_DHWNC, FORMAT_FRACTAL_Z_3D_TRANSPOSE) | REGISTER_FORMAT_TRANSFER(FormatTransferDhwncFractalZ3DTranspose, FORMAT_DHWNC, FORMAT_FRACTAL_Z_3D_TRANSPOSE) | ||||
} // namespace formats | } // namespace formats | ||||
} // namespace ge | } // namespace ge |
@@ -56,7 +56,7 @@ Status TransShapeToFracNz(const ShapeVector &src_shape, DataType data_type, Shap | |||||
dst_shape.clear(); | dst_shape.clear(); | ||||
hw_shape.clear(); | hw_shape.clear(); | ||||
auto w0 = GetCubeSizeByDataType(data_type); | auto w0 = GetCubeSizeByDataType(data_type); | ||||
int64_t h0 = kCubeSize; | |||||
auto h0 = GetCubeSizeByDataType(data_type); | |||||
switch (src_shape.size()) { | switch (src_shape.size()) { | ||||
case 1: | case 1: | ||||
dst_shape.push_back(Ceil(src_shape[0], w0)); | dst_shape.push_back(Ceil(src_shape[0], w0)); | ||||
@@ -19,7 +19,6 @@ | |||||
#include <securec.h> | #include <securec.h> | ||||
#include <memory> | #include <memory> | ||||
#include "common/debug/log.h" | |||||
#include "common/formats/utils/formats_definitions.h" | #include "common/formats/utils/formats_definitions.h" | ||||
#include "common/formats/utils/formats_trans_utils.h" | #include "common/formats/utils/formats_trans_utils.h" | ||||
#include "framework/common/debug/ge_log.h" | #include "framework/common/debug/ge_log.h" | ||||
@@ -108,8 +107,8 @@ Status TransFormatFromNchwToFz(const TransArgs &args, TransResult &result) { | |||||
int64_t hw = h * w; | int64_t hw = h * w; | ||||
int64_t chw = c * hw; | int64_t chw = c * hw; | ||||
int64_t nchw = n * chw; | |||||
int64_t hwc0 = hw * c0; | int64_t hwc0 = hw * c0; | ||||
int64_t nchw = n * chw; | |||||
// horizontal fractal matrix count (N) | // horizontal fractal matrix count (N) | ||||
int64_t hf_cnt = Ceil(n, static_cast<int64_t>(kNiSize)); | int64_t hf_cnt = Ceil(n, static_cast<int64_t>(kNiSize)); | ||||
@@ -120,15 +119,18 @@ Status TransFormatFromNchwToFz(const TransArgs &args, TransResult &result) { | |||||
int64_t total_ele_cnt = hf_cnt * vf_cnt * fractal_ele_cnt; | int64_t total_ele_cnt = hf_cnt * vf_cnt * fractal_ele_cnt; | ||||
int size = GetSizeByDataType(args.src_data_type); | int size = GetSizeByDataType(args.src_data_type); | ||||
int64_t dst_size = total_ele_cnt * size; | int64_t dst_size = total_ele_cnt * size; | ||||
GE_CHK_BOOL_EXEC_NOLOG(dst_size != 0, result.length = static_cast<size_t>(dst_size); return SUCCESS;); | |||||
if (dst_size == 0) { | |||||
result.length = static_cast<size_t>(dst_size); | |||||
return SUCCESS; | |||||
} | |||||
std::shared_ptr<uint8_t> dst(new (std::nothrow) uint8_t[dst_size], std::default_delete<uint8_t[]>()); | std::shared_ptr<uint8_t> dst(new (std::nothrow) uint8_t[dst_size], std::default_delete<uint8_t[]>()); | ||||
GE_CHK_BOOL_TRUE_EXEC_WITH_LOG( | |||||
dst == nullptr, | |||||
if (dst == nullptr) { | |||||
GELOGE(OUT_OF_MEMORY, "Failed to trans format from %s to %s, can not alloc the memory for dst buf %ld", | GELOGE(OUT_OF_MEMORY, "Failed to trans format from %s to %s, can not alloc the memory for dst buf %ld", | ||||
TypeUtils::FormatToSerialString(args.src_format).c_str(), | TypeUtils::FormatToSerialString(args.src_format).c_str(), | ||||
TypeUtils::FormatToSerialString(args.dst_format).c_str(), dst_size); | TypeUtils::FormatToSerialString(args.dst_format).c_str(), dst_size); | ||||
return OUT_OF_MEMORY;); | |||||
return OUT_OF_MEMORY; | |||||
} | |||||
for (int64_t vfi = 0; vfi < vf_cnt; vfi++) { | for (int64_t vfi = 0; vfi < vf_cnt; vfi++) { | ||||
// vertical fractal matrix base index | // vertical fractal matrix base index | ||||
@@ -154,20 +156,12 @@ Status TransFormatFromNchwToFz(const TransArgs &args, TransResult &result) { | |||||
auto protected_size = dst_size - offset < static_cast<int64_t>(SECUREC_MEM_MAX_LEN) | auto protected_size = dst_size - offset < static_cast<int64_t>(SECUREC_MEM_MAX_LEN) | ||||
? dst_size - offset | ? dst_size - offset | ||||
: static_cast<int64_t>(SECUREC_MEM_MAX_LEN); | : static_cast<int64_t>(SECUREC_MEM_MAX_LEN); | ||||
errno_t ret = EOK; | |||||
errno_t ret; | |||||
if (need_pad_zero) { | if (need_pad_zero) { | ||||
ret = memset_s(dst.get() + offset, static_cast<size_t>(protected_size), 0, static_cast<size_t>(size)); | ret = memset_s(dst.get() + offset, static_cast<size_t>(protected_size), 0, static_cast<size_t>(size)); | ||||
} else { | } else { | ||||
if (protected_size < size) { | |||||
GELOGE(INTERNAL_ERROR, "Failed to operate the dst memory, protected_size is %ld and size is %ld", | |||||
protected_size, size); | |||||
return INTERNAL_ERROR; | |||||
} | |||||
char *dst_data = reinterpret_cast<char *>(dst.get() + offset); | |||||
const char *src_data = reinterpret_cast<const char *>(args.data + src_offset * size); | |||||
for (int64_t index = 0; index < size; index++) { | |||||
*dst_data++ = *src_data++; | |||||
} | |||||
ret = memcpy_s(dst.get() + offset, static_cast<size_t>(protected_size), args.data + src_offset * size, | |||||
static_cast<size_t>(size)); | |||||
} | } | ||||
if (ret != EOK) { | if (ret != EOK) { | ||||
GELOGE(INTERNAL_ERROR, "Failed to operate the dst memory at offset %ld, error-code %d pad mode %d", offset, | GELOGE(INTERNAL_ERROR, "Failed to operate the dst memory at offset %ld, error-code %d pad mode %d", offset, | ||||
@@ -205,15 +199,18 @@ Status TransFormatHwcnToFz(const TransArgs &args, TransResult &result) { | |||||
dst_size *= dim; | dst_size *= dim; | ||||
} | } | ||||
dst_size *= data_size; | dst_size *= data_size; | ||||
GE_CHK_BOOL_EXEC_NOLOG(dst_size != 0, result.length = static_cast<size_t>(dst_size); return SUCCESS;); | |||||
if (dst_size == 0) { | |||||
result.length = static_cast<size_t>(dst_size); | |||||
return SUCCESS; | |||||
} | |||||
std::shared_ptr<uint8_t> dst(new (std::nothrow) uint8_t[dst_size], std::default_delete<uint8_t[]>()); | std::shared_ptr<uint8_t> dst(new (std::nothrow) uint8_t[dst_size], std::default_delete<uint8_t[]>()); | ||||
GE_CHK_BOOL_TRUE_EXEC_WITH_LOG( | |||||
dst == nullptr, | |||||
if (dst == nullptr) { | |||||
GELOGE(OUT_OF_MEMORY, "Failed to trans format from %s to %s, can not alloc the memory for dst buf %ld", | GELOGE(OUT_OF_MEMORY, "Failed to trans format from %s to %s, can not alloc the memory for dst buf %ld", | ||||
TypeUtils::FormatToSerialString(args.src_format).c_str(), | TypeUtils::FormatToSerialString(args.src_format).c_str(), | ||||
TypeUtils::FormatToSerialString(args.dst_format).c_str(), dst_size); | TypeUtils::FormatToSerialString(args.dst_format).c_str(), dst_size); | ||||
return OUT_OF_MEMORY;); | |||||
return OUT_OF_MEMORY; | |||||
} | |||||
for (int64_t c1i = 0; c1i < c1; c1i++) { | for (int64_t c1i = 0; c1i < c1; c1i++) { | ||||
for (int64_t hi = 0; hi < h; hi++) { | for (int64_t hi = 0; hi < h; hi++) { | ||||
@@ -226,22 +223,14 @@ Status TransFormatHwcnToFz(const TransArgs &args, TransResult &result) { | |||||
? dst_size - dst_offset | ? dst_size - dst_offset | ||||
: static_cast<int64_t>(SECUREC_MEM_MAX_LEN); | : static_cast<int64_t>(SECUREC_MEM_MAX_LEN); | ||||
auto pad_zero = ((c1i * c0 + c0i) >= c) || (n1n0i >= n); | auto pad_zero = ((c1i * c0 + c0i) >= c) || (n1n0i >= n); | ||||
errno_t ret = EOK; | |||||
errno_t ret; | |||||
if (pad_zero) { | if (pad_zero) { | ||||
ret = memset_s(dst.get() + dst_offset, static_cast<size_t>(protected_size), 0, | ret = memset_s(dst.get() + dst_offset, static_cast<size_t>(protected_size), 0, | ||||
static_cast<size_t>(data_size)); | static_cast<size_t>(data_size)); | ||||
} else { | } else { | ||||
if (protected_size < data_size) { | |||||
GELOGE(INTERNAL_ERROR, "Failed to operate the dst memory, protected_size is %ld and size is %ld", | |||||
protected_size, data_size); | |||||
return INTERNAL_ERROR; | |||||
} | |||||
int64_t src_idx = hi * wcn + wi * cn + (c1i * c0 + c0i) * n + n1n0i; | int64_t src_idx = hi * wcn + wi * cn + (c1i * c0 + c0i) * n + n1n0i; | ||||
char *dst_data = reinterpret_cast<char *>(dst.get() + dst_offset); | |||||
const char *src_data = reinterpret_cast<const char *>(args.data + src_idx * data_size); | |||||
for (int64_t index = 0; index < data_size; index++) { | |||||
*dst_data++ = *src_data++; | |||||
} | |||||
ret = memcpy_s(dst.get() + dst_offset, static_cast<size_t>(protected_size), | |||||
args.data + src_idx * data_size, static_cast<size_t>(data_size)); | |||||
} | } | ||||
if (ret != EOK) { | if (ret != EOK) { | ||||
GELOGE(INTERNAL_ERROR, "Failed to operate the dst memory at offset %ld, error-code %d, pad mode %d", | GELOGE(INTERNAL_ERROR, "Failed to operate the dst memory at offset %ld, error-code %d, pad mode %d", | ||||
@@ -280,15 +269,18 @@ Status TransFormatNhwcToFz(const TransArgs &args, TransResult &result) { | |||||
dst_size *= dim; | dst_size *= dim; | ||||
} | } | ||||
dst_size *= data_size; | dst_size *= data_size; | ||||
GE_CHK_BOOL_EXEC_NOLOG(dst_size != 0, result.length = static_cast<size_t>(dst_size); return SUCCESS;); | |||||
if (dst_size == 0) { | |||||
result.length = static_cast<size_t>(dst_size); | |||||
return SUCCESS; | |||||
} | |||||
std::shared_ptr<uint8_t> dst(new (std::nothrow) uint8_t[dst_size], std::default_delete<uint8_t[]>()); | std::shared_ptr<uint8_t> dst(new (std::nothrow) uint8_t[dst_size], std::default_delete<uint8_t[]>()); | ||||
GE_CHK_BOOL_TRUE_EXEC_WITH_LOG( | |||||
dst == nullptr, | |||||
if (dst == nullptr) { | |||||
GELOGE(OUT_OF_MEMORY, "Failed to trans format from %s to %s, can not alloc the memory for dst buf %ld", | GELOGE(OUT_OF_MEMORY, "Failed to trans format from %s to %s, can not alloc the memory for dst buf %ld", | ||||
TypeUtils::FormatToSerialString(args.src_format).c_str(), | TypeUtils::FormatToSerialString(args.src_format).c_str(), | ||||
TypeUtils::FormatToSerialString(args.dst_format).c_str(), dst_size); | TypeUtils::FormatToSerialString(args.dst_format).c_str(), dst_size); | ||||
return OUT_OF_MEMORY;); | |||||
return OUT_OF_MEMORY; | |||||
} | |||||
for (int64_t c1i = 0; c1i < c1; c1i++) { | for (int64_t c1i = 0; c1i < c1; c1i++) { | ||||
for (int64_t hi = 0; hi < h; hi++) { | for (int64_t hi = 0; hi < h; hi++) { | ||||
@@ -301,22 +293,14 @@ Status TransFormatNhwcToFz(const TransArgs &args, TransResult &result) { | |||||
? dst_size - dst_offset | ? dst_size - dst_offset | ||||
: static_cast<int64_t>(SECUREC_MEM_MAX_LEN); | : static_cast<int64_t>(SECUREC_MEM_MAX_LEN); | ||||
auto pad_zero = ((c1i * c0 + c0i) >= c) || (n1n0i >= n); | auto pad_zero = ((c1i * c0 + c0i) >= c) || (n1n0i >= n); | ||||
errno_t ret = EOK; | |||||
errno_t ret; | |||||
if (pad_zero) { | if (pad_zero) { | ||||
ret = memset_s(dst.get() + dst_offset, static_cast<size_t>(protected_size), 0, | ret = memset_s(dst.get() + dst_offset, static_cast<size_t>(protected_size), 0, | ||||
static_cast<size_t>(data_size)); | static_cast<size_t>(data_size)); | ||||
} else { | } else { | ||||
if (protected_size < data_size) { | |||||
GELOGE(INTERNAL_ERROR, "Failed to operate the dst memory, protected_size is %ld and size is %ld", | |||||
protected_size, data_size); | |||||
return INTERNAL_ERROR; | |||||
} | |||||
int64_t src_idx = n1n0i * hwc + hi * wc + wi * c + (c1i * c0 + c0i); | int64_t src_idx = n1n0i * hwc + hi * wc + wi * c + (c1i * c0 + c0i); | ||||
char *dst_data = reinterpret_cast<char *>(dst.get() + dst_offset); | |||||
const char *src_data = reinterpret_cast<const char *>(args.data + src_idx * data_size); | |||||
for (int64_t index = 0; index < data_size; index++) { | |||||
*dst_data++ = *src_data++; | |||||
} | |||||
ret = memcpy_s(dst.get() + dst_offset, static_cast<size_t>(protected_size), | |||||
args.data + src_idx * data_size, static_cast<size_t>(data_size)); | |||||
} | } | ||||
if (ret != EOK) { | if (ret != EOK) { | ||||
GELOGE(INTERNAL_ERROR, "Failed to operate the dst memory at offset %ld, error-code %d, pad mode %d", | GELOGE(INTERNAL_ERROR, "Failed to operate the dst memory at offset %ld, error-code %d, pad mode %d", | ||||
@@ -353,16 +337,16 @@ Status FormatTransferFractalZ::TransFormat(const TransArgs &args, TransResult &r | |||||
return PARAM_INVALID; | return PARAM_INVALID; | ||||
} | } | ||||
if (args.src_format == FORMAT_NHWC && args.dst_format == FORMAT_FRACTAL_Z) { | |||||
return TransFormatNhwcToFz(args, result); | |||||
if (args.src_format == FORMAT_NCHW && args.dst_format == FORMAT_FRACTAL_Z) { | |||||
return TransFormatFromNchwToFz(args, result); | |||||
} | } | ||||
if (args.src_format == FORMAT_HWCN && args.dst_format == FORMAT_FRACTAL_Z) { | if (args.src_format == FORMAT_HWCN && args.dst_format == FORMAT_FRACTAL_Z) { | ||||
return TransFormatHwcnToFz(args, result); | return TransFormatHwcnToFz(args, result); | ||||
} | } | ||||
if (args.src_format == FORMAT_NCHW && args.dst_format == FORMAT_FRACTAL_Z) { | |||||
return TransFormatFromNchwToFz(args, result); | |||||
if (args.src_format == FORMAT_NHWC && args.dst_format == FORMAT_FRACTAL_Z) { | |||||
return TransFormatNhwcToFz(args, result); | |||||
} | } | ||||
return UNSUPPORTED; | return UNSUPPORTED; | ||||
@@ -374,14 +358,14 @@ Status FormatTransferFractalZ::TransShape(Format src_format, const std::vector<i | |||||
return UNSUPPORTED; | return UNSUPPORTED; | ||||
} | } | ||||
if (src_format == FORMAT_NHWC && dst_format == FORMAT_FRACTAL_Z) { | |||||
return TransShapeNhwcToFz(src_shape, data_type, dst_shape); | |||||
if (src_format == FORMAT_NCHW && dst_format == FORMAT_FRACTAL_Z) { | |||||
return TransShapeNchwToFz(src_shape, data_type, dst_shape); | |||||
} | } | ||||
if (src_format == FORMAT_HWCN && dst_format == FORMAT_FRACTAL_Z) { | if (src_format == FORMAT_HWCN && dst_format == FORMAT_FRACTAL_Z) { | ||||
return TransShapeHwcnToFz(src_shape, data_type, dst_shape); | return TransShapeHwcnToFz(src_shape, data_type, dst_shape); | ||||
} | } | ||||
if (src_format == FORMAT_NCHW && dst_format == FORMAT_FRACTAL_Z) { | |||||
return TransShapeNchwToFz(src_shape, data_type, dst_shape); | |||||
if (src_format == FORMAT_NHWC && dst_format == FORMAT_FRACTAL_Z) { | |||||
return TransShapeNhwcToFz(src_shape, data_type, dst_shape); | |||||
} | } | ||||
return UNSUPPORTED; | return UNSUPPORTED; | ||||
@@ -390,5 +374,6 @@ Status FormatTransferFractalZ::TransShape(Format src_format, const std::vector<i | |||||
REGISTER_FORMAT_TRANSFER(FormatTransferFractalZ, FORMAT_NCHW, FORMAT_FRACTAL_Z) | REGISTER_FORMAT_TRANSFER(FormatTransferFractalZ, FORMAT_NCHW, FORMAT_FRACTAL_Z) | ||||
REGISTER_FORMAT_TRANSFER(FormatTransferFractalZ, FORMAT_HWCN, FORMAT_FRACTAL_Z) | REGISTER_FORMAT_TRANSFER(FormatTransferFractalZ, FORMAT_HWCN, FORMAT_FRACTAL_Z) | ||||
REGISTER_FORMAT_TRANSFER(FormatTransferFractalZ, FORMAT_NHWC, FORMAT_FRACTAL_Z) | REGISTER_FORMAT_TRANSFER(FormatTransferFractalZ, FORMAT_NHWC, FORMAT_FRACTAL_Z) | ||||
} // namespace formats | } // namespace formats | ||||
} // namespace ge | } // namespace ge |
@@ -39,6 +39,7 @@ | |||||
namespace ge { | namespace ge { | ||||
namespace formats { | namespace formats { | ||||
namespace { | namespace { | ||||
constexpr int64_t kMaxDimsNumC = 4; | constexpr int64_t kMaxDimsNumC = 4; | ||||
Status CheckDataTypeSupport(DataType data_type) { return GetSizeByDataType(data_type) > 0 ? SUCCESS : UNSUPPORTED; } | Status CheckDataTypeSupport(DataType data_type) { return GetSizeByDataType(data_type) > 0 ? SUCCESS : UNSUPPORTED; } | ||||
@@ -108,7 +109,7 @@ Status TransFormatFromNchwToFzC04(const TransArgs &args, TransResult &result) { | |||||
return NOT_CHANGED; | return NOT_CHANGED; | ||||
} | } | ||||
// prepare for padding in chw | |||||
/* prepare for padding in chw*/ | |||||
int64_t tmp = h * w * c; | int64_t tmp = h * w * c; | ||||
int64_t n_o = Ceil(n, static_cast<int64_t>(c0)); | int64_t n_o = Ceil(n, static_cast<int64_t>(c0)); | ||||
int64_t c_o = c0; | int64_t c_o = c0; | ||||
@@ -308,5 +309,6 @@ Status FormatTransferNchwToFZC04::TransShape(Format src_format, const std::vecto | |||||
} | } | ||||
REGISTER_FORMAT_TRANSFER(FormatTransferNchwToFZC04, FORMAT_NCHW, FORMAT_FRACTAL_Z_C04) | REGISTER_FORMAT_TRANSFER(FormatTransferNchwToFZC04, FORMAT_NCHW, FORMAT_FRACTAL_Z_C04) | ||||
} // namespace formats | } // namespace formats | ||||
} // namespace ge | } // namespace ge |
@@ -19,6 +19,7 @@ | |||||
namespace ge { | namespace ge { | ||||
namespace formats { | namespace formats { | ||||
static const int kCubeSize = 16; | static const int kCubeSize = 16; | ||||
static const int kNiSize = 16; | static const int kNiSize = 16; | ||||
static const int64_t kShapeItemNumMAX = 1024UL * 1024UL * 1024UL * 1024UL; | static const int64_t kShapeItemNumMAX = 1024UL * 1024UL * 1024UL * 1024UL; | ||||
@@ -46,6 +47,7 @@ enum FracZDimIndex { kFracZHWC1, kFracZN0, kFracZNi, kFracZC0, kFracZDimsNum }; | |||||
enum DhwcnDimIndex { kDhwcnD, kDhwcnH, kDhwcnW, kDhwcnC, kDhwcnN, kDhwcnDimsNum }; | enum DhwcnDimIndex { kDhwcnD, kDhwcnH, kDhwcnW, kDhwcnC, kDhwcnN, kDhwcnDimsNum }; | ||||
enum DhwncDimIndex { kDhwncD, kDhwncH, kDhwncW, kDhwncN, kDhwncC, kDhwncDimsNum }; | enum DhwncDimIndex { kDhwncD, kDhwncH, kDhwncW, kDhwncN, kDhwncC, kDhwncDimsNum }; | ||||
} // namespace formats | } // namespace formats | ||||
} // namespace ge | } // namespace ge | ||||
#endif // GE_COMMON_FORMATS_UTILS_FORMATS_DEFINITIONS_H_ | #endif // GE_COMMON_FORMATS_UTILS_FORMATS_DEFINITIONS_H_ |
@@ -69,6 +69,7 @@ T Ceil(T n1, T n2) { | |||||
} | } | ||||
return (n2 != 0) ? (n1 - 1) / n2 + 1 : 0; | return (n2 != 0) ? (n1 - 1) / n2 + 1 : 0; | ||||
} | } | ||||
} // namespace formats | } // namespace formats | ||||
} // namespace ge | } // namespace ge | ||||
#endif // GE_COMMON_FORMATS_UTILS_FORMATS_TRANS_UTILS_H_ | #endif // GE_COMMON_FORMATS_UTILS_FORMATS_TRANS_UTILS_H_ |
@@ -600,5 +600,5 @@ int16_t GetManBitLength(T man) { | |||||
} | } | ||||
return len; | return len; | ||||
} | } | ||||
} // namespace ge | |||||
}; // namespace ge | |||||
#endif // GE_COMMON_FP16_T_H_ | #endif // GE_COMMON_FP16_T_H_ |
@@ -1,81 +0,0 @@ | |||||
/** | |||||
* Copyright 2019-2020 Huawei Technologies Co., Ltd | |||||
* | |||||
* Licensed under the Apache License, Version 2.0 (the "License"); | |||||
* you may not use this file except in compliance with the License. | |||||
* You may obtain a copy of the License at | |||||
* | |||||
* http://www.apache.org/licenses/LICENSE-2.0 | |||||
* | |||||
* Unless required by applicable law or agreed to in writing, software | |||||
* distributed under the License is distributed on an "AS IS" BASIS, | |||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||||
* See the License for the specific language governing permissions and | |||||
* limitations under the License. | |||||
*/ | |||||
#include "common/ge/op_tiling_manager.h" | |||||
#include "framework/common/debug/log.h" | |||||
#include <string> | |||||
namespace { | |||||
const char *const kEnvName = "ASCEND_OPP_PATH"; | |||||
const std::string kDefaultPath = "/usr/local/Ascend/opp"; | |||||
const std::string kDefaultBuiltInTilingPath = "/op_impl/built-in/liboptiling.so"; | |||||
const std::string kDefaultCustomTilingPath = "/op_impl/custom/liboptiling.so"; | |||||
const uint8_t kPrefixIndex = 9; | |||||
} // namespace | |||||
namespace ge { | |||||
void OpTilingManager::ClearHandles() noexcept { | |||||
for (const auto &handle : handles_) { | |||||
if (dlclose(handle.second) != 0) { | |||||
GELOGE(FAILED, "Failed to close handle of %s: %s", handle.first.c_str(), dlerror()); | |||||
} | |||||
} | |||||
handles_.clear(); | |||||
} | |||||
OpTilingManager::~OpTilingManager() { ClearHandles(); } | |||||
std::string OpTilingManager::GetPath() { | |||||
const char *opp_path_env = std::getenv(kEnvName); | |||||
std::string opp_path = kDefaultPath; | |||||
if (opp_path_env != nullptr) { | |||||
char resolved_path[PATH_MAX]; | |||||
if (realpath(opp_path_env, resolved_path) == NULL) { | |||||
GELOGE(PARAM_INVALID, "Failed load tiling lib as env 'ASCEND_OPP_PATH'(%s) is invalid path.", opp_path_env); | |||||
return std::string(); | |||||
} | |||||
opp_path = resolved_path; | |||||
} | |||||
return opp_path; | |||||
} | |||||
void OpTilingManager::LoadSo() { | |||||
std::string opp_path = GetPath(); | |||||
if (opp_path.empty()) { | |||||
GELOGW("Skip load tiling lib."); | |||||
return; | |||||
} | |||||
std::string built_in_tiling_lib = opp_path + kDefaultBuiltInTilingPath; | |||||
std::string custom_tiling_lib = opp_path + kDefaultCustomTilingPath; | |||||
std::string built_in_name = kDefaultBuiltInTilingPath.substr(kPrefixIndex); | |||||
std::string custom_name = kDefaultCustomTilingPath.substr(kPrefixIndex); | |||||
void *handle_bi = dlopen(built_in_tiling_lib.c_str(), RTLD_NOW | RTLD_GLOBAL); | |||||
if (handle_bi == nullptr) { | |||||
GELOGW("Failed to dlopen %s!", dlerror()); | |||||
} else { | |||||
handles_[built_in_name] = handle_bi; | |||||
} | |||||
void *handle_ct = dlopen(custom_tiling_lib.c_str(), RTLD_NOW | RTLD_GLOBAL); | |||||
if (handle_ct == nullptr) { | |||||
GELOGW("Failed to dlopen %s!", dlerror()); | |||||
} else { | |||||
handles_[custom_name] = handle_ct; | |||||
} | |||||
} | |||||
} // namespace ge |
@@ -1,38 +0,0 @@ | |||||
/** | |||||
* Copyright 2019-2020 Huawei Technologies Co., Ltd | |||||
* | |||||
* Licensed under the Apache License, Version 2.0 (the "License"); | |||||
* you may not use this file except in compliance with the License. | |||||
* You may obtain a copy of the License at | |||||
* | |||||
* http://www.apache.org/licenses/LICENSE-2.0 | |||||
* | |||||
* Unless required by applicable law or agreed to in writing, software | |||||
* distributed under the License is distributed on an "AS IS" BASIS, | |||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||||
* See the License for the specific language governing permissions and | |||||
* limitations under the License. | |||||
*/ | |||||
#ifndef GE_COMMON_GE_OP_TILING_MANAGER_H_ | |||||
#define GE_COMMON_GE_OP_TILING_MANAGER_H_ | |||||
#include <map> | |||||
namespace ge { | |||||
using SoToHandleMap = std::map<std::string, void *>; | |||||
class OpTilingManager { | |||||
public: | |||||
OpTilingManager() = default; | |||||
~OpTilingManager(); | |||||
void LoadSo(); | |||||
private: | |||||
static std::string GetPath(); | |||||
void ClearHandles() noexcept; | |||||
SoToHandleMap handles_; | |||||
}; | |||||
} // namespace ge | |||||
#endif // GE_COMMON_GE_OP_TILING_MANAGER_H_ |
@@ -17,7 +17,6 @@ | |||||
#include "framework/common/helper/model_helper.h" | #include "framework/common/helper/model_helper.h" | ||||
#include "common/ge/ge_util.h" | #include "common/ge/ge_util.h" | ||||
#include "common/util/error_manager/error_manager.h" | |||||
#include "framework/common/debug/log.h" | #include "framework/common/debug/log.h" | ||||
#include "framework/common/util.h" | #include "framework/common/util.h" | ||||
#include "framework/common/debug/ge_log.h" | #include "framework/common/debug/ge_log.h" | ||||
@@ -268,7 +267,6 @@ FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY Status ModelHelper::LoadModel(c | |||||
} | } | ||||
auto partition_table = reinterpret_cast<ModelPartitionTable *>(model_addr_tmp_); | auto partition_table = reinterpret_cast<ModelPartitionTable *>(model_addr_tmp_); | ||||
if (partition_table->num == kOriginalOmPartitionNum) { | if (partition_table->num == kOriginalOmPartitionNum) { | ||||
model_addr_tmp_ = nullptr; | |||||
GELOGE(FAILED, "om model is error,please use executable om model"); | GELOGE(FAILED, "om model is error,please use executable om model"); | ||||
return FAILED; | return FAILED; | ||||
} | } | ||||
@@ -392,6 +390,107 @@ FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY GeModelPtr ModelHelper::GetGeMo | |||||
return out_model; | return out_model; | ||||
} | } | ||||
// Transit func for model to ge_model. It will be removed when load and build support ge_model in future | |||||
FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY Status ModelHelper::TransModelToGeModel(const ModelPtr &model, | |||||
GeModelPtr &ge_model) { | |||||
if (model == nullptr) { | |||||
GELOGE(FAILED, "Model is null"); | |||||
return FAILED; | |||||
} | |||||
ge_model = ge::MakeShared<ge::GeModel>(); | |||||
GE_CHECK_NOTNULL(ge_model); | |||||
ge_model->SetGraph(model->GetGraph()); | |||||
ge_model->SetName(model->GetName()); | |||||
ge_model->SetVersion(model->GetVersion()); | |||||
ge_model->SetPlatformVersion(model->GetPlatformVersion()); | |||||
ge_model->SetAttr(model->MutableAttrMap()); | |||||
// Copy weight info | |||||
auto compute_graph = ge::GraphUtils::GetComputeGraph(model->GetGraph()); | |||||
// ge::Buffer weight; | |||||
ge::Buffer weight; | |||||
(void)ge::AttrUtils::GetZeroCopyBytes(compute_graph, ge::ATTR_NAME_WEIGHTS_DATA, weight); | |||||
ge_model->SetWeight(weight); | |||||
// Copy task info | |||||
if (model->HasAttr(MODEL_ATTR_TASKS)) { | |||||
ge::Buffer task_buffer; | |||||
GE_CHK_BOOL_RET_STATUS(ge::AttrUtils::GetZeroCopyBytes(model, MODEL_ATTR_TASKS, task_buffer), FAILED, | |||||
"Get bytes failed."); | |||||
std::shared_ptr<ModelTaskDef> task = ge::MakeShared<ModelTaskDef>(); | |||||
GE_CHECK_NOTNULL(task); | |||||
GE_IF_BOOL_EXEC(task_buffer.GetData() == nullptr, GELOGE(FAILED, "Get data fail"); return FAILED); | |||||
GE_IF_BOOL_EXEC(task_buffer.GetSize() == 0, GELOGE(FAILED, "Get size fail"); return FAILED); | |||||
GE_CHK_BOOL_EXEC(ReadProtoFromArray(task_buffer.GetData(), static_cast<int>(task_buffer.GetSize()), task.get()), | |||||
return INTERNAL_ERROR, "ReadProtoFromArray failed."); | |||||
ge_model->SetModelTaskDef(task); | |||||
} | |||||
// Copy tbe kernel info | |||||
// TBEKernelStore kernel_store; | |||||
TBEKernelStore kernel_store; | |||||
if (compute_graph != nullptr && compute_graph->GetDirectNodesSize() != 0) { | |||||
for (const ge::NodePtr &n : compute_graph->GetDirectNode()) { | |||||
auto node_op_desc = n->GetOpDesc(); | |||||
GE_IF_BOOL_EXEC(node_op_desc == nullptr, continue); | |||||
TBEKernelPtr tbe_kernel = node_op_desc->TryGetExtAttr(ge::OP_EXTATTR_NAME_TBE_KERNEL, TBEKernelPtr()); | |||||
GE_IF_BOOL_EXEC(tbe_kernel == nullptr, continue); | |||||
kernel_store.AddTBEKernel(tbe_kernel); | |||||
GELOGI("Add tbe kernel bin %s", tbe_kernel->GetName().c_str()); | |||||
} | |||||
} | |||||
if (!kernel_store.Build()) { | |||||
GELOGE(FAILED, "TBE Kernels store build failed!"); | |||||
return FAILED; | |||||
} | |||||
ge_model->SetTBEKernelStore(kernel_store); | |||||
return SUCCESS; | |||||
} | |||||
// trasit func for ge_model to Model. will be removed when load and build support ge_model in future | |||||
FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY Status ModelHelper::TransGeModelToModel(const GeModelPtr &ge_model, | |||||
ModelPtr &model) { | |||||
if (ge_model == nullptr) { | |||||
GELOGE(FAILED, "Ge_model is null"); | |||||
return FAILED; | |||||
} | |||||
model = ge::MakeShared<ge::Model>(); | |||||
GE_CHECK_NOTNULL(model); | |||||
model->SetGraph(ge_model->GetGraph()); | |||||
model->SetName(ge_model->GetName()); | |||||
model->SetVersion(ge_model->GetVersion()); | |||||
model->SetPlatformVersion(ge_model->GetPlatformVersion()); | |||||
model->SetAttr(ge_model->MutableAttrMap()); | |||||
// Copy weight info | |||||
auto compute_graph = ge::GraphUtils::GetComputeGraph(model->GetGraph()); | |||||
bool ret = ge::AttrUtils::SetZeroCopyBytes(compute_graph, ge::ATTR_NAME_WEIGHTS_DATA, ge_model->GetWeight()); | |||||
if (!ret) { | |||||
GELOGE(FAILED, "Copy weight buffer failed!"); | |||||
return FAILED; | |||||
} | |||||
// Copy task info | |||||
std::shared_ptr<ModelTaskDef> model_task = ge_model->GetModelTaskDefPtr(); | |||||
if (model_task != nullptr) { | |||||
int size = model_task->ByteSize(); | |||||
ge::Buffer buffer(static_cast<size_t>(size)); | |||||
if (buffer.GetSize() == 0) { | |||||
GELOGE(MEMALLOC_FAILED, "alloc model attr task buffer failed!"); | |||||
return MEMALLOC_FAILED; | |||||
} | |||||
// no need to check value | |||||
(void)model_task->SerializePartialToArray(buffer.GetData(), size); | |||||
ret = ge::AttrUtils::SetZeroCopyBytes(model, MODEL_ATTR_TASKS, std::move(buffer)); | |||||
if (!ret) { | |||||
GELOGE(FAILED, "Copy task buffer failed!"); | |||||
return FAILED; | |||||
} | |||||
} | |||||
return SUCCESS; | |||||
} | |||||
Status ModelHelper::ReleaseLocalModelData() noexcept { | Status ModelHelper::ReleaseLocalModelData() noexcept { | ||||
Status result = SUCCESS; | Status result = SUCCESS; | ||||
if (model_addr_tmp_ != nullptr) { | if (model_addr_tmp_ != nullptr) { | ||||
@@ -92,5 +92,5 @@ fp16_t max(fp16_t fp1, fp16_t fp2); | |||||
/// @brief Calculate the minimum fp16_t of fp1 and fp2 | /// @brief Calculate the minimum fp16_t of fp1 and fp2 | ||||
/// @return Returns minimum fp16_t of fp1 and fp2 | /// @return Returns minimum fp16_t of fp1 and fp2 | ||||
fp16_t min(fp16_t fp1, fp16_t fp2); | fp16_t min(fp16_t fp1, fp16_t fp2); | ||||
} // namespace ge | |||||
}; // namespace ge | |||||
#endif // GE_COMMON_MATH_FP16_MATH_H_ | #endif // GE_COMMON_MATH_FP16_MATH_H_ |
@@ -27,6 +27,7 @@ | |||||
#include "mmpa/mmpa_api.h" | #include "mmpa/mmpa_api.h" | ||||
namespace ge { | namespace ge { | ||||
/** | /** | ||||
* @ingroup domi_calibration | * @ingroup domi_calibration | ||||
* @brief Initializes an input array to a specified value | * @brief Initializes an input array to a specified value | ||||
@@ -66,6 +67,7 @@ Status NnSet(const int32_t n, const Dtype alpha, Dtype *output) { | |||||
} | } | ||||
return SUCCESS; | return SUCCESS; | ||||
} | } | ||||
} // end namespace ge | } // end namespace ge | ||||
#endif // GE_COMMON_MATH_UTIL_H_ | #endif // GE_COMMON_MATH_UTIL_H_ |
@@ -60,8 +60,8 @@ FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY Status ModelSaver::SaveJsonToFi | |||||
mode_t mode = S_IRUSR | S_IWUSR; | mode_t mode = S_IRUSR | S_IWUSR; | ||||
int32_t fd = mmOpen2(real_path, O_RDWR | O_CREAT | O_TRUNC, mode); | int32_t fd = mmOpen2(real_path, O_RDWR | O_CREAT | O_TRUNC, mode); | ||||
if (fd == EN_ERROR || fd == EN_INVALID_PARAM) { | if (fd == EN_ERROR || fd == EN_INVALID_PARAM) { | ||||
ErrorManager::GetInstance().ATCReportErrMessage("E19001", {"file", "errmsg"}, {file_path, strerror(errno)}); | |||||
GELOGE(FAILED, "Open file[%s] failed. %s", file_path, strerror(errno)); | |||||
ErrorManager::GetInstance().ATCReportErrMessage("E19001", {"filepath", "errMsg"}, {file_path, strerror(errno)}); | |||||
GELOGE(FAILED, "Open file failed. file path : %s, %s", file_path, strerror(errno)); | |||||
return FAILED; | return FAILED; | ||||
} | } | ||||
const char *model_char = model_str.c_str(); | const char *model_char = model_str.c_str(); | ||||
@@ -69,7 +69,8 @@ FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY Status ModelSaver::SaveJsonToFi | |||||
// Write data to file | // Write data to file | ||||
mmSsize_t mmpa_ret = mmWrite(fd, const_cast<void *>((const void *)model_char), len); | mmSsize_t mmpa_ret = mmWrite(fd, const_cast<void *>((const void *)model_char), len); | ||||
if (mmpa_ret == EN_ERROR || mmpa_ret == EN_INVALID_PARAM) { | if (mmpa_ret == EN_ERROR || mmpa_ret == EN_INVALID_PARAM) { | ||||
ErrorManager::GetInstance().ATCReportErrMessage("E19004", {"file", "errmsg"}, {file_path, strerror(errno)}); | |||||
ErrorManager::GetInstance().ATCReportErrMessage("E19003", {"mmpa_ret", "errMsg"}, | |||||
{std::to_string(mmpa_ret), strerror(errno)}); | |||||
// Need to both print the error info of mmWrite and mmClose, so return ret after mmClose | // Need to both print the error info of mmWrite and mmClose, so return ret after mmClose | ||||
GELOGE(FAILED, "Write to file failed. errno = %d, %s", mmpa_ret, strerror(errno)); | GELOGE(FAILED, "Write to file failed. errno = %d, %s", mmpa_ret, strerror(errno)); | ||||
ret = FAILED; | ret = FAILED; | ||||
@@ -16,15 +16,12 @@ | |||||
#include "common/profiling/profiling_manager.h" | #include "common/profiling/profiling_manager.h" | ||||
#include <nlohmann/json.hpp> | |||||
#include "framework/common/debug/ge_log.h" | #include "framework/common/debug/ge_log.h" | ||||
#include "framework/common/debug/log.h" | #include "framework/common/debug/log.h" | ||||
#include "framework/common/string_util.h" | #include "framework/common/string_util.h" | ||||
#include "graph/ge_context.h" | #include "graph/ge_context.h" | ||||
#include "runtime/base.h" | #include "runtime/base.h" | ||||
using Json = nlohmann::json; | |||||
namespace { | namespace { | ||||
const char *const kJobID = "jobID"; | const char *const kJobID = "jobID"; | ||||
const char *const kDeviceID = "deviceID"; | const char *const kDeviceID = "deviceID"; | ||||
@@ -35,6 +32,7 @@ const char *const kEvents = "events"; | |||||
const char *const kAiCoreEvents = "ai_core_events"; | const char *const kAiCoreEvents = "ai_core_events"; | ||||
const char *const kName = "name"; | const char *const kName = "name"; | ||||
const char *const kTraceID = "traceId"; | const char *const kTraceID = "traceId"; | ||||
const char *const kProfDir = "resultPath"; | |||||
const size_t kReportMaxLen = 2048; | const size_t kReportMaxLen = 2048; | ||||
} // namespace | } // namespace | ||||
@@ -100,6 +98,10 @@ FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY ge::Status ProfilingManager::In | |||||
Json start_prof_conf = Json::parse(config); | Json start_prof_conf = Json::parse(config); | ||||
Json &prof_conf = start_prof_conf[kStartCfg][0]; | Json &prof_conf = start_prof_conf[kStartCfg][0]; | ||||
job_id_ = prof_conf[kJobID]; | job_id_ = prof_conf[kJobID]; | ||||
auto iter = prof_conf.find(kProfDir); | |||||
if (iter != prof_conf.end()) { | |||||
prof_dir_ = prof_conf[kProfDir]; | |||||
} | |||||
Json &device_id = prof_conf[kDeviceID]; | Json &device_id = prof_conf[kDeviceID]; | ||||
if (device_id.size() != 0) { | if (device_id.size() != 0) { | ||||
vector<int32_t>().swap(device_id_); | vector<int32_t>().swap(device_id_); | ||||
@@ -126,23 +128,36 @@ FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY ge::Status ProfilingManager::In | |||||
} | } | ||||
} | } | ||||
GELOGI("Profiling json config from acl:%s", config.c_str()); | |||||
Json &features = prof_conf[kFeatures]; | Json &features = prof_conf[kFeatures]; | ||||
if (ParseFeaturesFromAclCfg(features) != SUCCESS) { | |||||
GELOGE(FAILED, "Parse feature from acl cfg failed."); | |||||
return FAILED; | |||||
} | |||||
is_profiling_ = true; | |||||
} catch (...) { | |||||
GELOGE(FAILED, "Json conf is not invalid !"); | |||||
return ge::PARAM_INVALID; | |||||
} | |||||
#endif | |||||
return ge::SUCCESS; | |||||
} | |||||
FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY ge::Status ProfilingManager::ParseFeaturesFromAclCfg( | |||||
const Json &features) { | |||||
#ifdef DAVINCI_SUPPORT_PROFILING | |||||
try { | |||||
for (size_t i = 0; i < features.size(); ++i) { | for (size_t i = 0; i < features.size(); ++i) { | ||||
Json &feature = features[i]; | |||||
const Json &feature = features[i]; | |||||
if ((feature.find(kName) == feature.end()) || feature[kName].is_null()) { | if ((feature.find(kName) == feature.end()) || feature[kName].is_null()) { | ||||
continue; | continue; | ||||
} | } | ||||
const std::string &name = feature[kName]; | const std::string &name = feature[kName]; | ||||
if (name == "op_trace") { | if (name == "op_trace") { | ||||
GELOGI("Op trace config from acl"); | |||||
Json &conf = feature[kConf]; | |||||
Json &events = conf[0][kEvents]; | |||||
const Json &conf = feature[kConf]; | |||||
const Json &events = conf[0][kEvents]; | |||||
const std::string &ai_core_events = events[0][kAiCoreEvents]; | const std::string &ai_core_events = events[0][kAiCoreEvents]; | ||||
GELOGI("Op trace config from acl ai_core_events:%s", ai_core_events.c_str()); | GELOGI("Op trace config from acl ai_core_events:%s", ai_core_events.c_str()); | ||||
is_op_trace_ = true; | is_op_trace_ = true; | ||||
// op trace get conf | |||||
ProfMgrConf prof_mgr_conf; | ProfMgrConf prof_mgr_conf; | ||||
int result = ProfMgrGetConf(ai_core_events, &prof_mgr_conf); | int result = ProfMgrGetConf(ai_core_events, &prof_mgr_conf); | ||||
if (result != 0) { | if (result != 0) { | ||||
@@ -154,10 +169,16 @@ FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY ge::Status ProfilingManager::In | |||||
GELOGI("Op trace profiling iter num %d,", op_trace_iter_num_); | GELOGI("Op trace profiling iter num %d,", op_trace_iter_num_); | ||||
} else if (name == "task_trace") { | } else if (name == "task_trace") { | ||||
is_op_trace_ = false; | is_op_trace_ = false; | ||||
if (feature.find(kConf) != feature.end()) { | |||||
const Json &conf = feature[kConf]; | |||||
std::stringstream task_trace_conf; | |||||
task_trace_conf << conf; | |||||
task_trace_conf_ = task_trace_conf.str(); | |||||
} | |||||
GELOGI("Task trace config from acl"); | GELOGI("Task trace config from acl"); | ||||
} else if (name == "system_trace") { | } else if (name == "system_trace") { | ||||
is_op_trace_ = false; | is_op_trace_ = false; | ||||
Json &conf = feature[kConf]; | |||||
const Json &conf = feature[kConf]; | |||||
std::stringstream system_trace_conf; | std::stringstream system_trace_conf; | ||||
system_trace_conf << conf; | system_trace_conf << conf; | ||||
system_trace_conf_ = system_trace_conf.str(); | system_trace_conf_ = system_trace_conf.str(); | ||||
@@ -165,10 +186,8 @@ FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY ge::Status ProfilingManager::In | |||||
} | } | ||||
profiling_opts_.push_back(name); | profiling_opts_.push_back(name); | ||||
} | } | ||||
is_profiling_ = true; | |||||
} catch (...) { | } catch (...) { | ||||
GELOGE(FAILED, "Json conf is not invalid !"); | |||||
GELOGE(ge::PARAM_INVALID, "Json conf feature is not invalid !"); | |||||
return ge::PARAM_INVALID; | return ge::PARAM_INVALID; | ||||
} | } | ||||
#endif | #endif | ||||
@@ -235,6 +254,10 @@ FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY ge::Status ProfilingManager::St | |||||
p_device[kDeviceID] = std::to_string(device_id); | p_device[kDeviceID] = std::to_string(device_id); | ||||
p_device[kJobID] = job_id_; | p_device[kJobID] = job_id_; | ||||
p_device[kTraceID] = std::to_string(GetContext().TraceId()); | p_device[kTraceID] = std::to_string(GetContext().TraceId()); | ||||
if (!prof_dir_.empty()) { | |||||
p_device[kProfDir] = prof_dir_; | |||||
GELOGI("Prof dir: %s.", prof_dir_.c_str()); | |||||
} | |||||
Json features; | Json features; | ||||
if (is_op_trace_) { | if (is_op_trace_) { | ||||
@@ -258,6 +281,10 @@ FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY ge::Status ProfilingManager::St | |||||
Json f; | Json f; | ||||
if (profiling_opts_[i] == "system_trace") { | if (profiling_opts_[i] == "system_trace") { | ||||
f[kConf] = nlohmann::json::parse(system_trace_conf_); | f[kConf] = nlohmann::json::parse(system_trace_conf_); | ||||
} else if (profiling_opts_[i] == "task_trace") { | |||||
if (!task_trace_conf_.empty()) { | |||||
f[kConf] = nlohmann::json::parse(task_trace_conf_); | |||||
} | |||||
} | } | ||||
f[kName] = profiling_opts_[i]; | f[kName] = profiling_opts_[i]; | ||||
features[i] = f; | features[i] = f; | ||||
@@ -336,17 +363,16 @@ FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY void ProfilingManager::Profilin | |||||
std::string data; | std::string data; | ||||
for (const auto &task : task_desc_info) { | for (const auto &task : task_desc_info) { | ||||
std::string model_name = task.model_name; | |||||
std::string op_name = task.op_name; | std::string op_name = task.op_name; | ||||
uint32_t block_dim = task.block_dim; | uint32_t block_dim = task.block_dim; | ||||
uint32_t task_id = task.task_id; | uint32_t task_id = task.task_id; | ||||
uint32_t stream_id = task.stream_id; | uint32_t stream_id = task.stream_id; | ||||
data = model_name.append(" ").append(op_name).append(" ").append(std::to_string(block_dim) | |||||
.append(" ") | |||||
.append(std::to_string(task_id)) | |||||
.append(" ") | |||||
.append(std::to_string(stream_id)) | |||||
.append("\n")); | |||||
data = op_name.append(" ").append(std::to_string(block_dim) | |||||
.append(" ") | |||||
.append(std::to_string(task_id)) | |||||
.append(" ") | |||||
.append(std::to_string(stream_id)) | |||||
.append("\n")); | |||||
Msprof::Engine::ReporterData reporter_data{}; | Msprof::Engine::ReporterData reporter_data{}; | ||||
reporter_data.deviceId = device_id; | reporter_data.deviceId = device_id; | ||||
@@ -377,12 +403,7 @@ FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY void ProfilingManager::Profilin | |||||
std::string data; | std::string data; | ||||
for (const auto &graph : compute_graph_desc_info) { | for (const auto &graph : compute_graph_desc_info) { | ||||
data.append("model_name:") | |||||
.append(graph.model_name) | |||||
.append(" op_name:") | |||||
.append(graph.op_name) | |||||
.append(" op_type:") | |||||
.append(graph.op_type); | |||||
data.append("op_name:").append(graph.op_name).append(" op_type:").append(graph.op_type); | |||||
for (size_t i = 0; i < graph.input_format.size(); ++i) { | for (size_t i = 0; i < graph.input_format.size(); ++i) { | ||||
data.append(" input_id:") | data.append(" input_id:") | ||||
.append(std::to_string(i)) | .append(std::to_string(i)) | ||||
@@ -17,6 +17,7 @@ | |||||
#ifndef GE_COMMON_PROFILING_PROFILING_MANAGER_H_ | #ifndef GE_COMMON_PROFILING_PROFILING_MANAGER_H_ | ||||
#define GE_COMMON_PROFILING_PROFILING_MANAGER_H_ | #define GE_COMMON_PROFILING_PROFILING_MANAGER_H_ | ||||
#include <nlohmann/json.hpp> | |||||
#include <map> | #include <map> | ||||
#include <string> | #include <string> | ||||
#include <vector> | #include <vector> | ||||
@@ -30,6 +31,7 @@ | |||||
using std::map; | using std::map; | ||||
using std::string; | using std::string; | ||||
using std::vector; | using std::vector; | ||||
using Json = nlohmann::json; | |||||
namespace ge { | namespace ge { | ||||
const std::string GE_PROFILING_MODULE = "Framework"; | const std::string GE_PROFILING_MODULE = "Framework"; | ||||
@@ -84,11 +86,13 @@ class FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY ProfilingManager { | |||||
void PluginUnInit(const std::string &module) const; | void PluginUnInit(const std::string &module) const; | ||||
private: | private: | ||||
ge::Status ParseFeaturesFromAclCfg(const Json &feature); | |||||
bool is_profiling_ = false; | bool is_profiling_ = false; | ||||
bool is_op_trace_ = false; | bool is_op_trace_ = false; | ||||
bool is_load_ = false; | bool is_load_ = false; | ||||
int32_t op_trace_iter_num_ = 0; | int32_t op_trace_iter_num_ = 0; | ||||
string job_id_; | string job_id_; | ||||
string prof_dir_; | |||||
vector<int32_t> device_id_; | vector<int32_t> device_id_; | ||||
vector<string> op_trace_conf_; | vector<string> op_trace_conf_; | ||||
vector<string> profiling_opts_; | vector<string> profiling_opts_; | ||||
@@ -96,6 +100,7 @@ class FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY ProfilingManager { | |||||
string recv_profiling_config_; | string recv_profiling_config_; | ||||
string send_profiling_config_; | string send_profiling_config_; | ||||
string system_trace_conf_; | string system_trace_conf_; | ||||
string task_trace_conf_; | |||||
const ProfilingEngineImpl engine_; | const ProfilingEngineImpl engine_; | ||||
}; | }; | ||||
} // namespace ge | } // namespace ge | ||||
@@ -20,204 +20,15 @@ | |||||
#include <cstdio> | #include <cstdio> | ||||
#include <fstream> | #include <fstream> | ||||
#include "common/ge/ge_util.h" | |||||
#include "common/util.h" | #include "common/util.h" | ||||
#include "framework/common/debug/ge_log.h" | #include "framework/common/debug/ge_log.h" | ||||
#include "framework/common/debug/log.h" | #include "framework/common/debug/log.h" | ||||
#include "framework/common/ge_types.h" | #include "framework/common/ge_types.h" | ||||
#include "framework/common/types.h" | #include "framework/common/types.h" | ||||
#include "graph/debug/ge_attr_define.h" | #include "graph/debug/ge_attr_define.h" | ||||
#include "graph/ge_context.h" | |||||
#include "graph/utils/attr_utils.h" | #include "graph/utils/attr_utils.h" | ||||
namespace ge { | namespace ge { | ||||
namespace { | |||||
const string kEnableFlag = "1"; | |||||
const uint32_t kAicoreOverflow = (0x1 << 0); | |||||
const uint32_t kAtomicOverflow = (0x1 << 1); | |||||
const uint32_t kAllOverflow = (kAicoreOverflow | kAtomicOverflow); | |||||
} // namespace | |||||
FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY DumpProperties::DumpProperties(const DumpProperties &other) { | |||||
CopyFrom(other); | |||||
} | |||||
FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY DumpProperties &DumpProperties::operator=( | |||||
const DumpProperties &other) { | |||||
CopyFrom(other); | |||||
return *this; | |||||
} | |||||
FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY void DumpProperties::InitByOptions() { | |||||
enable_dump_.clear(); | |||||
enable_dump_debug_.clear(); | |||||
dump_path_.clear(); | |||||
dump_step_.clear(); | |||||
dump_mode_.clear(); | |||||
is_op_debug_ = false; | |||||
op_debug_mode_ = 0; | |||||
string enable_dump; | |||||
(void)GetContext().GetOption(OPTION_EXEC_ENABLE_DUMP, enable_dump); | |||||
enable_dump_ = enable_dump; | |||||
string enable_dump_debug; | |||||
(void)GetContext().GetOption(OPTION_EXEC_ENABLE_DUMP_DEBUG, enable_dump_debug); | |||||
enable_dump_debug_ = enable_dump_debug; | |||||
if ((enable_dump_ == kEnableFlag) || (enable_dump_debug_ == kEnableFlag)) { | |||||
string dump_path; | |||||
if (GetContext().GetOption(OPTION_EXEC_DUMP_PATH, dump_path) == GRAPH_SUCCESS) { | |||||
if (!dump_path.empty() && dump_path[dump_path.size() - 1] != '/') { | |||||
dump_path = dump_path + "/"; | |||||
} | |||||
dump_path = dump_path + CurrentTimeInStr() + "/"; | |||||
GELOGI("Get dump path %s successfully", dump_path.c_str()); | |||||
SetDumpPath(dump_path); | |||||
} else { | |||||
GELOGW("DUMP_PATH is not set"); | |||||
} | |||||
} | |||||
if (enable_dump_ == kEnableFlag) { | |||||
string dump_step; | |||||
if (GetContext().GetOption(OPTION_EXEC_DUMP_STEP, dump_step) == GRAPH_SUCCESS) { | |||||
GELOGD("Get dump step %s successfully", dump_step.c_str()); | |||||
SetDumpStep(dump_step); | |||||
} | |||||
string dump_mode; | |||||
if (GetContext().GetOption(OPTION_EXEC_DUMP_MODE, dump_mode) == GRAPH_SUCCESS) { | |||||
GELOGD("Get dump mode %s successfully", dump_mode.c_str()); | |||||
SetDumpMode(dump_mode); | |||||
} | |||||
AddPropertyValue(DUMP_ALL_MODEL, {}); | |||||
} | |||||
SetDumpDebugOptions(); | |||||
} | |||||
// The following is the new dump scenario of the fusion operator | |||||
FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY void DumpProperties::AddPropertyValue( | |||||
const std::string &model, const std::set<std::string> &layers) { | |||||
for (const std::string &layer : layers) { | |||||
GELOGI("This model %s config to dump layer %s", model.c_str(), layer.c_str()); | |||||
} | |||||
model_dump_properties_map_[model] = layers; | |||||
} | |||||
FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY void DumpProperties::DeletePropertyValue(const std::string &model) { | |||||
auto iter = model_dump_properties_map_.find(model); | |||||
if (iter != model_dump_properties_map_.end()) { | |||||
model_dump_properties_map_.erase(iter); | |||||
} | |||||
} | |||||
FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY std::set<std::string> DumpProperties::GetAllDumpModel() const { | |||||
std::set<std::string> model_list; | |||||
for (auto &iter : model_dump_properties_map_) { | |||||
model_list.insert(iter.first); | |||||
} | |||||
return model_list; | |||||
} | |||||
FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY std::set<std::string> DumpProperties::GetPropertyValue( | |||||
const std::string &model) const { | |||||
auto iter = model_dump_properties_map_.find(model); | |||||
if (iter != model_dump_properties_map_.end()) { | |||||
return iter->second; | |||||
} | |||||
return {}; | |||||
} | |||||
FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY bool DumpProperties::IsLayerNeedDump( | |||||
const std::string &model, const std::string &om_name, const std::string &op_name) const { | |||||
// if dump all | |||||
if (model_dump_properties_map_.find(DUMP_ALL_MODEL) != model_dump_properties_map_.end()) { | |||||
return true; | |||||
} | |||||
// if this model need dump | |||||
auto om_name_iter = model_dump_properties_map_.find(om_name); | |||||
auto model_name_iter = model_dump_properties_map_.find(model); | |||||
if (om_name_iter != model_dump_properties_map_.end() || model_name_iter != model_dump_properties_map_.end()) { | |||||
// if no dump layer info, dump all layer in this model | |||||
auto model_iter = om_name_iter != model_dump_properties_map_.end() ? om_name_iter : model_name_iter; | |||||
if (model_iter->second.empty()) { | |||||
return true; | |||||
} | |||||
return model_iter->second.find(op_name) != model_iter->second.end(); | |||||
} | |||||
GELOGD("Model %s is not seated to be dump.", model.c_str()); | |||||
return false; | |||||
} | |||||
FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY void DumpProperties::SetDumpPath(const std::string &path) { | |||||
dump_path_ = path; | |||||
} | |||||
FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY std::string DumpProperties::GetDumpPath() const { return dump_path_; } | |||||
FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY void DumpProperties::SetDumpStep(const std::string &step) { | |||||
dump_step_ = step; | |||||
} | |||||
FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY std::string DumpProperties::GetDumpStep() const { return dump_step_; } | |||||
FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY void DumpProperties::SetDumpMode(const std::string &mode) { | |||||
dump_mode_ = mode; | |||||
} | |||||
FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY std::string DumpProperties::GetDumpMode() const { return dump_mode_; } | |||||
void DumpProperties::CopyFrom(const DumpProperties &other) { | |||||
if (&other != this) { | |||||
enable_dump_ = other.enable_dump_; | |||||
enable_dump_debug_ = other.enable_dump_debug_; | |||||
dump_path_ = other.dump_path_; | |||||
dump_step_ = other.dump_step_; | |||||
dump_mode_ = other.dump_mode_; | |||||
model_dump_properties_map_ = other.model_dump_properties_map_; | |||||
is_op_debug_ = other.is_op_debug_; | |||||
op_debug_mode_ = other.op_debug_mode_; | |||||
} | |||||
} | |||||
void DumpProperties::SetDumpDebugOptions() { | |||||
if (enable_dump_debug_ == kEnableFlag) { | |||||
string dump_debug_mode; | |||||
if (GetContext().GetOption(OPTION_EXEC_DUMP_DEBUG_MODE, dump_debug_mode) == GRAPH_SUCCESS) { | |||||
GELOGD("Get dump debug mode %s successfully", dump_debug_mode.c_str()); | |||||
} else { | |||||
GELOGW("Dump debug mode is not set."); | |||||
return; | |||||
} | |||||
if (dump_debug_mode == OP_DEBUG_AICORE) { | |||||
GELOGD("ge.exec.dumpDebugMode=aicore_overflow, op debug is open."); | |||||
is_op_debug_ = true; | |||||
op_debug_mode_ = kAicoreOverflow; | |||||
} else if (dump_debug_mode == OP_DEBUG_ATOMIC) { | |||||
GELOGD("ge.exec.dumpDebugMode=atomic_overflow, op debug is open."); | |||||
is_op_debug_ = true; | |||||
op_debug_mode_ = kAtomicOverflow; | |||||
} else if (dump_debug_mode == OP_DEBUG_ALL) { | |||||
GELOGD("ge.exec.dumpDebugMode=all, op debug is open."); | |||||
is_op_debug_ = true; | |||||
op_debug_mode_ = kAllOverflow; | |||||
} else { | |||||
GELOGW("ge.exec.dumpDebugMode is invalid."); | |||||
} | |||||
} else { | |||||
GELOGI("ge.exec.enableDumpDebug is false or is not set."); | |||||
} | |||||
} | |||||
PropertiesManager::PropertiesManager() : is_inited_(false), delimiter("=") {} | PropertiesManager::PropertiesManager() : is_inited_(false), delimiter("=") {} | ||||
PropertiesManager::~PropertiesManager() {} | PropertiesManager::~PropertiesManager() {} | ||||
@@ -348,22 +159,131 @@ PropertiesManager::GetPropertyMap() { | |||||
// Set separator | // Set separator | ||||
FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY void PropertiesManager::SetPropertyDelimiter(const std::string &de) { | FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY void PropertiesManager::SetPropertyDelimiter(const std::string &de) { | ||||
std::lock_guard<std::mutex> lock(mutex_); | |||||
delimiter = de; | delimiter = de; | ||||
} | } | ||||
FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY DumpProperties &PropertiesManager::GetDumpProperties( | |||||
uint64_t session_id) { | |||||
std::lock_guard<std::mutex> lock(mutex_); | |||||
// If session_id is not found in dump_properties_map_, operator[] will insert one. | |||||
return dump_properties_map_[session_id]; | |||||
// The following is the new dump scenario of the fusion operator | |||||
FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY void PropertiesManager::AddDumpPropertyValue( | |||||
const std::string &model, const std::set<std::string> &layers) { | |||||
for (const std::string &layer : layers) { | |||||
GELOGI("This model %s config to dump layer %s", model.c_str(), layer.c_str()); | |||||
} | |||||
std::lock_guard<std::mutex> lock(dump_mutex_); | |||||
model_dump_properties_map_[model] = layers; | |||||
} | } | ||||
FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY void PropertiesManager::RemoveDumpProperties(uint64_t session_id) { | |||||
std::lock_guard<std::mutex> lock(mutex_); | |||||
auto iter = dump_properties_map_.find(session_id); | |||||
if (iter != dump_properties_map_.end()) { | |||||
dump_properties_map_.erase(iter); | |||||
FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY void PropertiesManager::DeleteDumpPropertyValue( | |||||
const std::string &model) { | |||||
std::lock_guard<std::mutex> lock(dump_mutex_); | |||||
auto iter = model_dump_properties_map_.find(model); | |||||
if (iter != model_dump_properties_map_.end()) { | |||||
model_dump_properties_map_.erase(iter); | |||||
} | |||||
} | |||||
FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY void PropertiesManager::ClearDumpPropertyValue() { | |||||
std::lock_guard<std::mutex> lock(dump_mutex_); | |||||
model_dump_properties_map_.clear(); | |||||
} | |||||
FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY std::set<std::string> PropertiesManager::GetAllDumpModel() { | |||||
std::set<std::string> model_list; | |||||
std::lock_guard<std::mutex> lock(dump_mutex_); | |||||
for (auto &iter : model_dump_properties_map_) { | |||||
model_list.insert(iter.first); | |||||
} | |||||
return model_list; | |||||
} | |||||
FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY std::set<std::string> PropertiesManager::GetDumpPropertyValue( | |||||
const std::string &model) { | |||||
std::lock_guard<std::mutex> lock(dump_mutex_); | |||||
auto iter = model_dump_properties_map_.find(model); | |||||
if (iter != model_dump_properties_map_.end()) { | |||||
return iter->second; | |||||
} | |||||
return {}; | |||||
} | |||||
FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY bool PropertiesManager::IsLayerNeedDump(const std::string &model, | |||||
const std::string &om_name, | |||||
const std::string &op_name) { | |||||
std::lock_guard<std::mutex> lock(dump_mutex_); | |||||
// if dump all | |||||
if (model_dump_properties_map_.find(ge::DUMP_ALL_MODEL) != model_dump_properties_map_.end()) { | |||||
return true; | |||||
} | } | ||||
// if this model need dump | |||||
auto om_name_iter = model_dump_properties_map_.find(om_name); | |||||
auto model_name_iter = model_dump_properties_map_.find(model); | |||||
if (om_name_iter != model_dump_properties_map_.end() || model_name_iter != model_dump_properties_map_.end()) { | |||||
// if no dump layer info, dump all layer in this model | |||||
auto model_iter = om_name_iter != model_dump_properties_map_.end() ? om_name_iter : model_name_iter; | |||||
if (model_iter->second.empty()) { | |||||
return true; | |||||
} | |||||
return model_iter->second.find(op_name) != model_iter->second.end(); | |||||
} | |||||
GELOGD("Model %s is not seated to be dump.", model.c_str()); | |||||
return false; | |||||
} | |||||
FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY bool PropertiesManager::QueryModelDumpStatus( | |||||
const std::string &model) { | |||||
std::lock_guard<std::mutex> lock(dump_mutex_); | |||||
auto iter = model_dump_properties_map_.find(model); | |||||
if (iter != model_dump_properties_map_.end()) { | |||||
return true; | |||||
} else if (model_dump_properties_map_.find(ge::DUMP_ALL_MODEL) != model_dump_properties_map_.end()) { | |||||
return true; | |||||
} | |||||
return false; | |||||
} | |||||
FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY void PropertiesManager::SetDumpOutputModel( | |||||
const std::string &output_mode) { | |||||
std::lock_guard<std::mutex> lock(dump_mutex_); | |||||
this->output_mode_ = output_mode; | |||||
} | |||||
FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY std::string PropertiesManager::GetDumpOutputModel() { | |||||
std::lock_guard<std::mutex> lock(dump_mutex_); | |||||
return this->output_mode_; | |||||
} | |||||
FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY void PropertiesManager::SetDumpOutputPath( | |||||
const std::string &output_path) { | |||||
std::lock_guard<std::mutex> lock(dump_mutex_); | |||||
this->output_path_ = output_path; | |||||
} | |||||
FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY std::string PropertiesManager::GetDumpOutputPath() { | |||||
std::lock_guard<std::mutex> lock(dump_mutex_); | |||||
return this->output_path_; | |||||
} | |||||
FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY void PropertiesManager::SetDumpStep(const std::string &dump_step) { | |||||
std::lock_guard<std::mutex> lock(dump_mutex_); | |||||
this->dump_step_ = dump_step; | |||||
} | |||||
FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY std::string PropertiesManager::GetDumpStep() { | |||||
std::lock_guard<std::mutex> lock(dump_mutex_); | |||||
return this->dump_step_; | |||||
} | |||||
FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY void PropertiesManager::SetDumpMode(const std::string &dump_mode) { | |||||
std::lock_guard<std::mutex> lock(dump_mutex_); | |||||
this->dump_mode_ = dump_mode; | |||||
} | |||||
FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY std::string PropertiesManager::GetDumpMode() { | |||||
std::lock_guard<std::mutex> lock(dump_mutex_); | |||||
return this->dump_mode_; | |||||
} | } | ||||
} // namespace ge | } // namespace ge |
@@ -32,50 +32,6 @@ static const char *USE_FUSION __attribute__((unused)) = "FMK_USE_FUSION"; | |||||
static const char *TIMESTAT_ENABLE __attribute__((unused)) = "DAVINCI_TIMESTAT_ENABLE"; | static const char *TIMESTAT_ENABLE __attribute__((unused)) = "DAVINCI_TIMESTAT_ENABLE"; | ||||
static const char *ANNDROID_DEBUG __attribute__((unused)) = "ANNDROID_DEBUG"; | static const char *ANNDROID_DEBUG __attribute__((unused)) = "ANNDROID_DEBUG"; | ||||
class DumpProperties { | |||||
public: | |||||
DumpProperties() = default; | |||||
~DumpProperties() = default; | |||||
DumpProperties(const DumpProperties &dump); | |||||
DumpProperties &operator=(const DumpProperties &dump); | |||||
void InitByOptions(); | |||||
void AddPropertyValue(const std::string &model, const std::set<std::string> &layers); | |||||
void DeletePropertyValue(const std::string &model); | |||||
std::set<std::string> GetAllDumpModel() const; | |||||
std::set<std::string> GetPropertyValue(const std::string &model) const; | |||||
bool IsLayerNeedDump(const std::string &model, const std::string &om_name, const std::string &op_name) const; | |||||
void SetDumpPath(const std::string &path); | |||||
std::string GetDumpPath() const; | |||||
void SetDumpStep(const std::string &step); | |||||
std::string GetDumpStep() const; | |||||
void SetDumpMode(const std::string &mode); | |||||
std::string GetDumpMode() const; | |||||
bool IsOpDebugOpen() const { return is_op_debug_; } | |||||
uint32_t GetOpDebugMode() const { return op_debug_mode_; } | |||||
private: | |||||
void CopyFrom(const DumpProperties &other); | |||||
void SetDumpDebugOptions(); | |||||
string enable_dump_; | |||||
string enable_dump_debug_; | |||||
std::string dump_path_; | |||||
std::string dump_step_; | |||||
std::string dump_mode_; | |||||
std::map<std::string, std::set<std::string>> model_dump_properties_map_; | |||||
bool is_op_debug_ = false; | |||||
uint32_t op_debug_mode_ = 0; | |||||
}; | |||||
class PropertiesManager { | class PropertiesManager { | ||||
public: | public: | ||||
// Singleton | // Singleton | ||||
@@ -125,8 +81,21 @@ class PropertiesManager { | |||||
*/ | */ | ||||
void SetPropertyDelimiter(const std::string &de); | void SetPropertyDelimiter(const std::string &de); | ||||
DumpProperties &GetDumpProperties(uint64_t session_id); | |||||
void RemoveDumpProperties(uint64_t session_id); | |||||
void AddDumpPropertyValue(const std::string &model, const std::set<std::string> &layers); | |||||
std::set<std::string> GetAllDumpModel(); | |||||
std::set<std::string> GetDumpPropertyValue(const std::string &model); | |||||
bool IsLayerNeedDump(const std::string &model, const std::string &om_name, const std::string &op_name); | |||||
void DeleteDumpPropertyValue(const std::string &model); | |||||
void ClearDumpPropertyValue(); | |||||
bool QueryModelDumpStatus(const std::string &model); | |||||
void SetDumpOutputModel(const std::string &output_model); | |||||
std::string GetDumpOutputModel(); | |||||
void SetDumpOutputPath(const std::string &output_path); | |||||
std::string GetDumpOutputPath(); | |||||
void SetDumpStep(const std::string &dump_step); | |||||
std::string GetDumpStep(); | |||||
void SetDumpMode(const std::string &dump_mode); | |||||
std::string GetDumpMode(); | |||||
private: | private: | ||||
// Private construct, destructor | // Private construct, destructor | ||||
@@ -150,7 +119,12 @@ class PropertiesManager { | |||||
std::map<std::string, std::string> properties_map_; | std::map<std::string, std::string> properties_map_; | ||||
std::mutex mutex_; | std::mutex mutex_; | ||||
std::map<uint64_t, DumpProperties> dump_properties_map_; | |||||
std::string output_mode_; | |||||
std::string output_path_; | |||||
std::string dump_step_; | |||||
std::string dump_mode_; | |||||
std::map<std::string, std::set<std::string>> model_dump_properties_map_; // model_dump_layers_map_ | |||||
std::mutex dump_mutex_; | |||||
}; | }; | ||||
} // namespace ge | } // namespace ge | ||||
@@ -28,6 +28,7 @@ | |||||
#include "graph/op_kernel_bin.h" | #include "graph/op_kernel_bin.h" | ||||
namespace ge { | namespace ge { | ||||
using TBEKernel = ge::OpKernelBin; | using TBEKernel = ge::OpKernelBin; | ||||
using TBEKernelPtr = std::shared_ptr<ge::OpKernelBin>; | using TBEKernelPtr = std::shared_ptr<ge::OpKernelBin>; | ||||
@@ -26,11 +26,6 @@ const std::string DUMP_LAYER = "layer"; | |||||
const std::string DUMP_FILE_PATH = "path"; | const std::string DUMP_FILE_PATH = "path"; | ||||
const std::string DUMP_MODE = "dump_mode"; | const std::string DUMP_MODE = "dump_mode"; | ||||
// op debug mode | |||||
const std::string OP_DEBUG_AICORE = "aicore_overflow"; | |||||
const std::string OP_DEBUG_ATOMIC = "atomic_overflow"; | |||||
const std::string OP_DEBUG_ALL = "all"; | |||||
const int DEFAULT_FORMAT = static_cast<const int>(ge::FORMAT_NCHW); | const int DEFAULT_FORMAT = static_cast<const int>(ge::FORMAT_NCHW); | ||||
// Supported public property names | // Supported public property names | ||||
const std::string PROP_OME_START_TIME = "ome_start_time"; // start time | const std::string PROP_OME_START_TIME = "ome_start_time"; // start time | ||||
@@ -282,8 +277,8 @@ REGISTER_OPTYPE_DEFINE(GETSPAN, "GetSpan"); | |||||
REGISTER_OPTYPE_DEFINE(STOPGRADIENT, "StopGradient"); | REGISTER_OPTYPE_DEFINE(STOPGRADIENT, "StopGradient"); | ||||
REGISTER_OPTYPE_DEFINE(PREVENTGRADIENT, "PreventGradient"); | REGISTER_OPTYPE_DEFINE(PREVENTGRADIENT, "PreventGradient"); | ||||
REGISTER_OPTYPE_DEFINE(GUARANTEECONST, "GuaranteeConst"); | REGISTER_OPTYPE_DEFINE(GUARANTEECONST, "GuaranteeConst"); | ||||
REGISTER_OPTYPE_DEFINE(BROADCASTGRADIENTARGS, "BroadcastGradientArgs"); | |||||
REGISTER_OPTYPE_DEFINE(BROADCASTARGS, "BroadcastArgs"); | |||||
REGISTER_OPTYPE_DEFINE(BROADCASTGRADIENTARGS, "BroadcastGradientArgs") | |||||
REGISTER_OPTYPE_DEFINE(BROADCASTARGS, "BroadcastArgs") | |||||
REGISTER_OPTYPE_DEFINE(CONFUSIONMATRIX, "ConfusionMatrix"); | REGISTER_OPTYPE_DEFINE(CONFUSIONMATRIX, "ConfusionMatrix"); | ||||
REGISTER_OPTYPE_DEFINE(RANK, "Rank"); | REGISTER_OPTYPE_DEFINE(RANK, "Rank"); | ||||
REGISTER_OPTYPE_DEFINE(PLACEHOLDER, "PlaceHolder"); | REGISTER_OPTYPE_DEFINE(PLACEHOLDER, "PlaceHolder"); | ||||
@@ -291,7 +286,6 @@ REGISTER_OPTYPE_DEFINE(END, "End"); | |||||
REGISTER_OPTYPE_DEFINE(BASICLSTMCELL, "BasicLSTMCell"); | REGISTER_OPTYPE_DEFINE(BASICLSTMCELL, "BasicLSTMCell"); | ||||
REGISTER_OPTYPE_DEFINE(GETNEXT, "GetNext"); | REGISTER_OPTYPE_DEFINE(GETNEXT, "GetNext"); | ||||
REGISTER_OPTYPE_DEFINE(INITDATA, "InitData"); | REGISTER_OPTYPE_DEFINE(INITDATA, "InitData"); | ||||
REGISTER_OPTYPE_DEFINE(REFIDENTITY, "RefIdentity"); | |||||
/***************Ann special operator*************************/ | /***************Ann special operator*************************/ | ||||
REGISTER_OPTYPE_DEFINE(ANN_MEAN, "AnnMean"); | REGISTER_OPTYPE_DEFINE(ANN_MEAN, "AnnMean"); | ||||
@@ -485,72 +479,72 @@ const uint64_t ALLOC_MEMORY_MAX_SIZE = 536870912; // Max size of 512M. | |||||
#endif | #endif | ||||
/// | /// | ||||
/// @brief Magic number of model file | |||||
///@brief Magic number of model file | |||||
/// | /// | ||||
const uint32_t MODEL_FILE_MAGIC_NUM = 0x444F4D49; // magic number | const uint32_t MODEL_FILE_MAGIC_NUM = 0x444F4D49; // magic number | ||||
/// | /// | ||||
/// @brief Model head length | |||||
///@brief Model head length | |||||
/// | /// | ||||
const uint32_t MODEL_FILE_HEAD_LEN = 256; | const uint32_t MODEL_FILE_HEAD_LEN = 256; | ||||
/// | /// | ||||
/// @ingroup domi_omg | |||||
/// @brief Input node type | |||||
///@ingroup domi_omg | |||||
///@brief Input node type | |||||
/// | /// | ||||
const std::string INPUT_TYPE = "Input"; | const std::string INPUT_TYPE = "Input"; | ||||
/// | /// | ||||
/// @ingroup domi_omg | |||||
/// @brief AIPP label, label AIPP conv operator | |||||
///@ingroup domi_omg | |||||
///@brief AIPP label, label AIPP conv operator | |||||
/// | /// | ||||
const std::string AIPP_CONV_FLAG = "Aipp_Conv_Flag"; | const std::string AIPP_CONV_FLAG = "Aipp_Conv_Flag"; | ||||
/// | /// | ||||
/// @ingroup domi_omg | |||||
/// @brief AIPP label, label aipp data operator | |||||
///@ingroup domi_omg | |||||
///@brief AIPP label, label aipp data operator | |||||
/// | /// | ||||
const std::string AIPP_DATA_FLAG = "Aipp_Data_Flag"; | const std::string AIPP_DATA_FLAG = "Aipp_Data_Flag"; | ||||
/// | /// | ||||
/// @ingroup domi_omg | |||||
/// @brief Record the w dimension of model input corresponding to dynamic AIPP | |||||
///@ingroup domi_omg | |||||
///@brief Record the w dimension of model input corresponding to dynamic AIPP | |||||
/// | /// | ||||
const std::string AIPP_RELATED_DATA_DIM_W = "aipp_related_data_dim_w"; | const std::string AIPP_RELATED_DATA_DIM_W = "aipp_related_data_dim_w"; | ||||
/// | /// | ||||
/// @ingroup domi_omg | |||||
/// @brief Record the H dimension of model input corresponding to dynamic AIPP | |||||
///@ingroup domi_omg | |||||
///@brief Record the H dimension of model input corresponding to dynamic AIPP | |||||
/// | /// | ||||
const std::string AIPP_RELATED_DATA_DIM_H = "aipp_related_data_dim_h"; | const std::string AIPP_RELATED_DATA_DIM_H = "aipp_related_data_dim_h"; | ||||
/// | /// | ||||
/// @ingroup domi_omg | |||||
/// @brief The tag of the data operator. Mark this input to the dynamic AIPP operator | |||||
///@ingroup domi_omg | |||||
///@brief The tag of the data operator. Mark this input to the dynamic AIPP operator | |||||
/// | /// | ||||
const std::string INPUT_TO_DYNAMIC_AIPP = "input_to_dynamic_aipp"; | const std::string INPUT_TO_DYNAMIC_AIPP = "input_to_dynamic_aipp"; | ||||
/// | /// | ||||
/// @ingroup domi_omg | |||||
/// @brief DATA node type | |||||
///@ingroup domi_omg | |||||
///@brief DATA node type | |||||
/// | /// | ||||
const std::string DATA_TYPE = "Data"; | const std::string DATA_TYPE = "Data"; | ||||
/// | /// | ||||
/// @ingroup domi_omg | |||||
/// @brief DATA node type | |||||
///@ingroup domi_omg | |||||
///@brief DATA node type | |||||
/// | /// | ||||
const std::string AIPP_DATA_TYPE = "AippData"; | const std::string AIPP_DATA_TYPE = "AippData"; | ||||
/// | /// | ||||
/// @ingroup domi_omg | |||||
/// @brief Frame operator type | |||||
///@ingroup domi_omg | |||||
///@brief Frame operator type | |||||
/// | /// | ||||
const std::string FRAMEWORK_OP_TYPE = "FrameworkOp"; | const std::string FRAMEWORK_OP_TYPE = "FrameworkOp"; | ||||
/// | /// | ||||
/// @ingroup domi_omg | |||||
/// @brief Data node type | |||||
///@ingroup domi_omg | |||||
///@brief Data node type | |||||
/// | /// | ||||
const std::string ANN_DATA_TYPE = "AnnData"; | const std::string ANN_DATA_TYPE = "AnnData"; | ||||
const std::string ANN_NETOUTPUT_TYPE = "AnnNetOutput"; | const std::string ANN_NETOUTPUT_TYPE = "AnnNetOutput"; | ||||
@@ -558,139 +552,136 @@ const std::string ANN_DEPTHCONV_TYPE = "AnnDepthConv"; | |||||
const std::string ANN_CONV_TYPE = "AnnConvolution"; | const std::string ANN_CONV_TYPE = "AnnConvolution"; | ||||
const std::string ANN_FC_TYPE = "AnnFullConnection"; | const std::string ANN_FC_TYPE = "AnnFullConnection"; | ||||
/// | /// | ||||
/// @ingroup domi_omg | |||||
/// @brief Convolution node type | |||||
///@ingroup domi_omg | |||||
///@brief Convolution node type | |||||
/// | /// | ||||
const std::string NODE_NAME_NET_OUTPUT = "Node_Output"; | const std::string NODE_NAME_NET_OUTPUT = "Node_Output"; | ||||
const std::string NODE_NAME_END_GRAPH = "Node_EndGraph"; | const std::string NODE_NAME_END_GRAPH = "Node_EndGraph"; | ||||
const std::string NODE_NAME_OP_DEBUG = "Node_OpDebug"; | |||||
const std::string OP_TYPE_OP_DEBUG = "Opdebug"; | |||||
/// | /// | ||||
/// @ingroup domi_omg | |||||
/// @brief Convolution node type | |||||
///@ingroup domi_omg | |||||
///@brief Convolution node type | |||||
/// | /// | ||||
const std::string OP_TYPE_CONVOLUTION = "Convolution"; | const std::string OP_TYPE_CONVOLUTION = "Convolution"; | ||||
/// | /// | ||||
/// @ingroup domi_omg | |||||
/// @brief Add convolution node name to AIPP | |||||
///@ingroup domi_omg | |||||
///@brief Add convolution node name to AIPP | |||||
/// | /// | ||||
const std::string AIPP_CONV_OP_NAME = "aipp_conv_op"; | const std::string AIPP_CONV_OP_NAME = "aipp_conv_op"; | ||||
/// | /// | ||||
/// @ingroup domi_omg | |||||
/// @brief Operator configuration item separator | |||||
///@ingroup domi_omg | |||||
///@brief Operator configuration item separator | |||||
/// | /// | ||||
const std::string OP_CONF_DELIMITER = ":"; | const std::string OP_CONF_DELIMITER = ":"; | ||||
/// | /// | ||||
/// @ingroup domi_omg | |||||
/// @brief attr value name | |||||
///@ingroup domi_omg | |||||
///@brief attr value name | |||||
/// | /// | ||||
const std::string ATTR_NAME_VALUE1 = "value1"; | const std::string ATTR_NAME_VALUE1 = "value1"; | ||||
/// | /// | ||||
/// @ingroup domi_omg | |||||
/// @brief attr value name, 6d_2_4d C | |||||
///@ingroup domi_omg | |||||
///@brief attr value name, 6d_2_4d C | |||||
/// | /// | ||||
const std::string ATTR_NAME_INPUT_CVALUE = "input_cvalue"; | const std::string ATTR_NAME_INPUT_CVALUE = "input_cvalue"; | ||||
/// | /// | ||||
/// @ingroup domi_omg | |||||
/// @brief alpha default value | |||||
///@ingroup domi_omg | |||||
///@brief alpha default value | |||||
/// | /// | ||||
const float ALPHA_DEFAULT_VALUE = 1.0; | const float ALPHA_DEFAULT_VALUE = 1.0; | ||||
/// | /// | ||||
/// @ingroup domi_omg | |||||
/// @brief beta default value | |||||
///@ingroup domi_omg | |||||
///@brief beta default value | |||||
/// | /// | ||||
const float BETA_DEFAULT_VALUE = 0.0; | const float BETA_DEFAULT_VALUE = 0.0; | ||||
/// | /// | ||||
/// @ingroup domi_omg | |||||
/// @brief coef default value | |||||
///@ingroup domi_omg | |||||
///@brief coef default value | |||||
/// | /// | ||||
const float COEF_DEFAULT_VALUE = 0.0; | const float COEF_DEFAULT_VALUE = 0.0; | ||||
/// | /// | ||||
/// @ingroup domi_omg | |||||
/// @brief Relu6 coef value | |||||
///@ingroup domi_omg | |||||
///@brief Relu6 coef value | |||||
/// | /// | ||||
const float RELU6_COEF = 6.0; | const float RELU6_COEF = 6.0; | ||||
/// | /// | ||||
/// @ingroup domi_omg | |||||
/// @brief stride default value | |||||
///@ingroup domi_omg | |||||
///@brief stride default value | |||||
/// | /// | ||||
const uint32_t STRIDE_DEFAULT_VALUE = 1; | const uint32_t STRIDE_DEFAULT_VALUE = 1; | ||||
/// | /// | ||||
/// @ingroup domi_omg | |||||
/// @brief pad default value | |||||
///@ingroup domi_omg | |||||
///@brief pad default value | |||||
/// | /// | ||||
const uint32_t PAD_DEFAULT_VALUE = 0; | const uint32_t PAD_DEFAULT_VALUE = 0; | ||||
/// | /// | ||||
/// @ingroup domi_omg | |||||
/// @brief dilation default value | |||||
///@ingroup domi_omg | |||||
///@brief dilation default value | |||||
/// | /// | ||||
const int DILATION_DEFAULT_VALUE = 1; | const int DILATION_DEFAULT_VALUE = 1; | ||||
/// | /// | ||||
/// @ingroup domi_omg | |||||
/// @brief kernel default value | |||||
///@ingroup domi_omg | |||||
///@brief kernel default value | |||||
/// | /// | ||||
const uint32_t KERNEL_DEFAULT_VALUE = 0; | const uint32_t KERNEL_DEFAULT_VALUE = 0; | ||||
/// | /// | ||||
/// @ingroup domi_omg | |||||
/// @brief defaule convolution group size | |||||
///@ingroup domi_omg | |||||
///@brief defaule convolution group size | |||||
/// | /// | ||||
const uint32_t DEFAULT_CONV_GROUP = 1; | const uint32_t DEFAULT_CONV_GROUP = 1; | ||||
/// | /// | ||||
/// @ingroup domi_omg | |||||
/// @brief Default deconvolution adj | |||||
///@ingroup domi_omg | |||||
///@brief Default deconvolution adj | |||||
/// | /// | ||||
const uint32_t DEFAULT_DECONV_ADJ = 0; | const uint32_t DEFAULT_DECONV_ADJ = 0; | ||||
/// | /// | ||||
/// @ingroup domi_omg | |||||
/// @brief Represents value 1 | |||||
///@ingroup domi_omg | |||||
///@brief Represents value 1 | |||||
/// | /// | ||||
const uint32_t NUM_ONE = 1; | const uint32_t NUM_ONE = 1; | ||||
/// | /// | ||||
/// @ingroup domi_omg | |||||
/// @brief spatial dim size default value | |||||
///@ingroup domi_omg | |||||
///@brief spatial dim size default value | |||||
/// | /// | ||||
const int32_t SPATIAL_DIM_DEFAULT_SIZE = 2; | const int32_t SPATIAL_DIM_DEFAULT_SIZE = 2; | ||||
/// | /// | ||||
/// @ingroup domi_omg | |||||
/// @brief dim extended default value | |||||
///@ingroup domi_omg | |||||
///@brief dim extended default value | |||||
/// | /// | ||||
const int32_t DIM_DEFAULT_VALUE = 1; | const int32_t DIM_DEFAULT_VALUE = 1; | ||||
/// | /// | ||||
/// @ingroup domi_omg | |||||
/// @brief The first weight list in opdef is filter | |||||
///@ingroup domi_omg | |||||
///@brief The first weight list in opdef is filter | |||||
/// | /// | ||||
const int32_t WEIGHT_FILTER_INDEX = 0; | const int32_t WEIGHT_FILTER_INDEX = 0; | ||||
/// | /// | ||||
/// @ingroup domi_omg | |||||
/// @brief The second weight list in opdef is bias | |||||
///@ingroup domi_omg | |||||
///@brief The second weight list in opdef is bias | |||||
/// | /// | ||||
const int32_t WEIGHT_BIAS_INDEX = 1; | const int32_t WEIGHT_BIAS_INDEX = 1; | ||||
const int32_t TENSOR_ND_SUPPORT_SIZE = 8; | const int32_t TENSOR_ND_SUPPORT_SIZE = 8; | ||||
/// | /// | ||||
/// @ingroup domi_omg | |||||
/// @brief NCHW index default value | |||||
///@ingroup domi_omg | |||||
///@brief NCHW index default value | |||||
/// | /// | ||||
const uint32_t NCHW_DIM_N = 0; | const uint32_t NCHW_DIM_N = 0; | ||||
const uint32_t NCHW_DIM_C = 1; | const uint32_t NCHW_DIM_C = 1; | ||||
@@ -698,8 +689,8 @@ const uint32_t NCHW_DIM_H = 2; | |||||
const uint32_t NCHW_DIM_W = 3; | const uint32_t NCHW_DIM_W = 3; | ||||
/// | /// | ||||
/// @ingroup domi_omg | |||||
/// @brief KCHW index default value | |||||
///@ingroup domi_omg | |||||
///@brief KCHW index default value | |||||
/// | /// | ||||
const uint32_t KCHW_DIM_K = 0; | const uint32_t KCHW_DIM_K = 0; | ||||
const uint32_t KCHW_DIM_C = 1; | const uint32_t KCHW_DIM_C = 1; | ||||
@@ -707,8 +698,8 @@ const uint32_t KCHW_DIM_H = 2; | |||||
const uint32_t KCHW_DIM_W = 3; | const uint32_t KCHW_DIM_W = 3; | ||||
/// | /// | ||||
/// @ingroup domi_omg | |||||
/// @brief HWCK index default value | |||||
///@ingroup domi_omg | |||||
///@brief HWCK index default value | |||||
/// | /// | ||||
const uint32_t HWCK_DIM_H = 0; | const uint32_t HWCK_DIM_H = 0; | ||||
const uint32_t HWCK_DIM_W = 1; | const uint32_t HWCK_DIM_W = 1; | ||||
@@ -716,8 +707,8 @@ const uint32_t HWCK_DIM_C = 2; | |||||
const uint32_t HWCK_DIM_K = 3; | const uint32_t HWCK_DIM_K = 3; | ||||
/// | /// | ||||
/// @ingroup domi_omg | |||||
/// @brief NHWC index default value | |||||
///@ingroup domi_omg | |||||
///@brief NHWC index default value | |||||
/// | /// | ||||
const uint32_t NHWC_DIM_N = 0; | const uint32_t NHWC_DIM_N = 0; | ||||
const uint32_t NHWC_DIM_H = 1; | const uint32_t NHWC_DIM_H = 1; | ||||
@@ -725,8 +716,8 @@ const uint32_t NHWC_DIM_W = 2; | |||||
const uint32_t NHWC_DIM_C = 3; | const uint32_t NHWC_DIM_C = 3; | ||||
/// | /// | ||||
/// @ingroup domi_omg | |||||
/// @brief CHWN index default value | |||||
///@ingroup domi_omg | |||||
///@brief CHWN index default value | |||||
/// | /// | ||||
const uint32_t CHWN_DIM_N = 3; | const uint32_t CHWN_DIM_N = 3; | ||||
const uint32_t CHWN_DIM_C = 0; | const uint32_t CHWN_DIM_C = 0; | ||||
@@ -734,23 +725,23 @@ const uint32_t CHWN_DIM_H = 1; | |||||
const uint32_t CHWN_DIM_W = 2; | const uint32_t CHWN_DIM_W = 2; | ||||
/// | /// | ||||
/// @ingroup domi_omg | |||||
/// @brief CHW index default value | |||||
///@ingroup domi_omg | |||||
///@brief CHW index default value | |||||
/// | /// | ||||
const uint32_t CHW_DIM_C = 0; | const uint32_t CHW_DIM_C = 0; | ||||
const uint32_t CHW_DIM_H = 1; | const uint32_t CHW_DIM_H = 1; | ||||
const uint32_t CHW_DIM_W = 2; | const uint32_t CHW_DIM_W = 2; | ||||
/// | /// | ||||
/// @ingroup domi_omg | |||||
/// @brief HWC index default value | |||||
///@ingroup domi_omg | |||||
///@brief HWC index default value | |||||
/// | /// | ||||
const uint32_t HWC_DIM_H = 0; | const uint32_t HWC_DIM_H = 0; | ||||
const uint32_t HWC_DIM_W = 1; | const uint32_t HWC_DIM_W = 1; | ||||
const uint32_t HWC_DIM_C = 2; | const uint32_t HWC_DIM_C = 2; | ||||
/// | /// | ||||
/// @ingroup domi_omg | |||||
/// @brief Pad index default value | |||||
///@ingroup domi_omg | |||||
///@brief Pad index default value | |||||
/// | /// | ||||
const uint32_t PAD_H_HEAD = 0; | const uint32_t PAD_H_HEAD = 0; | ||||
const uint32_t PAD_H_TAIL = 1; | const uint32_t PAD_H_TAIL = 1; | ||||
@@ -758,35 +749,35 @@ const uint32_t PAD_W_HEAD = 2; | |||||
const uint32_t PAD_W_TAIL = 3; | const uint32_t PAD_W_TAIL = 3; | ||||
/// | /// | ||||
/// @ingroup domi_omg | |||||
/// @brief window index default value | |||||
///@ingroup domi_omg | |||||
///@brief window index default value | |||||
/// | /// | ||||
const uint32_t WINDOW_H = 0; | const uint32_t WINDOW_H = 0; | ||||
const uint32_t WINDOW_W = 1; | const uint32_t WINDOW_W = 1; | ||||
/// | /// | ||||
/// @ingroup domi_omg | |||||
/// @brief stride index default value | |||||
///@ingroup domi_omg | |||||
///@brief stride index default value | |||||
/// | /// | ||||
const uint32_t STRIDE_H = 0; | const uint32_t STRIDE_H = 0; | ||||
const uint32_t STRIDE_W = 1; | const uint32_t STRIDE_W = 1; | ||||
/// | /// | ||||
/// @ingroup domi_omg | |||||
/// @brief dilation index default value | |||||
///@ingroup domi_omg | |||||
///@brief dilation index default value | |||||
/// | /// | ||||
const uint32_t DILATION_H = 0; | const uint32_t DILATION_H = 0; | ||||
const uint32_t DILATION_W = 1; | const uint32_t DILATION_W = 1; | ||||
/// | /// | ||||
/// @ingroup domi_omg | |||||
/// @brief the num of XRBG channel | |||||
///@ingroup domi_omg | |||||
///@brief the num of XRBG channel | |||||
/// | /// | ||||
const uint32_t XRGB_CHN_NUM = 4; | const uint32_t XRGB_CHN_NUM = 4; | ||||
/// | /// | ||||
/// @ingroup domi_omg | |||||
/// @brief global pooling default value | |||||
///@ingroup domi_omg | |||||
///@brief global pooling default value | |||||
/// | /// | ||||
const bool DEFAULT_GLOBAL_POOLING = false; | const bool DEFAULT_GLOBAL_POOLING = false; | ||||
@@ -810,4 +801,4 @@ const uint32_t STREAM_SWITCH_INPUT_NUM = 2; | |||||
const std::string NODE_NAME_GLOBAL_STEP = "ge_global_step"; | const std::string NODE_NAME_GLOBAL_STEP = "ge_global_step"; | ||||
const std::string NODE_NAME_GLOBAL_STEP_ASSIGNADD = "global_step_assignadd"; | const std::string NODE_NAME_GLOBAL_STEP_ASSIGNADD = "global_step_assignadd"; | ||||
} // namespace ge | |||||
}; // namespace ge |
@@ -56,7 +56,6 @@ const int kWarningThreshold = 536870912 * 2; // 536870912 represent 512M | |||||
/// The maximum length of the file. | /// The maximum length of the file. | ||||
/// Based on the security coding specification and the current actual (protobuf) model size, it is determined as 2G-1 | /// Based on the security coding specification and the current actual (protobuf) model size, it is determined as 2G-1 | ||||
const int kMaxFileSizeLimit = INT_MAX; | const int kMaxFileSizeLimit = INT_MAX; | ||||
const char *const kPathValidReason = "The path can only contains 'a-z' 'A-Z' '0-9' '-' '.' '_' and chinese character"; | |||||
} // namespace | } // namespace | ||||
namespace ge { | namespace ge { | ||||
@@ -78,7 +77,7 @@ FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY bool ReadProtoFromBinaryFile(co | |||||
std::ifstream fs(real_path, std::ifstream::in | std::ifstream::binary); | std::ifstream fs(real_path, std::ifstream::in | std::ifstream::binary); | ||||
if (!fs.is_open()) { | if (!fs.is_open()) { | ||||
ErrorManager::GetInstance().ATCReportErrMessage("E19001", {"file", "errmsg"}, {file, "ifstream is_open failed"}); | |||||
ErrorManager::GetInstance().ATCReportErrMessage("E19004", {"realpath"}, {file}); | |||||
GELOGE(ge::FAILED, "Open real path[%s] failed.", file); | GELOGE(ge::FAILED, "Open real path[%s] failed.", file); | ||||
return false; | return false; | ||||
} | } | ||||
@@ -91,7 +90,7 @@ FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY bool ReadProtoFromBinaryFile(co | |||||
fs.close(); | fs.close(); | ||||
if (!ret) { | if (!ret) { | ||||
ErrorManager::GetInstance().ATCReportErrMessage("E19005", {"file"}, {file}); | |||||
ErrorManager::GetInstance().ATCReportErrMessage("E19005", {"filepath"}, {file}); | |||||
GELOGE(ge::FAILED, "Parse file[%s] failed.", file); | GELOGE(ge::FAILED, "Parse file[%s] failed.", file); | ||||
return ret; | return ret; | ||||
} | } | ||||
@@ -115,18 +114,17 @@ long GetFileLength(const std::string &input_file) { | |||||
GE_CHK_BOOL_TRUE_EXEC_WITH_LOG(real_path.empty(), return -1, "input_file path '%s' not valid", input_file.c_str()); | GE_CHK_BOOL_TRUE_EXEC_WITH_LOG(real_path.empty(), return -1, "input_file path '%s' not valid", input_file.c_str()); | ||||
unsigned long long file_length = 0; | unsigned long long file_length = 0; | ||||
GE_CHK_BOOL_TRUE_EXEC_WITH_LOG( | |||||
mmGetFileSize(input_file.c_str(), &file_length) != EN_OK, | |||||
ErrorManager::GetInstance().ATCReportErrMessage("E19001", {"file", "errmsg"}, {input_file, strerror(errno)}); | |||||
return -1, "Open file[%s] failed. %s", input_file.c_str(), strerror(errno)); | |||||
GE_CHK_BOOL_TRUE_EXEC_WITH_LOG(mmGetFileSize(input_file.c_str(), &file_length) != EN_OK, | |||||
ErrorManager::GetInstance().ATCReportErrMessage("E10037", {"filepath"}, {input_file}); | |||||
return -1, "Open file[%s] failed", input_file.c_str()); | |||||
GE_CHK_BOOL_TRUE_EXEC_WITH_LOG((file_length == 0), | GE_CHK_BOOL_TRUE_EXEC_WITH_LOG((file_length == 0), | ||||
ErrorManager::GetInstance().ATCReportErrMessage("E19015", {"filepath"}, {input_file}); | |||||
ErrorManager::GetInstance().ATCReportErrMessage("E10038", {"filepath"}, {input_file}); | |||||
return -1, "File[%s] size is 0, not valid.", input_file.c_str()); | return -1, "File[%s] size is 0, not valid.", input_file.c_str()); | ||||
GE_CHK_BOOL_TRUE_EXEC_WITH_LOG( | GE_CHK_BOOL_TRUE_EXEC_WITH_LOG( | ||||
file_length > kMaxFileSizeLimit, ErrorManager::GetInstance().ATCReportErrMessage( | file_length > kMaxFileSizeLimit, ErrorManager::GetInstance().ATCReportErrMessage( | ||||
"E19016", {"filepath", "filesize", "maxlen"}, | |||||
"E10039", {"filepath", "filesize", "maxlen"}, | |||||
{input_file, std::to_string(file_length), std::to_string(kMaxFileSizeLimit)}); | {input_file, std::to_string(file_length), std::to_string(kMaxFileSizeLimit)}); | ||||
return -1, "File[%s] size %lld is out of limit: %d.", input_file.c_str(), file_length, kMaxFileSizeLimit); | return -1, "File[%s] size %lld is out of limit: %d.", input_file.c_str(), file_length, kMaxFileSizeLimit); | ||||
return static_cast<long>(file_length); | return static_cast<long>(file_length); | ||||
@@ -221,7 +219,7 @@ FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY int CreateDirectory(const std:: | |||||
if (ret != 0) { | if (ret != 0) { | ||||
if (errno != EEXIST) { | if (errno != EEXIST) { | ||||
ErrorManager::GetInstance().ATCReportErrMessage("E19006", {"path"}, {directory_path}); | ErrorManager::GetInstance().ATCReportErrMessage("E19006", {"path"}, {directory_path}); | ||||
GELOGW("Can not create directory %s. Make sure the directory exists and writable.", directory_path.c_str()); | |||||
GELOGW("Cannot create directory %s. Make sure the directory exists and writable.", directory_path.c_str()); | |||||
return ret; | return ret; | ||||
} | } | ||||
} | } | ||||
@@ -232,7 +230,7 @@ FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY int CreateDirectory(const std:: | |||||
if (ret != 0) { | if (ret != 0) { | ||||
if (errno != EEXIST) { | if (errno != EEXIST) { | ||||
ErrorManager::GetInstance().ATCReportErrMessage("E19006", {"path"}, {directory_path}); | ErrorManager::GetInstance().ATCReportErrMessage("E19006", {"path"}, {directory_path}); | ||||
GELOGW("Can not create directory %s. Make sure the directory exists and writable.", directory_path.c_str()); | |||||
GELOGW("Cannot create directory %s. Make sure the directory exists and writable.", directory_path.c_str()); | |||||
return ret; | return ret; | ||||
} | } | ||||
} | } | ||||
@@ -260,16 +258,16 @@ FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY bool ReadProtoFromText(const ch | |||||
"incorrect parameter. nullptr == file || nullptr == message"); | "incorrect parameter. nullptr == file || nullptr == message"); | ||||
std::string real_path = RealPath(file); | std::string real_path = RealPath(file); | ||||
GE_CHK_BOOL_TRUE_EXEC_WITH_LOG(real_path.empty(), ErrorManager::GetInstance().ATCReportErrMessage( | |||||
"E19000", {"path", "errmsg"}, {file, strerror(errno)}); | |||||
return false, "Path[%s]'s realpath is empty, errmsg[%s]", file, strerror(errno)); | |||||
GE_CHK_BOOL_TRUE_EXEC_WITH_LOG(real_path.empty(), | |||||
ErrorManager::GetInstance().ATCReportErrMessage("E10036", {"filepath"}, {file}); | |||||
return false, "Get path[%s]'s real path failed", file); | |||||
GE_CHK_BOOL_TRUE_EXEC_WITH_LOG(GetFileLength(real_path) == -1, return false, "file size not valid."); | GE_CHK_BOOL_TRUE_EXEC_WITH_LOG(GetFileLength(real_path) == -1, return false, "file size not valid."); | ||||
std::ifstream fs(real_path.c_str(), std::ifstream::in); | std::ifstream fs(real_path.c_str(), std::ifstream::in); | ||||
if (!fs.is_open()) { | if (!fs.is_open()) { | ||||
ErrorManager::GetInstance().ATCReportErrMessage("E19017", {"realpth", "protofile"}, {real_path, file}); | |||||
ErrorManager::GetInstance().ATCReportErrMessage("E10040", {"realpth", "protofile"}, {real_path, file}); | |||||
GELOGE(ge::FAILED, "Fail to open proto file real path is '%s' when orginal file path is '%s'.", real_path.c_str(), | GELOGE(ge::FAILED, "Fail to open proto file real path is '%s' when orginal file path is '%s'.", real_path.c_str(), | ||||
file); | file); | ||||
return false; | return false; | ||||
@@ -277,7 +275,7 @@ FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY bool ReadProtoFromText(const ch | |||||
google::protobuf::io::IstreamInputStream input(&fs); | google::protobuf::io::IstreamInputStream input(&fs); | ||||
bool ret = google::protobuf::TextFormat::Parse(&input, message); | bool ret = google::protobuf::TextFormat::Parse(&input, message); | ||||
GE_IF_BOOL_EXEC(!ret, ErrorManager::GetInstance().ATCReportErrMessage("E19018", {"protofile"}, {file}); | |||||
GE_IF_BOOL_EXEC(!ret, ErrorManager::GetInstance().ATCReportErrMessage("E10041", {"protofile"}, {file}); | |||||
GELOGE(ret, | GELOGE(ret, | ||||
"Parse file[%s] through [google::protobuf::TextFormat::Parse] failed, " | "Parse file[%s] through [google::protobuf::TextFormat::Parse] failed, " | ||||
"please check whether the file is a valid protobuf format file.", | "please check whether the file is a valid protobuf format file.", | ||||
@@ -362,14 +360,14 @@ FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY bool CheckInputPathValid(const | |||||
// The specified path is empty | // The specified path is empty | ||||
std::map<std::string, std::string> args_map; | std::map<std::string, std::string> args_map; | ||||
if (file_path.empty()) { | if (file_path.empty()) { | ||||
ErrorManager::GetInstance().ATCReportErrMessage("E10004", {"parameter"}, {atc_param}); | |||||
ErrorManager::GetInstance().ATCReportErrMessage("E10000", {"parameter"}, {atc_param}); | |||||
GELOGW("Input parameter's value is empty."); | GELOGW("Input parameter's value is empty."); | ||||
return false; | return false; | ||||
} | } | ||||
std::string real_path = RealPath(file_path.c_str()); | std::string real_path = RealPath(file_path.c_str()); | ||||
// Unable to get absolute path (does not exist or does not have permission to access) | // Unable to get absolute path (does not exist or does not have permission to access) | ||||
if (real_path.empty()) { | if (real_path.empty()) { | ||||
ErrorManager::GetInstance().ATCReportErrMessage("E19000", {"path", "errmsg"}, {file_path, strerror(errno)}); | |||||
ErrorManager::GetInstance().ATCReportErrMessage("E10002", {"path", "errmsg"}, {file_path.c_str(), strerror(errno)}); | |||||
GELOGW("Path[%s]'s realpath is empty, errmsg[%s]", file_path.c_str(), strerror(errno)); | GELOGW("Path[%s]'s realpath is empty, errmsg[%s]", file_path.c_str(), strerror(errno)); | ||||
return false; | return false; | ||||
} | } | ||||
@@ -382,14 +380,16 @@ FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY bool CheckInputPathValid(const | |||||
GE_CHK_BOOL_TRUE_EXEC_WITH_LOG( | GE_CHK_BOOL_TRUE_EXEC_WITH_LOG( | ||||
!ValidateStr(real_path, mode), | !ValidateStr(real_path, mode), | ||||
ErrorManager::GetInstance().ATCReportErrMessage("E10001", {"parameter", "value", "reason"}, | |||||
{atc_param, real_path, kPathValidReason}); | |||||
return false, "Invalid value for %s[%s], %s.", atc_param.c_str(), real_path.c_str(), kPathValidReason); | |||||
ErrorManager::GetInstance().ATCReportErrMessage("E10001", {"parameter", "path"}, {atc_param, real_path}); | |||||
return false, | |||||
"Input parameter[--%s]'s value[%s] is illegal. The path can only contains 'a-z' 'A-Z' '0-9' '-' '.' '_' " | |||||
"and chinese character.", | |||||
atc_param.c_str(), real_path.c_str()); | |||||
// The absolute path points to a file that is not readable | // The absolute path points to a file that is not readable | ||||
if (access(real_path.c_str(), R_OK) != 0) { | if (access(real_path.c_str(), R_OK) != 0) { | ||||
ErrorManager::GetInstance().ATCReportErrMessage("E19003", {"file", "errmsg"}, {file_path.c_str(), strerror(errno)}); | |||||
GELOGW("Read file[%s] failed, errmsg[%s]", file_path.c_str(), strerror(errno)); | |||||
ErrorManager::GetInstance().ATCReportErrMessage("E10003", {"path", "errmsg"}, {file_path.c_str(), strerror(errno)}); | |||||
GELOGW("Read path[%s] failed, errmsg[%s]", file_path.c_str(), strerror(errno)); | |||||
return false; | return false; | ||||
} | } | ||||
@@ -400,7 +400,7 @@ FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY bool CheckOutputPathValid(const | |||||
const std::string &atc_param) { | const std::string &atc_param) { | ||||
// The specified path is empty | // The specified path is empty | ||||
if (file_path.empty()) { | if (file_path.empty()) { | ||||
ErrorManager::GetInstance().ATCReportErrMessage("E10004", {"parameter"}, {atc_param}); | |||||
ErrorManager::GetInstance().ATCReportErrMessage("E10000", {"parameter"}, {atc_param}); | |||||
GELOGW("Input parameter's value is empty."); | GELOGW("Input parameter's value is empty."); | ||||
return false; | return false; | ||||
} | } | ||||
@@ -416,14 +416,18 @@ FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY bool CheckOutputPathValid(const | |||||
GE_CHK_BOOL_TRUE_EXEC_WITH_LOG( | GE_CHK_BOOL_TRUE_EXEC_WITH_LOG( | ||||
!ValidateStr(real_path, mode), | !ValidateStr(real_path, mode), | ||||
ErrorManager::GetInstance().ATCReportErrMessage("E10001", {"parameter", "value", "reason"}, | |||||
{atc_param, real_path, kPathValidReason}); | |||||
return false, "Invalid value for %s[%s], %s.", atc_param.c_str(), real_path.c_str(), kPathValidReason); | |||||
ErrorManager::GetInstance().ATCReportErrMessage("E10001", {"parameter", "path"}, {atc_param, real_path}); | |||||
return false, | |||||
"Input parameter[--%s]'s value[%s] is illegal. The path can only contains 'a-z' 'A-Z' '0-9' '-' '.' '_' " | |||||
"and chinese character.", | |||||
atc_param.c_str(), real_path.c_str()); | |||||
// File is not readable or writable | // File is not readable or writable | ||||
if (access(real_path.c_str(), W_OK | F_OK) != 0) { | if (access(real_path.c_str(), W_OK | F_OK) != 0) { | ||||
ErrorManager::GetInstance().ATCReportErrMessage("E19004", {"file", "errmsg"}, {real_path, strerror(errno)}); | |||||
GELOGW("Write file[%s] failed, errmsg[%s]", real_path.c_str(), strerror(errno)); | |||||
ErrorManager::GetInstance().ATCReportErrMessage("E10004", {"realpath", "path", "errmsg"}, | |||||
{real_path, file_path, strerror(errno)}); | |||||
GELOGW("Write file[%s] failed, input path is %s, errmsg[%s]", real_path.c_str(), file_path.c_str(), | |||||
strerror(errno)); | |||||
return false; | return false; | ||||
} | } | ||||
} else { | } else { | ||||
@@ -441,8 +445,8 @@ FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY bool CheckOutputPathValid(const | |||||
std::string prefix_path = std::string(file_path).substr(0, static_cast<size_t>(path_split_pos)); | std::string prefix_path = std::string(file_path).substr(0, static_cast<size_t>(path_split_pos)); | ||||
// Determine whether the specified path is valid by creating the path | // Determine whether the specified path is valid by creating the path | ||||
if (CreateDirectory(prefix_path) != 0) { | if (CreateDirectory(prefix_path) != 0) { | ||||
ErrorManager::GetInstance().ATCReportErrMessage("E19006", {"path"}, {file_path}); | |||||
GELOGW("Can not create directory[%s].", file_path.c_str()); | |||||
ErrorManager::GetInstance().ATCReportErrMessage("E10005", {"path"}, {file_path}); | |||||
GELOGW("Can not create prefix path for path[%s].", file_path.c_str()); | |||||
return false; | return false; | ||||
} | } | ||||
} | } | ||||