From 17e9ea62352b71e3d432a66b70e666ade128cac6 Mon Sep 17 00:00:00 2001 From: Wanming Lin Date: Tue, 23 Jul 2024 02:56:09 +0800 Subject: [PATCH] [WebNN EP] Add outputDataType option for the ArgMax/ArgMin ops (#21385) ### Description WebNN spec introduces a new option: `outputDataType` to `argMax` and `argMin` ops, it's default value is `int32`, we should explicitly set it to `int64` for WebNN EP. Spec CR: "Add outputDataType to argmin/argmax" https://github.com/webmachinelearning/webnn/pull/730 --- .../providers/webnn/builders/impl/argmax_min_op_builder.cc | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/onnxruntime/core/providers/webnn/builders/impl/argmax_min_op_builder.cc b/onnxruntime/core/providers/webnn/builders/impl/argmax_min_op_builder.cc index f8b77b6350a76..1330a3e354871 100644 --- a/onnxruntime/core/providers/webnn/builders/impl/argmax_min_op_builder.cc +++ b/onnxruntime/core/providers/webnn/builders/impl/argmax_min_op_builder.cc @@ -50,6 +50,11 @@ Status ArgMaxMinOpBuilder::AddToModelBuilderImpl(ModelBuilder& model_builder, options.set("axes", axes); options.set("keepDimensions", keep_dims == 1); options.set("selectLastIndex", select_last_index == 1); + // TODO: use WebNN's opSupportLimits API to check the backend's supported output data types. + // If the backend doesn't support int64 output, we should use default int32 output data type + // then do a type casting (int32 -> int64) for the output. Refer to the CoreML EP for how to + // support int64 output. + options.set("outputDataType", "int64"); emscripten::val output = emscripten::val::object(); const auto& op_type = node.OpType();