Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -202,7 +202,7 @@ Status BaseOpBuilder::ProcessInt64Tensors(QnnModelWrapper& qnn_model_wrapper,
// Insert cast to int32 if input dtype is int64
if (input_tensorwrapper.GetTensorDataType() == QNN_DATATYPE_INT_64) {
const Qnn_TensorType_t tensor_type = QNN_TENSOR_TYPE_NATIVE;
const std::string cast_output_name = input_names[i] + "_cast_int32";
const std::string cast_output_name = utils::GetUniqueName(input_names[i], "_cast_int32");
if (!qnn_model_wrapper.IsQnnTensorWrapperExist(cast_output_name)) {
Qnn_DataType_t qnn_data_type = QNN_DATATYPE_INT_32;
const auto& input_i = node_unit.Inputs()[i];
Expand Down Expand Up @@ -295,8 +295,8 @@ Status BaseOpBuilder::ProcessOutputs(QnnModelWrapper& qnn_model_wrapper,
}

if (needs_int64_cast) {
std::string cast_node_name = output_name + "_cast_int64";
std::string cast_input_name = output_name + "_cast_int64_aux";
const std::string cast_node_name = utils::GetUniqueName(node_unit, "_cast_int64");
const std::string cast_input_name = utils::GetUniqueName(output_name, "_cast_int64");
QnnQuantParamsWrapper quant_params = output_info.quant_param.Copy();
std::vector<uint32_t> cast_output_shape = output_info.shape;

Expand All @@ -309,10 +309,10 @@ Status BaseOpBuilder::ProcessOutputs(QnnModelWrapper& qnn_model_wrapper,
ORT_RETURN_IF_NOT(qnn_model_wrapper.AddTensorWrapper(std::move(cast_input_tensorwrapper)), "Failed to add tensor.");
output_names.push_back(cast_input_name);
// Store the cast node information for later addition
cast_node_info_vec.push_back({cast_node_name, cast_input_name, output_name});
cast_node_info_vec.emplace_back(CastNodeInfo{cast_node_name, cast_input_name, output_name});
} else if (supported_qnn_data_type != output_info.qnn_data_type && is_graph_output && !do_op_validation) {
std::string cast_node_name = output_name + "_ort_qnn_ep_cast";
std::string cast_input_name = output_name + "_ort_qnn_ep_aux";
const std::string cast_node_name = utils::GetUniqueName(node_unit, "_cast");
const std::string cast_input_name = utils::GetUniqueName(output_name, "_cast");
std::vector<uint32_t> cast_output_shape = output_info.shape;
QnnTensorWrapper cast_input_tensorwrapper(cast_input_name,
QNN_TENSOR_TYPE_NATIVE,
Expand All @@ -322,7 +322,7 @@ Status BaseOpBuilder::ProcessOutputs(QnnModelWrapper& qnn_model_wrapper,
mem_type);
ORT_RETURN_IF_NOT(qnn_model_wrapper.AddTensorWrapper(std::move(cast_input_tensorwrapper)), "Failed to add tensor.");
output_names.push_back(cast_input_name);
cast_node_info_vec.push_back({cast_node_name, cast_input_name, output_name});
cast_node_info_vec.emplace_back(CastNodeInfo{cast_node_name, cast_input_name, output_name});
} else {
output_info.qnn_data_type = supported_qnn_data_type;
output_names.push_back(output_name);
Expand All @@ -336,9 +336,9 @@ Status BaseOpBuilder::ProcessOutputs(QnnModelWrapper& qnn_model_wrapper,
ORT_RETURN_IF_NOT(qnn_model_wrapper.AddTensorWrapper(std::move(output_tensorwrapper)), "Failed to add tensor.");
}

ORT_RETURN_IF_NOT(qnn_model_wrapper.CreateQnnNode(utils::GetNodeName(node_unit),
ORT_RETURN_IF_NOT(qnn_model_wrapper.CreateQnnNode(utils::GetUniqueName(node_unit),
QNN_OP_PACKAGE_NAME_QTI_AISW,
qnn_op_type, // Typically GetQnnOpType(), but can be overridden.
qnn_op_type,
std::move(input_names),
std::move(output_names),
std::move(param_tensor_names),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ Status CastOpBuilder::ProcessExtraInputForNotEqual(QnnModelWrapper& qnn_model_wr
}

// Build additional static input with value 0.
const std::string& input_name = utils::GetNodeName(node_unit) + "_notequal_zero";
const std::string& input_name = utils::GetUniqueName(node_unit, "_notequal_zero");

Qnn_DataType_t qnn_data_type = QNN_DATATYPE_UNDEFINED;
const auto* type_proto = input.node_arg.TypeAsProto();
Expand All @@ -84,7 +84,7 @@ Status CastOpBuilder::ProcessExtraInputForNotEqual(QnnModelWrapper& qnn_model_wr
"Failed to add additional input tensor for QNN Cast node that will be replaced by NotEqual.");
input_names.push_back(input_name);

LOGS(logger, VERBOSE) << "FP-to-Bool Cast node " << utils::GetNodeName(node_unit) << " is replaced by NotEqual.";
LOGS(logger, VERBOSE) << "FP-to-Bool Cast node " << node_unit.Name() << " is replaced by NotEqual.";
return Status::OK();
}

Expand Down Expand Up @@ -177,7 +177,7 @@ Status CastOpBuilder::ProcessAttributesAndOutputs(QnnModelWrapper& qnn_model_wra
const std::string qnn_op_type = IsFpToBoolCast(node_unit)
? QNN_OP_ELEMENT_WISE_NOT_EQUAL
: GetQnnOpType(node_unit.OpType());
ORT_RETURN_IF_NOT(qnn_model_wrapper.CreateQnnNode(utils::GetNodeName(node_unit),
ORT_RETURN_IF_NOT(qnn_model_wrapper.CreateQnnNode(utils::GetUniqueName(node_unit),
QNN_OP_PACKAGE_NAME_QTI_AISW,
qnn_op_type,
std::move(input_names),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -199,7 +199,7 @@ Status ConvOpBuilder::ProcessConv2D3DInputs(QnnModelWrapper& qnn_model_wrapper,
TensorInfo input_info = {};
ORT_RETURN_IF_ERROR(qnn_model_wrapper.GetTensorInfo(inputs[1], input_info));

std::string actual_name = input_info.is_initializer ? input1_name : input1_name + "_ort_qnn_ep_transpose";
std::string actual_name = input_info.is_initializer ? input1_name : utils::GetUniqueName(input1_name, "_transpose");
input_names.push_back(actual_name);

std::vector<uint32_t> actual_shape;
Expand Down Expand Up @@ -309,8 +309,7 @@ Status ConvOpBuilder::ProcessConv2D3DInputs(QnnModelWrapper& qnn_model_wrapper,

// Pop Conv weight. Insert Convert op after Weight
input_names.pop_back();
const std::string& conv_output_name = node_unit.Outputs()[0].node_arg.Name();
std::string convert_output_name = weight_input_name + "_convert_" + conv_output_name;
std::string convert_output_name = utils::GetUniqueName(weight_input_name, "_convert");

ORT_RETURN_IF_ERROR(utils::InsertConvertOp(qnn_model_wrapper,
weight_input_name,
Expand Down Expand Up @@ -345,7 +344,7 @@ Status ConvOpBuilder::ProcessConv2D3DInputs(QnnModelWrapper& qnn_model_wrapper,
ORT_RETURN_IF_ERROR(qnn_model_wrapper.GetTensorInfo(inputs[1], input1_info));

if (input0_info.quant_param.IsPerTensor(/*include_bw*/ true) && input1_info.quant_param.IsQuantized()) {
const std::string bias_name = qnn::utils::GetNodeName(node_unit) + "_implicit_bias_ort_qnn_ep";
const std::string bias_name = qnn::utils::GetUniqueName(node_unit, "_implicit_bias");
std::vector<uint32_t> bias_shape = {input1_info.shape[0]};
ORT_RETURN_IF_ERROR(AddZeroBiasInput(qnn_model_wrapper, input0_info.quant_param, input1_info.quant_param,
std::move(bias_shape), bias_name, logger, input_names));
Expand Down Expand Up @@ -378,7 +377,7 @@ Status ConvOpBuilder::ProcessConv1DInputs(QnnModelWrapper& qnn_model_wrapper,
ORT_RETURN_IF_ERROR(qnn_model_wrapper.GetTensorInfo(inputs[0], input0_info));

const std::string conv_input0_name = input0_info.is_initializer ? input0_name
: input0_name + "_ort_qnn_ep_reshape";
: utils::GetUniqueName(input0_name, "_reshape");
input_names.push_back(conv_input0_name);

if (!qnn_model_wrapper.IsQnnTensorWrapperExist(conv_input0_name)) {
Expand Down Expand Up @@ -435,7 +434,7 @@ Status ConvOpBuilder::ProcessConv1DInputs(QnnModelWrapper& qnn_model_wrapper,
TensorInfo input_info = {};
ORT_RETURN_IF_ERROR(qnn_model_wrapper.GetTensorInfo(inputs[1], input_info));

std::string conv_weight_input_name = input_info.is_initializer ? input1_name : input1_name + "_ort_qnn_ep_transpose";
std::string conv_weight_input_name = input_info.is_initializer ? input1_name : utils::GetUniqueName(input1_name, "_transpose");
input_names.push_back(conv_weight_input_name);

// Create the shape after reshaping.
Expand All @@ -460,7 +459,7 @@ Status ConvOpBuilder::ProcessConv1DInputs(QnnModelWrapper& qnn_model_wrapper,
return ORT_MAKE_STATUS(ONNXRUNTIME, FAIL, "QNN EP: Unexpected convolution op type: ", node_unit.OpType().c_str());
}

const std::string reshape_output = input1_name + "_ort_qnn_ep_reshape";
const std::string reshape_output = utils::GetUniqueName(input1_name, "_reshape");
std::vector<uint8_t> unpacked_tensor;
if (input_info.is_initializer) {
//
Expand Down Expand Up @@ -770,11 +769,11 @@ Status ConvOpBuilder::ProcessAttributesAndOutputs(QnnModelWrapper& qnn_model_wra
output_shape[1], // W
output_shape[2], // C
};
const std::string conv_output_name = output_name + "_ort_qnn_ep_conv2d";
const std::string conv_output_name = utils::GetUniqueName(output_name, "_conv");
QnnTensorWrapper output_tensorwrapper(conv_output_name, QNN_TENSOR_TYPE_NATIVE, qnn_data_type,
output_quantize_param.Copy(), std::vector<uint32_t>(output_shape_2d));
ORT_RETURN_IF_NOT(qnn_model_wrapper.AddTensorWrapper(std::move(output_tensorwrapper)), "Failed to add tensor.");
ORT_RETURN_IF_NOT(qnn_model_wrapper.CreateQnnNode(utils::GetNodeName(node_unit),
ORT_RETURN_IF_NOT(qnn_model_wrapper.CreateQnnNode(utils::GetUniqueName(node_unit),
QNN_OP_PACKAGE_NAME_QTI_AISW,
output_node_type,
std::move(input_names),
Expand All @@ -799,7 +798,7 @@ Status ConvOpBuilder::ProcessAttributesAndOutputs(QnnModelWrapper& qnn_model_wra
QnnTensorWrapper output_tensorwrapper(output_name, tensor_type, qnn_data_type,
std::move(output_quantize_param), std::move(output_shape));
ORT_RETURN_IF_NOT(qnn_model_wrapper.AddTensorWrapper(std::move(output_tensorwrapper)), "Failed to add tensor.");
ORT_RETURN_IF_NOT(qnn_model_wrapper.CreateQnnNode(utils::GetNodeName(node_unit),
ORT_RETURN_IF_NOT(qnn_model_wrapper.CreateQnnNode(utils::GetUniqueName(node_unit),
QNN_OP_PACKAGE_NAME_QTI_AISW,
output_node_type,
std::move(input_names),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -287,8 +287,8 @@ Status CreateMatMulTransposeAll(
std::vector<uint32_t> input_shape1(input_info1.shape);
std::swap(input_shape0[1], input_shape0[2]);
std::swap(input_shape1[1], input_shape1[2]);
const std::string input_transpos0 = input_names[0] + "_t0";
const std::string input_transpos1 = input_names[1] + "_t1";
const std::string input_transpos0 = onnxruntime::qnn::utils::GetUniqueName(input_names[0], "_transpose");
const std::string input_transpos1 = onnxruntime::qnn::utils::GetUniqueName(input_names[1], "_transpose");
const std::vector<uint32_t> transpose_perm{0, 2, 1, 3};
ORT_RETURN_IF_ERROR(qnn_model_wrapper->AddTransposeNode(
/*node_index=*/node_unit.Index(),
Expand All @@ -315,7 +315,7 @@ Status CreateMatMulTransposeAll(
onnxruntime::qnn::TensorInfo matmul_output_info{};
const auto& output = node_unit.Outputs()[0];
ORT_RETURN_IF_ERROR(qnn_model_wrapper->GetTensorInfo(output, matmul_output_info));
const std::string matmul_output_name = onnxruntime::qnn::utils::GetNodeName(node_unit) + "_matmul";
const std::string matmul_output_name = onnxruntime::qnn::utils::GetUniqueName(node_unit, "_matmul");
std::vector<uint32_t> matmul_output_shape(matmul_output_info.shape);
std::swap(matmul_output_shape[1], matmul_output_shape[2]);
onnxruntime::qnn::QnnTensorWrapper matmul_output_wrapper(
Expand All @@ -325,7 +325,7 @@ Status CreateMatMulTransposeAll(
node_unit.OpType() + " failed to add tensor.");
std::vector<std::string> param_tensor_names = SetMatMulParamTensorNames(
qnn_model_wrapper, node_unit, /*transpose_in0=*/false, /*transpose_in1=*/false);
ORT_RETURN_IF_NOT(qnn_model_wrapper->CreateQnnNode(/*qnn_node_name=*/onnxruntime::qnn::utils::GetNodeName(node_unit),
ORT_RETURN_IF_NOT(qnn_model_wrapper->CreateQnnNode(/*qnn_node_name=*/onnxruntime::qnn::utils::GetUniqueName(node_unit, QNN_OP_MAT_MUL),
/*package_name=*/QNN_OP_PACKAGE_NAME_QTI_AISW,
/*qnn_node_type=*/QNN_OP_MAT_MUL,
/*input_names=*/{input_transpos1, input_transpos0},
Expand Down Expand Up @@ -373,7 +373,7 @@ Status CreateReduceSumMulBroadcastX(
ORT_RETURN_IF_NOT(shape_in0.size() == 4, "CreateReduceSumMulBroadcastX expects input 0 to be rank 4");
ORT_RETURN_IF_NOT(shape_in1.size() == 3, "CreateReduceSumMulBroadcastX expects input 1 to be rank 3");
const std::vector<uint32_t> new_shape_in0{shape_in0[0], shape_in0[1], shape_in0[2], 1, shape_in0[3]};
const std::string reshape_out_name = input_names[0] + "_reshaped";
const std::string reshape_out_name = onnxruntime::qnn::utils::GetUniqueName(input_names[0], "_reshape");
ORT_RETURN_IF_ERROR(qnn_model_wrapper->AddReshapeNode(
/*input_name=*/input_names[0],
/*output_name=*/reshape_out_name,
Expand All @@ -387,7 +387,7 @@ Status CreateReduceSumMulBroadcastX(
// Multiply: reshaped in0 * in1
// The output shape of the multiplication is determined by broadcasting the reshaped in0 of
// (b, h, w, 1, c) and in1 (w, k, c) along the matching axes, resulting in (b, h, w, k, c).
const std::string mul_out_name = onnxruntime::qnn::utils::GetNodeName(node_unit) + "_mul";
const std::string mul_out_name = onnxruntime::qnn::utils::GetUniqueName(node_unit, "_mul");
std::vector<uint32_t> shape_out_mul{new_shape_in0[0], new_shape_in0[1], new_shape_in0[2], shape_in1[1], new_shape_in0[4]};
onnxruntime::qnn::QnnTensorWrapper tensor_wrapper_mul(mul_out_name,
QNN_TENSOR_TYPE_NATIVE,
Expand All @@ -397,7 +397,7 @@ Status CreateReduceSumMulBroadcastX(
ORT_RETURN_IF_NOT(qnn_model_wrapper->AddTensorWrapper(std::move(tensor_wrapper_mul)),
"CreateReduceSumMulBroadcastX: failed to AddTensorWrapper");
ORT_RETURN_IF_NOT(qnn_model_wrapper->CreateQnnNode(
/*qnn_node_name=*/mul_out_name,
/*qnn_node_name=*/onnxruntime::qnn::utils::GetUniqueName(node_unit, QNN_OP_ELEMENT_WISE_MULTIPLY),
/*package_name=*/QNN_OP_PACKAGE_NAME_QTI_AISW,
/*qnn_node_type=*/QNN_OP_ELEMENT_WISE_MULTIPLY,
/*input_names=*/{reshape_out_name, input_names[1]},
Expand Down Expand Up @@ -444,7 +444,7 @@ Status CreateReduceSumMulBroadcastX(
"CreateReduceSumMulBroadcastX: failed to AddTensorWrapper");

ORT_RETURN_IF_NOT(qnn_model_wrapper->CreateQnnNode(
/*qnn_node_name=*/out_name,
/*qnn_node_name=*/onnxruntime::qnn::utils::GetUniqueName(node_unit, QNN_OP_REDUCE_SUM),
/*package_name=*/QNN_OP_PACKAGE_NAME_QTI_AISW,
/*qnn_node_type=*/QNN_OP_REDUCE_SUM,
/*input_names=*/{mul_out_name},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -138,7 +138,7 @@ Status ExpandOpBuilder::ProcessInputs(QnnModelWrapper& qnn_model_wrapper,
} // if-else

const std::string& output_name = node_unit.Outputs()[0].node_arg.Name();
std::string shape_input_name(input_name + "_" + output_name);
std::string shape_input_name = utils::GetUniqueName(input_name, output_name);
QnnTensorWrapper input_tensorwrapper(shape_input_name, QNN_TENSOR_TYPE_STATIC, qnn_data_type,
std::move(quantize_param), std::move(input_shape),
std::move(shape_data));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -144,7 +144,7 @@ Status GatherNDOpBuilder::ProcessInputs(QnnModelWrapper& qnn_model_wrapper,
std::move(cast_output_shape));
ORT_RETURN_IF_NOT(qnn_model_wrapper.AddTensorWrapper(std::move(indices_cast_tensor)),
"Failed to add gather indices cast tensor.");
ORT_RETURN_IF_NOT(qnn_model_wrapper.CreateQnnNode(indices_casted_name,
ORT_RETURN_IF_NOT(qnn_model_wrapper.CreateQnnNode(utils::GetUniqueName(indices_tensor_name, QNN_OP_CAST),
QNN_OP_PACKAGE_NAME_QTI_AISW,
QNN_OP_CAST,
{indices_tensor_name},
Expand Down Expand Up @@ -254,8 +254,8 @@ Status GatherNDOpBuilder::ProcessAttributesAndOutputs(QnnModelWrapper& qnn_model

// If a cast to int64 is needed, add the cast node
if (needs_int64_cast) {
std::string cast_node_name = output_name + "_cast_int64";
std::string cast_input_name = output_name + "_cast_int64_aux";
std::string cast_node_name = utils::GetUniqueName(node_unit, "_cast_int64");
std::string cast_input_name = utils::GetUniqueName(output_name, "_cast_int64");
std::string cast_output_name = output_name;

// Create the cast input tensor wrapper - use qnn_output_shape for the intermediate tensor
Expand All @@ -275,9 +275,9 @@ Status GatherNDOpBuilder::ProcessAttributesAndOutputs(QnnModelWrapper& qnn_model

std::string gather_output_name = output_name;
if (reshape_required) {
gather_output_name += "_ort_qnn_ep_reshape";
gather_output_name = utils::GetUniqueName(output_name, "_reshape");
} else if (needs_int64_cast) {
gather_output_name += "_cast_int64_aux";
gather_output_name = utils::GetUniqueName(output_name, "_cast_int64");
}

Qnn_TensorType_t tensor_type = (!reshape_required && is_graph_output)
Expand All @@ -289,7 +289,7 @@ Status GatherNDOpBuilder::ProcessAttributesAndOutputs(QnnModelWrapper& qnn_model
ORT_RETURN_IF_NOT(qnn_model_wrapper.AddTensorWrapper(std::move(gather_output_tensor)),
"Failed to add GatherND output tensor.");

ORT_RETURN_IF_NOT(qnn_model_wrapper.CreateQnnNode(utils::GetNodeName(node_unit),
ORT_RETURN_IF_NOT(qnn_model_wrapper.CreateQnnNode(utils::GetUniqueName(node_unit),
QNN_OP_PACKAGE_NAME_QTI_AISW,
QNN_OP_GATHER_ND,
std::move(input_names),
Expand All @@ -307,10 +307,10 @@ Status GatherNDOpBuilder::ProcessAttributesAndOutputs(QnnModelWrapper& qnn_model
std::string node_output_name = output_name;
if (needs_int64_cast) {
// If needs_int64 is true, the output name should be the input name of the cast node
node_output_name = output_name + "_cast_int64_aux";
node_output_name = utils::GetUniqueName(output_name, "_cast_int64");
}

ORT_RETURN_IF_NOT(qnn_model_wrapper.CreateQnnNode(output_name,
ORT_RETURN_IF_NOT(qnn_model_wrapper.CreateQnnNode(utils::GetUniqueName(node_unit, QNN_OP_RESHAPE),
QNN_OP_PACKAGE_NAME_QTI_AISW,
QNN_OP_RESHAPE,
{gather_output_name},
Expand Down Expand Up @@ -341,4 +341,4 @@ void CreateGatherNDOpBuilder(const std::string& op_type, OpBuilderRegistrations&
}

} // namespace qnn
} // namespace onnxruntime
} // namespace onnxruntime
Loading
Loading