mirror of
https://github.com/saymrwulf/onnxruntime.git
synced 2026-07-24 19:43:35 +00:00
This addresses a DML performance regression introduced by the constant sharing pass. The constant sharing pass identifies small initializer tensors which contain identical values and merges them. This could have the effect of causing DML to treat those tensors as non-constant and skip certain optimization. To prevent this, there is now an element count threshold below which the DML EP will enable this optimization, even though it results in duplicate work uploading and pre-processing the common tensor at multiple operators.
40 lines
1.4 KiB
Objective-C
40 lines
1.4 KiB
Objective-C
// Copyright (c) Microsoft Corporation. All rights reserved.
|
|
// Licensed under the MIT License.
|
|
|
|
#pragma once
|
|
|
|
#include <string>
|
|
|
|
#include "core/optimizer/graph_transformer.h"
|
|
#include "core/optimizer/initializer.h"
|
|
|
|
namespace onnxruntime {
|
|
|
|
/**
|
|
@class ConstantSharing
|
|
|
|
Transformer that traverses the graph top-down and performs constant sharing, i.e.,
|
|
constant initializers having same dtype, value and shape, will be replaced by one single (newly created) initializer.
|
|
Currently, only scalar valued initializers are handled.
|
|
*/
|
|
class ConstantSharing : public GraphTransformer {
|
|
public:
|
|
/**
|
|
* @param compatible_execution_providers comptatible execution provider list for considered nodes.
|
|
* @param excluded_initializers explicitly excluded initializer names that should not changed.
|
|
*/
|
|
ConstantSharing(const InlinedHashSet<std::string_view>& compatible_execution_providers = {},
|
|
const InlinedHashSet<std::string>& excluded_initializers = {}) noexcept
|
|
: GraphTransformer("ConstantSharing", compatible_execution_providers),
|
|
excluded_initializers_(excluded_initializers) {
|
|
}
|
|
|
|
static constexpr int64_t TENSOR_ELEM_COUNT_THRESHOLD = 8;
|
|
|
|
private:
|
|
Status ApplyImpl(Graph& graph, bool& modified, int graph_level, const logging::Logger& logger) const override;
|
|
|
|
const InlinedHashSet<std::string> excluded_initializers_;
|
|
};
|
|
|
|
} // namespace onnxruntime
|