mirror of
https://github.com/saymrwulf/onnxruntime.git
synced 2026-07-30 20:18:08 +00:00
Downgrade compiler to CentOS 4.8.5 (#1985)
Make onnxruntime CPU build and run on CentOS GCC 4.8.5
This commit is contained in:
parent
931975e3fe
commit
627f853a44
41 changed files with 327 additions and 177 deletions
|
|
@ -12,7 +12,10 @@ set(CMAKE_POLICY_DEFAULT_CMP0069 NEW)
|
|||
include(CheckCXXCompilerFlag)
|
||||
include(CheckLanguage)
|
||||
|
||||
# Set C++14 as standard for the whole project
|
||||
# CentOS compiler is old but it does allow certain C++14 features
|
||||
# such as lambda captures and they are convinient
|
||||
# On the other hand it does not allow some others.
|
||||
# So we cant' regulate simply with the standard.
|
||||
set(CMAKE_CXX_STANDARD 14)
|
||||
|
||||
# General C# prperties
|
||||
|
|
|
|||
|
|
@ -180,13 +180,17 @@ else()
|
|||
)
|
||||
set_source_files_properties(${mlas_platform_srcs_avx2} PROPERTIES COMPILE_FLAGS "-mavx2 -mfma")
|
||||
|
||||
|
||||
set(mlas_platform_srcs_avx512f
|
||||
${ONNXRUNTIME_ROOT}/core/mlas/lib/x86_64/DgemmKernelAvx512F.S
|
||||
${ONNXRUNTIME_ROOT}/core/mlas/lib/x86_64/SgemmKernelAvx512F.S
|
||||
${ONNXRUNTIME_ROOT}/core/mlas/lib/x86_64/SconvKernelAvx512F.S
|
||||
${ONNXRUNTIME_ROOT}/core/mlas/lib/x86_64/SpoolKernelAvx512F.S
|
||||
)
|
||||
set_source_files_properties(${mlas_platform_srcs_avx512f} PROPERTIES COMPILE_FLAGS "-mavx512f")
|
||||
check_cxx_compiler_flag("-mavx512f" HAS_AVX512F)
|
||||
if(HAS_AVX512F)
|
||||
set_source_files_properties(${mlas_platform_srcs_avx512f} PROPERTIES COMPILE_FLAGS "-mavx512f")
|
||||
endif()
|
||||
|
||||
set(mlas_platform_srcs_avx512bw
|
||||
${ONNXRUNTIME_ROOT}/core/mlas/lib/x86_64/QgemmU8S8KernelAvx512BW.S
|
||||
|
|
@ -194,7 +198,10 @@ else()
|
|||
${ONNXRUNTIME_ROOT}/core/mlas/lib/x86_64/QgemmU8U8KernelAvx512BW.S
|
||||
${ONNXRUNTIME_ROOT}/core/mlas/lib/x86_64/QgemmU8U8KernelAvx512Vnni.S
|
||||
)
|
||||
set_source_files_properties(${mlas_platform_srcs_avx512bw} PROPERTIES COMPILE_FLAGS "-mavx512bw")
|
||||
check_cxx_compiler_flag("-mavx512bw" HAS_AVX512BW)
|
||||
if(HAS_AVX512BW)
|
||||
set_source_files_properties(${mlas_platform_srcs_avx512bw} PROPERTIES COMPILE_FLAGS "-mavx512bw")
|
||||
endif()
|
||||
|
||||
set(mlas_platform_srcs
|
||||
${mlas_platform_srcs_sse2}
|
||||
|
|
|
|||
|
|
@ -38,7 +38,7 @@ class NodeArg {
|
|||
NodeArg(const std::string& name,
|
||||
const ONNX_NAMESPACE::TypeProto* p_arg_type);
|
||||
|
||||
NodeArg(NodeArg&& other) = default;
|
||||
NodeArg(NodeArg&&) = default;
|
||||
|
||||
/** Gets the name. */
|
||||
const std::string& Name() const noexcept;
|
||||
|
|
|
|||
|
|
@ -88,15 +88,16 @@ TEST(FeaturizerTests, EstimatorFunctionality) {
|
|||
ASSERT_TRUE(MyEstimator().fit(0).commit()->transform(2));
|
||||
}
|
||||
|
||||
TEST(FeaturizerTests, EstimatorErrors) {
|
||||
MyEstimator e;
|
||||
|
||||
ASSERT_NE(e.commit(), nullptr);
|
||||
//CHECK_THROWS_WITH(e.fit(1), Catch::Contains("has already been committed"));
|
||||
//CHECK_THROWS_WITH(e.commit(), Catch::Contains("has already been committed"));
|
||||
|
||||
//CHECK_THROWS_WITH(MyEstimator(true).commit(), Catch::Matches("Invalid result"));
|
||||
}
|
||||
//TEST(FeaturizerTests, EstimatorErrors) {
|
||||
// Commented out bc Linux complains e is not inited.
|
||||
// MyEstimator e;
|
||||
//
|
||||
// ASSERT_NE(e.commit(), nullptr);
|
||||
// //CHECK_THROWS_WITH(e.fit(1), Catch::Contains("has already been committed"));
|
||||
// //CHECK_THROWS_WITH(e.commit(), Catch::Contains("has already been committed"));
|
||||
//
|
||||
// //CHECK_THROWS_WITH(MyEstimator(true).commit(), Catch::Matches("Invalid result"));
|
||||
//}
|
||||
|
||||
TEST(FeaturizerTests, EstimatorFitAndCommit) {
|
||||
ASSERT_TRUE(Microsoft::Featurizer::fit_and_commit<MyEstimator>(1, false)->transform(1));
|
||||
|
|
|
|||
|
|
@ -45,7 +45,7 @@ void Profiler::StartProfiling(const logging::Logger* custom_logger) {
|
|||
template <typename T>
|
||||
void Profiler::StartProfiling(const std::basic_string<T>& file_name) {
|
||||
enabled_ = true;
|
||||
profile_stream_ = std::ofstream(file_name, std::ios::out | std::ios::trunc);
|
||||
profile_stream_.open(file_name, std::ios::out | std::ios::trunc);
|
||||
profile_stream_file_ = ToMBString(file_name);
|
||||
profiling_start_time_ = StartTime();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -106,14 +106,14 @@ class PlannerImpl {
|
|||
const std::vector<const NodeArg*>& outer_scope_node_args, const ExecutionProviders& providers,
|
||||
const KernelRegistryManager& kernel_registry, const OrtValueNameIdxMap& ort_value_name_idx_map,
|
||||
const ISequentialPlannerContext& context, SequentialExecutionPlan& plan)
|
||||
: context_{context},
|
||||
plan_{plan},
|
||||
parent_node_{parent_node},
|
||||
graph_viewer_{graph_viewer},
|
||||
outer_scope_node_args_{outer_scope_node_args},
|
||||
execution_providers_{providers},
|
||||
kernel_registry_{kernel_registry},
|
||||
ort_value_name_idx_map_{ort_value_name_idx_map} {}
|
||||
: context_(context),
|
||||
plan_(plan),
|
||||
parent_node_(parent_node),
|
||||
graph_viewer_(graph_viewer),
|
||||
outer_scope_node_args_(outer_scope_node_args),
|
||||
execution_providers_(providers),
|
||||
kernel_registry_(kernel_registry),
|
||||
ort_value_name_idx_map_(ort_value_name_idx_map) {}
|
||||
|
||||
Status CreatePlan();
|
||||
|
||||
|
|
@ -500,7 +500,7 @@ class PlannerImpl {
|
|||
|
||||
// Should only be used after ProcessDef()
|
||||
Status ComputeReusePlan() {
|
||||
std::vector<SequentialExecutionPlan::NodeExecutionPlan>& execution_plan{plan_.execution_plan};
|
||||
std::vector<SequentialExecutionPlan::NodeExecutionPlan>& execution_plan(plan_.execution_plan);
|
||||
|
||||
// Identify allocation/deallocation plan for every ml-value
|
||||
|
||||
|
|
|
|||
|
|
@ -14,11 +14,12 @@ using namespace ::onnxruntime::common;
|
|||
|
||||
AllocatorPtr CreateAllocator(DeviceAllocatorRegistrationInfo info, int device_id) {
|
||||
auto device_allocator = std::unique_ptr<IDeviceAllocator>(info.factory(device_id));
|
||||
if (device_allocator->AllowsArena())
|
||||
if (device_allocator->AllowsArena()) {
|
||||
return std::shared_ptr<IArenaAllocator>(
|
||||
onnxruntime::make_unique<BFCArena>(std::move(device_allocator), info.max_mem));
|
||||
}
|
||||
|
||||
return device_allocator;
|
||||
return AllocatorPtr(std::move(device_allocator));
|
||||
}
|
||||
|
||||
DeviceAllocatorRegistry& DeviceAllocatorRegistry::Instance() {
|
||||
|
|
|
|||
|
|
@ -22,9 +22,9 @@ IExecutionFrame::IExecutionFrame(const std::vector<int>& feed_mlvalue_idxs, cons
|
|||
const std::unordered_map<int, OrtValue>& initializers,
|
||||
const std::vector<int>& fetch_mlvalue_idxs, const std::vector<OrtValue>& fetches,
|
||||
const OrtValueNameIdxMap& ort_value_idx_map, const NodeIndexInfo& node_index_info)
|
||||
: node_index_info_{node_index_info},
|
||||
all_values_size_{static_cast<size_t>(ort_value_idx_map.MaxIdx()) + 1},
|
||||
fetch_mlvalue_idxs_{fetch_mlvalue_idxs} {
|
||||
: node_index_info_(node_index_info),
|
||||
all_values_size_(static_cast<size_t>(ort_value_idx_map.MaxIdx()) + 1),
|
||||
fetch_mlvalue_idxs_(fetch_mlvalue_idxs) {
|
||||
ORT_ENFORCE(feeds.size() == feed_mlvalue_idxs.size());
|
||||
ORT_ENFORCE(fetches.empty() || fetches.size() == fetch_mlvalue_idxs_.size());
|
||||
ORT_ENFORCE(node_index_info_.GetMaxMLValueIdx() == ort_value_idx_map.MaxIdx(),
|
||||
|
|
@ -171,9 +171,9 @@ ExecutionFrame::ExecutionFrame(const std::vector<int>& feed_mlvalue_idxs, const
|
|||
const SessionState& session_state)
|
||||
: IExecutionFrame(feed_mlvalue_idxs, feeds, session_state.GetInitializedTensors(), fetch_mlvalue_idxs, fetches,
|
||||
session_state.GetOrtValueNameIdxMap(), session_state.GetNodeIndexInfo()),
|
||||
session_state_{session_state},
|
||||
mem_patterns_{nullptr},
|
||||
planner_{nullptr} {
|
||||
session_state_(session_state),
|
||||
mem_patterns_(nullptr),
|
||||
planner_(nullptr) {
|
||||
// map the custom allocators to ort_value_idx entries
|
||||
if (!fetch_allocators.empty()) {
|
||||
for (size_t idx = 0, end = fetch_mlvalue_idxs.size(); idx < end; ++idx) {
|
||||
|
|
|
|||
|
|
@ -62,8 +62,8 @@ void TraverseFormalParametersWithTypeProto(const Node& node,
|
|||
class TypeBindingResolver {
|
||||
public:
|
||||
TypeBindingResolver(const Node& node, bool use_lookup_map)
|
||||
: node_{node},
|
||||
type_binding_map_{} {
|
||||
: node_(node),
|
||||
type_binding_map_() {
|
||||
if (use_lookup_map) {
|
||||
type_binding_map_ = onnxruntime::make_unique<TypeBindingMap>();
|
||||
TraverseFormalParametersWithTypeProto(
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@ namespace onnxruntime {
|
|||
|
||||
// if we have a full GraphViewer, assume the min node index is 0
|
||||
NodeIndexInfo::NodeIndexInfo(const GraphViewer& graph_viewer, const OrtValueNameIdxMap& ort_value_idx_map)
|
||||
: min_node_index_{0}, max_mlvalue_idx_{ort_value_idx_map.MaxIdx()} {
|
||||
: min_node_index_(0), max_mlvalue_idx_(ort_value_idx_map.MaxIdx()) {
|
||||
Init(graph_viewer.Nodes(), graph_viewer.MaxNodeIndex(), ort_value_idx_map);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@
|
|||
|
||||
namespace onnxruntime {
|
||||
OrtValuePatternPlanner::OrtValuePatternPlanner(const ExecutionPlanBase& execution_plan)
|
||||
: execution_planner_{execution_plan} {
|
||||
: execution_planner_(execution_plan) {
|
||||
for (auto& location : execution_plan.GetAllLocations()) {
|
||||
planner_map_.emplace(location, onnxruntime::make_unique<MemPatternPlanner>());
|
||||
}
|
||||
|
|
|
|||
|
|
@ -8,13 +8,13 @@ namespace onnxruntime {
|
|||
|
||||
template <typename T>
|
||||
OrtValueTensorSlicer<T> OrtValueTensorSlicer<T>::Create(T& ort_value, int64_t slice_dimension, int64_t dim0_offset) {
|
||||
static_assert(std::is_same<std::remove_const_t<T>, OrtValue>::value,
|
||||
static_assert(std::is_same<typename std::remove_const<T>::type, OrtValue>::value,
|
||||
"OrtValueTensorSlicer can only be used with 'OrtValue' or 'const OrtValue'");
|
||||
|
||||
ORT_ENFORCE(ort_value.IsTensor(), "Can't slice a non-tensor OrtValue. Type was ", ort_value.Type());
|
||||
ORT_ENFORCE(ort_value.IsAllocated(), "OrtValue has not been allocated so can't be sliced.");
|
||||
|
||||
auto& tensor_shape{ort_value.template Get<Tensor>().Shape()};
|
||||
auto& tensor_shape = ort_value.template Get<Tensor>().Shape();
|
||||
ORT_ENFORCE(gsl::narrow_cast<int64_t>(tensor_shape.NumDimensions()) >= slice_dimension,
|
||||
"Insufficient dimensions to slice on ", slice_dimension, ". Shape:", tensor_shape);
|
||||
|
||||
|
|
@ -27,10 +27,10 @@ OrtValueTensorSlicer<T> OrtValueTensorSlicer<T>::Create(T& ort_value, int64_t sl
|
|||
template <typename T>
|
||||
OrtValueTensorSlicer<T>::Iterator::Iterator(T& ort_value, size_t slice_dimension, size_t dim0_offset, int64_t position,
|
||||
Direction direction)
|
||||
: ort_value_{&ort_value},
|
||||
position_{position},
|
||||
increment_by_{direction == Direction::kForward ? 1 : -1},
|
||||
position_materialized_{-1} {
|
||||
: ort_value_(&ort_value),
|
||||
position_(position),
|
||||
increment_by_(direction == Direction::kForward ? 1 : -1),
|
||||
position_materialized_(-1) {
|
||||
const auto& tensor = ort_value.template Get<Tensor>();
|
||||
tensor_data_type_ = tensor.DataType();
|
||||
tensor_location_ = &tensor.Location();
|
||||
|
|
|
|||
|
|
@ -133,7 +133,7 @@ class OrtValueTensorSlicer {
|
|||
|
||||
private:
|
||||
OrtValueTensorSlicer(T& ort_value, int64_t slice_dimension, int64_t dim0_offset) noexcept
|
||||
: ort_value_{&ort_value}, slice_dimension_{slice_dimension}, dim0_offset_{dim0_offset} {}
|
||||
: ort_value_(&ort_value), slice_dimension_(slice_dimension), dim0_offset_(dim0_offset) {}
|
||||
|
||||
T* ort_value_;
|
||||
int64_t slice_dimension_;
|
||||
|
|
|
|||
|
|
@ -19,7 +19,7 @@
|
|||
namespace onnxruntime {
|
||||
|
||||
ParallelExecutor::ParallelExecutor(const SessionState& session_state, const bool& terminate_flag)
|
||||
: out_standings_(0), terminate_flag_{terminate_flag}, executor_pool_(session_state.GetInterOpThreadPool()) {
|
||||
: out_standings_(0), terminate_flag_(terminate_flag), executor_pool_(session_state.GetInterOpThreadPool()) {
|
||||
auto graph_viewer = session_state.GetGraphViewer();
|
||||
node_refs_.resize(graph_viewer->MaxNodeIndex());
|
||||
for (auto& node : graph_viewer->Nodes()) {
|
||||
|
|
|
|||
|
|
@ -281,7 +281,7 @@ SessionState* SessionState::GetMutableSubgraphSessionState(onnxruntime::NodeInde
|
|||
|
||||
auto node_entry = subgraph_session_states_.find(index);
|
||||
if (node_entry != subgraph_session_states_.cend()) {
|
||||
const auto& attribute_state_map{node_entry->second};
|
||||
const auto& attribute_state_map = node_entry->second;
|
||||
|
||||
const auto& subgraph_entry = attribute_state_map.find(attribute_name);
|
||||
if (subgraph_entry != attribute_state_map.cend()) {
|
||||
|
|
|
|||
|
|
@ -240,7 +240,7 @@ class SessionState {
|
|||
std::unique_ptr<SequentialExecutionPlan> p_seq_exec_plan_ = nullptr;
|
||||
|
||||
const logging::Logger* logger_ = nullptr;
|
||||
profiling::Profiler* profiler_;
|
||||
profiling::Profiler* profiler_ = nullptr;
|
||||
|
||||
// switch for enable memory pattern optimization or not.
|
||||
const bool enable_mem_pattern_;
|
||||
|
|
@ -264,7 +264,7 @@ class SessionState {
|
|||
|
||||
bool export_fused_dll_ = false;
|
||||
FuncManager fused_funcs_mgr_;
|
||||
const DataTransferManager* data_transfer_mgr_;
|
||||
const DataTransferManager* data_transfer_mgr_ = nullptr;
|
||||
|
||||
std::unique_ptr<NodeIndexInfo> node_index_info_;
|
||||
std::multimap<int, std::unique_ptr<FeedsFetchesManager>> cached_feeds_fetches_managers_;
|
||||
|
|
|
|||
|
|
@ -48,11 +48,11 @@ SessionStateInitializer::SessionStateInitializer(bool enable_mem_pattern,
|
|||
const ExecutionProviders& providers,
|
||||
KernelRegistryManager& kernel_registry_manager)
|
||||
: graph_loc_(graph_loc),
|
||||
graph_{graph},
|
||||
session_state_{session_state},
|
||||
execution_providers_{providers},
|
||||
kernel_registry_manager_{kernel_registry_manager},
|
||||
logger_{session_state.Logger()},
|
||||
graph_(graph),
|
||||
session_state_(session_state),
|
||||
execution_providers_(providers),
|
||||
kernel_registry_manager_(kernel_registry_manager),
|
||||
logger_(session_state.Logger()),
|
||||
enable_mem_pattern_(enable_mem_pattern) {}
|
||||
|
||||
common::Status SessionStateInitializer::CreatePlan(
|
||||
|
|
|
|||
|
|
@ -430,7 +430,7 @@ void Node::CreateSubgraph(const std::string& attr_name) {
|
|||
if (attr != attributes_.cend() && utils::HasGraph(attr->second)) {
|
||||
GraphProto& mutable_graph = *attr->second.mutable_g();
|
||||
std::unique_ptr<Graph> subgraph{new Graph(*graph_, *this, mutable_graph)};
|
||||
attr_to_subgraph_map_.insert({std::string{attr_name}, gsl::not_null<Graph*>{subgraph.get()}});
|
||||
attr_to_subgraph_map_.insert({std::string(attr_name), gsl::not_null<Graph*>{subgraph.get()}});
|
||||
subgraphs_.push_back(std::move(subgraph));
|
||||
}
|
||||
}
|
||||
|
|
@ -585,8 +585,9 @@ const Graph* Node::GetGraphAttribute(const std::string& attr_name) const {
|
|||
std::vector<gsl::not_null<const Graph*>> Node::GetSubgraphs() const {
|
||||
std::vector<gsl::not_null<const Graph*>> subgraphs;
|
||||
subgraphs.reserve(attr_to_subgraph_map_.size());
|
||||
using value_type = std::unordered_map<std::string, gsl::not_null<Graph*>>::value_type;
|
||||
std::transform(attr_to_subgraph_map_.cbegin(), attr_to_subgraph_map_.cend(), std::back_inserter(subgraphs),
|
||||
[](const auto& entry) { return entry.second; });
|
||||
[](const value_type& entry) { return entry.second; });
|
||||
|
||||
return subgraphs;
|
||||
}
|
||||
|
|
@ -646,14 +647,14 @@ Graph::Graph(GraphProto* graph_proto,
|
|||
Graph::Graph(GraphProto* graph_proto, const std::unordered_map<std::string, int>& domain_to_version, Version ir_version,
|
||||
IOnnxRuntimeOpSchemaCollectionPtr schema_registry, Graph* parent_graph, const Node* parent_node,
|
||||
const std::unordered_map<std::string, const ONNX_NAMESPACE::FunctionProto*>& model_functions)
|
||||
: graph_proto_{graph_proto},
|
||||
: graph_proto_(graph_proto),
|
||||
schema_registry_(schema_registry),
|
||||
graph_resolve_needed_(true),
|
||||
domain_to_version_(domain_to_version),
|
||||
model_functions_(model_functions),
|
||||
ir_version_(ir_version),
|
||||
parent_graph_{parent_graph},
|
||||
parent_node_{parent_node} {
|
||||
parent_graph_(parent_graph),
|
||||
parent_node_(parent_node) {
|
||||
ORT_ENFORCE(graph_proto != nullptr, "graph_proto cannot be null");
|
||||
ArgNameToTypeMap name_to_type_map;
|
||||
|
||||
|
|
@ -1245,7 +1246,7 @@ using SubgraphInferencingFunc =
|
|||
class GraphInferencerImpl : public ONNX_NAMESPACE::GraphInferencer {
|
||||
public:
|
||||
GraphInferencerImpl(const Node& node, Graph& graph, SubgraphInferencingFunc& inferencing_func)
|
||||
: node_{node}, graph_{graph}, inferencing_func_{inferencing_func} {
|
||||
: node_(node), graph_(graph), inferencing_func_(inferencing_func) {
|
||||
}
|
||||
|
||||
// Perform inferencing on the graph contained in GraphInferencer.
|
||||
|
|
@ -1543,7 +1544,7 @@ Status Graph::InferAndVerifyTypeMatch(Node& node, const OpSchema& op) {
|
|||
return Status(ONNXRUNTIME, FAIL, ex.what());
|
||||
}
|
||||
|
||||
const auto& onnx_inferred_types{context.InferredOutputTypes()};
|
||||
const auto& onnx_inferred_types(context.InferredOutputTypes());
|
||||
|
||||
// Infer and verify node output arg type information.
|
||||
int i = -1;
|
||||
|
|
|
|||
|
|
@ -24,7 +24,7 @@ static bool CheckConstantInput(const Graph& graph, const NodeArg& input_arg, flo
|
|||
return false;
|
||||
}
|
||||
|
||||
auto init_const = std::make_unique<Initializer>(tensor_proto);
|
||||
auto init_const = onnxruntime::make_unique<Initializer>(tensor_proto);
|
||||
const auto data_type = tensor_proto->data_type();
|
||||
if (data_type == ONNX_NAMESPACE::TensorProto_DataType_FLOAT) {
|
||||
float* val = init_const->data<float>();
|
||||
|
|
|
|||
|
|
@ -20,7 +20,7 @@ Transformer that inserts nodes to copy memory between devices when needed.
|
|||
class MemcpyTransformer : public GraphTransformer {
|
||||
public:
|
||||
MemcpyTransformer(const std::vector<std::string>& provider_types, const KernelRegistryManager& registry_manager)
|
||||
: GraphTransformer("MemcpyTransformer"), provider_types_{provider_types}, registry_manager_(std::cref(registry_manager)) {}
|
||||
: GraphTransformer("MemcpyTransformer"), provider_types_(provider_types), registry_manager_(std::cref(registry_manager)) {}
|
||||
|
||||
private:
|
||||
common::Status ApplyImpl(Graph& graph, bool& modified, int graph_level) const override;
|
||||
|
|
|
|||
|
|
@ -298,9 +298,9 @@ class Erf final : public OpKernel {
|
|||
};
|
||||
|
||||
template <typename T>
|
||||
auto MakeEigenArrayMap(Tensor& t) { return EigenVectorArrayMap<T>(t.template MutableData<T>(), t.Shape().Size()); }
|
||||
auto MakeEigenArrayMap(Tensor& t) -> EigenVectorArrayMap<T> { return EigenVectorArrayMap<T>(t.template MutableData<T>(), t.Shape().Size()); }
|
||||
template <typename T>
|
||||
auto MakeEigenArrayMap(const Tensor& t) { return ConstEigenVectorArrayMap<T>(t.template Data<T>(), t.Shape().Size()); }
|
||||
auto MakeEigenArrayMap(const Tensor& t) -> ConstEigenVectorArrayMap<T> { return ConstEigenVectorArrayMap<T>(t.template Data<T>(), t.Shape().Size()); }
|
||||
|
||||
struct BroadcastIterator {
|
||||
size_t AdvanceBy(size_t delta) {
|
||||
|
|
|
|||
|
|
@ -93,7 +93,7 @@ class Softmax final : public OpKernel {
|
|||
if (tensor_pointer == nullptr)
|
||||
return Status(common::ONNXRUNTIME, common::FAIL, "input count mismatch");
|
||||
const Tensor& X = *tensor_pointer;
|
||||
const TensorShape& input_shape{X.Shape()};
|
||||
const TensorShape& input_shape = X.Shape();
|
||||
|
||||
VLOGS(ctx->Logger(), 2) << "Input tensor shape: " << input_shape;
|
||||
|
||||
|
|
|
|||
|
|
@ -7,10 +7,15 @@
|
|||
#include "core/framework/tensor.h"
|
||||
|
||||
#ifdef _MSC_VER
|
||||
#include <locale.h>
|
||||
#endif
|
||||
|
||||
#include <codecvt>
|
||||
#include <locale.h>
|
||||
#elif (defined __APPLE__)
|
||||
#include <codecvt>
|
||||
#else
|
||||
#include <limits>
|
||||
#include <iconv.h>
|
||||
#endif // _MSC_VER
|
||||
|
||||
#include <locale>
|
||||
#include <functional>
|
||||
#include <unordered_set>
|
||||
|
|
@ -68,12 +73,15 @@ class Locale {
|
|||
_locale_t loc_;
|
||||
};
|
||||
|
||||
using Utf8Converter = std::wstring_convert<std::codecvt_utf8<wchar_t>>;
|
||||
|
||||
const std::string default_locale("en-US");
|
||||
|
||||
#else
|
||||
#else // MS_VER
|
||||
|
||||
class Locale {
|
||||
public:
|
||||
explicit Locale(const std::string& name) try : loc_(name) {
|
||||
explicit Locale(const std::string& name) try : loc_(name.c_str()) {
|
||||
} catch (const std::runtime_error& e) {
|
||||
ORT_THROW("Failed to construct locale with name:",
|
||||
name, ":", e.what(), ":Please, install necessary language-pack-XX and configure locales");
|
||||
|
|
@ -97,14 +105,93 @@ class Locale {
|
|||
std::locale loc_;
|
||||
};
|
||||
|
||||
const std::string default_locale("en_US.UTF-8");
|
||||
#ifdef __APPLE__
|
||||
using Utf8Converter = std::wstring_convert<std::codecvt_utf8<wchar_t>>;
|
||||
#else
|
||||
|
||||
#endif
|
||||
// All others (Linux)
|
||||
class Utf8Converter {
|
||||
public:
|
||||
|
||||
Utf8Converter(const std::string&, const std::wstring&) {}
|
||||
|
||||
std::wstring from_bytes(const std::string& s) const {
|
||||
std::wstring result;
|
||||
if (s.empty()) {
|
||||
return result;
|
||||
}
|
||||
// Order of arguments is to, from
|
||||
auto icvt = iconv_open("WCHAR_T", "UTF-8");
|
||||
// CentOS is not happy with -1
|
||||
if (std::numeric_limits<iconv_t>::max() == icvt) {
|
||||
return wconv_error;
|
||||
}
|
||||
|
||||
char* iconv_in = const_cast<char*>(s.c_str());
|
||||
size_t iconv_in_bytes = s.length();
|
||||
// Temporary buffer assumes 1 byte to 1 wchar_t
|
||||
// to make sure it is enough.
|
||||
const size_t buffer_len = iconv_in_bytes * sizeof(wchar_t);
|
||||
auto buffer = onnxruntime::make_unique<char[]>(buffer_len);
|
||||
char* iconv_out = buffer.get();
|
||||
size_t iconv_out_bytes = buffer_len;
|
||||
auto ret = iconv(icvt, &iconv_in, &iconv_in_bytes, &iconv_out, &iconv_out_bytes);
|
||||
if (static_cast<size_t>(-1) == ret) {
|
||||
result = wconv_error;
|
||||
} else {
|
||||
size_t converted_bytes = buffer_len - iconv_out_bytes;
|
||||
assert((converted_bytes % sizeof(wchar_t)) == 0);
|
||||
result.assign(reinterpret_cast<const wchar_t*>(buffer.get()), converted_bytes / sizeof(wchar_t));
|
||||
}
|
||||
iconv_close(icvt);
|
||||
return result;
|
||||
}
|
||||
|
||||
std::string to_bytes(const std::wstring& wstr) const {
|
||||
std::string result;
|
||||
if (wstr.empty()) {
|
||||
return result;
|
||||
}
|
||||
// Order of arguments is to, from
|
||||
auto icvt = iconv_open("UTF-8", "WCHAR_T");
|
||||
// CentOS is not happy with -1
|
||||
if (std::numeric_limits<iconv_t>::max() == icvt) {
|
||||
return conv_error;
|
||||
}
|
||||
|
||||
// I hope this does not modify the incoming buffer
|
||||
wchar_t* non_const_in = const_cast<wchar_t*>(wstr.c_str());
|
||||
char* iconv_in = reinterpret_cast<char*>(non_const_in);
|
||||
size_t iconv_in_bytes = wstr.length() * sizeof(wchar_t);
|
||||
// Temp buffer, assume every code point converts into 3 bytes, this should be enough
|
||||
// We do not convert terminating zeros
|
||||
const size_t buffer_len = wstr.length() * 3;
|
||||
auto buffer = onnxruntime::make_unique<char[]>(buffer_len);
|
||||
|
||||
char* iconv_out = buffer.get();
|
||||
size_t iconv_out_bytes = buffer_len;
|
||||
auto ret = iconv(icvt, &iconv_in, &iconv_in_bytes, &iconv_out, &iconv_out_bytes);
|
||||
if (static_cast<size_t>(-1) == ret) {
|
||||
result = conv_error;
|
||||
} else {
|
||||
size_t converted_len = buffer_len - iconv_out_bytes;
|
||||
result.assign(buffer.get(), converted_len);
|
||||
}
|
||||
iconv_close(icvt);
|
||||
return result;
|
||||
}
|
||||
};
|
||||
|
||||
#endif // __APPLE__
|
||||
|
||||
const std::string default_locale("en_US.UTF-8"); // All non-MS
|
||||
|
||||
#endif // MS_VER
|
||||
|
||||
template <class ForwardIter>
|
||||
Status CopyCaseAction(ForwardIter first, ForwardIter end, OpKernelContext* ctx,
|
||||
const Locale& loc,
|
||||
std::wstring_convert<std::codecvt_utf8<wchar_t>>& converter,
|
||||
Utf8Converter& converter,
|
||||
size_t N, size_t C,
|
||||
StringNormalizer::CaseAction caseaction) {
|
||||
std::vector<int64_t> output_dims;
|
||||
|
|
@ -182,7 +269,7 @@ StringNormalizer::StringNormalizer(const OpKernelInfo& info) : OpKernel(info),
|
|||
|
||||
locale_name_ = info.GetAttrOrDefault("locale", default_locale);
|
||||
Locale locale(locale_name_);
|
||||
std::wstring_convert<std::codecvt_utf8<wchar_t>> converter(conv_error, wconv_error);
|
||||
Utf8Converter converter(conv_error, wconv_error);
|
||||
|
||||
std::vector<std::string> swords = info.GetAttrsOrDefault<std::string>("stopwords");
|
||||
for (const auto& sw : swords) {
|
||||
|
|
@ -229,7 +316,7 @@ Status StringNormalizer::Compute(OpKernelContext* ctx) const {
|
|||
|
||||
Status status;
|
||||
Locale locale(locale_name_);
|
||||
std::wstring_convert<std::codecvt_utf8<wchar_t>> converter(conv_error, wconv_error);
|
||||
Utf8Converter converter(conv_error, wconv_error);
|
||||
auto const input_data = X->template Data<std::string>();
|
||||
using StrRef = std::reference_wrapper<const std::string>;
|
||||
if (is_case_sensitive_) {
|
||||
|
|
|
|||
|
|
@ -61,7 +61,7 @@ class NgramEntry<int64_t> : public NgramEntryBase {
|
|||
size_t hash_ = 0;
|
||||
|
||||
void RunningHash(int64_t v) {
|
||||
std::hash<int64_t> hf{};
|
||||
std::hash<int64_t> hf;
|
||||
hash_ ^= hf(v) + 0x9e3779b9 + (hash_ << 6) + (hash_ >> 2);
|
||||
}
|
||||
|
||||
|
|
@ -112,7 +112,7 @@ class NgramEntry<std::string> : public NgramEntryBase {
|
|||
size_t hash_ = 0;
|
||||
|
||||
void RunningHash(const std::string& s) {
|
||||
std::hash<std::string> hf{};
|
||||
std::hash<std::string> hf;
|
||||
hash_ ^= hf(s) + 0x9e3779b9 + (hash_ << 6) + (hash_ >> 2);
|
||||
}
|
||||
|
||||
|
|
@ -142,9 +142,13 @@ class NgramEntry<std::string> : public NgramEntryBase {
|
|||
|
||||
bool operator==(const NgramEntry& o) const {
|
||||
if (items_.size() == o.items_.size()) {
|
||||
return std::equal(items_.cbegin(), items_.cend(),
|
||||
o.items_.cbegin(), o.items_.cend(),
|
||||
std::equal_to<std::string>());
|
||||
std::equal_to<std::string> pred;
|
||||
for (size_t i = 0; i < items_.size(); ++i) {
|
||||
if (!pred(items_[i], o.items_[i])) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
|
@ -153,11 +157,6 @@ class NgramEntry<std::string> : public NgramEntryBase {
|
|||
}
|
||||
};
|
||||
|
||||
using IntegerPoolSet = std::unordered_set<NgramEntry<int64_t>>;
|
||||
// Does not own strings, contains references to them. This helps
|
||||
// to search by string references that point to the current input.
|
||||
using StringPoolSet = std::unordered_set<NgramEntry<std::string>>;
|
||||
|
||||
template <typename ForwardIter, typename Cont>
|
||||
inline void Emplace(ForwardIter first, size_t ngrams, size_t ngram_size, size_t& ngram_id, Cont& c) {
|
||||
for (; ngrams > 0; --ngrams) {
|
||||
|
|
@ -185,6 +184,27 @@ struct hash<NgramEntry<T>> {
|
|||
|
||||
namespace onnxruntime {
|
||||
|
||||
using IntegerPoolSet = std::unordered_set<NgramEntry<int64_t>>;
|
||||
// Does not own strings, contains references to them. This helps
|
||||
// to search by string references that point to the current input.
|
||||
using StringPoolSet = std::unordered_set<NgramEntry<std::string>>;
|
||||
|
||||
template <typename T>
|
||||
struct Return;
|
||||
|
||||
template <>
|
||||
struct Return<int64_t> {
|
||||
using type = IntegerPoolSet::const_iterator;
|
||||
};
|
||||
|
||||
template <>
|
||||
struct Return<int32_t> : Return<int64_t> {};
|
||||
|
||||
template <>
|
||||
struct Return<std::string> {
|
||||
using type = StringPoolSet::const_iterator;
|
||||
};
|
||||
|
||||
// The weighting criteria.
|
||||
// "TF"(term frequency),
|
||||
// the counts are propagated to output
|
||||
|
|
@ -233,10 +253,10 @@ struct TfIdfVectorizer::Impl {
|
|||
Impl& operator=(const Impl&) = delete;
|
||||
|
||||
template <typename T>
|
||||
auto PoolEnd() const;
|
||||
typename Return<T>::type PoolEnd() const;
|
||||
|
||||
template <typename T>
|
||||
auto PoolFind(const ngram_details::NgramEntry<T>&) const;
|
||||
typename Return<T>::type PoolFind(const ngram_details::NgramEntry<T>&) const;
|
||||
|
||||
void IncrementCount(size_t ngram_id, size_t row_num,
|
||||
std::vector<uint32_t>& frequencies) const {
|
||||
|
|
@ -248,32 +268,32 @@ struct TfIdfVectorizer::Impl {
|
|||
};
|
||||
|
||||
template <>
|
||||
inline auto TfIdfVectorizer::Impl::PoolEnd<int64_t>() const {
|
||||
inline Return<int64_t>::type TfIdfVectorizer::Impl::PoolEnd<int64_t>() const {
|
||||
return int64_set_.cend();
|
||||
}
|
||||
|
||||
template <>
|
||||
inline auto TfIdfVectorizer::Impl::PoolEnd<int32_t>() const {
|
||||
inline Return<int32_t>::type TfIdfVectorizer::Impl::PoolEnd<int32_t>() const {
|
||||
return PoolEnd<int64_t>();
|
||||
}
|
||||
|
||||
template <>
|
||||
inline auto TfIdfVectorizer::Impl::PoolEnd<std::string>() const {
|
||||
inline Return<std::string>::type TfIdfVectorizer::Impl::PoolEnd<std::string>() const {
|
||||
return str_set_.cend();
|
||||
}
|
||||
|
||||
template <>
|
||||
inline auto TfIdfVectorizer::Impl::PoolFind<int64_t>(const NgramEntry<int64_t>& i) const {
|
||||
inline Return<int64_t>::type TfIdfVectorizer::Impl::PoolFind<int64_t>(const NgramEntry<int64_t>& i) const {
|
||||
return int64_set_.find(i);
|
||||
}
|
||||
|
||||
template <>
|
||||
inline auto TfIdfVectorizer::Impl::PoolFind<int32_t>(const NgramEntry<int32_t>& i) const {
|
||||
inline Return<int32_t>::type TfIdfVectorizer::Impl::PoolFind<int32_t>(const NgramEntry<int32_t>& i) const {
|
||||
return int64_set_.find(i);
|
||||
}
|
||||
|
||||
template <>
|
||||
inline auto TfIdfVectorizer::Impl::PoolFind<std::string>(const NgramEntry<std::string>& i) const {
|
||||
inline Return<std::string>::type TfIdfVectorizer::Impl::PoolFind<std::string>(const NgramEntry<std::string>& i) const {
|
||||
return str_set_.find(i);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -41,11 +41,15 @@ WHERE_TYPED_KERNEL_WITH_TYPE_NAME(std::string, string)
|
|||
#undef WHERE_TYPED_KERNEL
|
||||
|
||||
namespace {
|
||||
template <typename T>
|
||||
constexpr bool IsEigenScalarCompatible = std::is_arithmetic<T>::value;
|
||||
|
||||
template<typename T, typename R>
|
||||
using EnableIfEigenScalar = typename std::enable_if<std::is_arithmetic<T>::value, R>::type;
|
||||
|
||||
template <typename T, typename R>
|
||||
using EnableIfEigenNotScalar = typename std::enable_if<!std::is_arithmetic<T>::value, R>::type;
|
||||
|
||||
template <typename T>
|
||||
std::enable_if_t<IsEigenScalarCompatible<T>, void>
|
||||
EnableIfEigenScalar<T, void>
|
||||
SelectBroadcastLoop(bool target,
|
||||
TBroadcaster<bool, T>* select_broadcaster,
|
||||
TBroadcastOutput<T>* select_broadcast_output) {
|
||||
|
|
@ -69,7 +73,7 @@ SelectBroadcastLoop(bool target,
|
|||
}
|
||||
|
||||
template <typename T>
|
||||
std::enable_if_t<!IsEigenScalarCompatible<T>, void>
|
||||
EnableIfEigenNotScalar<T, void>
|
||||
SelectBroadcastLoop(bool target, TBroadcaster<bool, T>* select_broadcaster,
|
||||
TBroadcastOutput<T>* select_broadcast_output) {
|
||||
BroadcastLoopSpan(
|
||||
|
|
@ -110,10 +114,10 @@ std::unique_ptr<Tensor> Select(bool target, const Tensor& condition_tensor, cons
|
|||
}
|
||||
|
||||
template <typename T>
|
||||
std::enable_if_t<IsEigenScalarCompatible<T>, void>
|
||||
EnableIfEigenScalar<T, void>
|
||||
MergeBroadcastLoop(TBroadcaster<T, T>* merge_broadcaster, TBroadcastOutput<T>* merge_broadcast_output) {
|
||||
const auto merge_scalar_and_vector = [](EigenVectorMap<T> output,
|
||||
const T& scalar_value, ConstEigenVectorMap<T> vector_value) {
|
||||
const T& scalar_value, ConstEigenVectorMap<T> vector_value) {
|
||||
if (scalar_value != T{}) {
|
||||
output = EigenVectorMap<T>::PlainObject::Constant(vector_value.size(), scalar_value);
|
||||
} else {
|
||||
|
|
@ -137,7 +141,7 @@ MergeBroadcastLoop(TBroadcaster<T, T>* merge_broadcaster, TBroadcastOutput<T>* m
|
|||
}
|
||||
|
||||
template <typename T>
|
||||
std::enable_if_t<!IsEigenScalarCompatible<T>, void>
|
||||
EnableIfEigenNotScalar<T, void>
|
||||
MergeBroadcastLoop(TBroadcaster<T, T>* merge_broadcaster, TBroadcastOutput<T>* merge_broadcast_output) {
|
||||
const auto merge_scalar_and_vector = [](gsl::span<T> output, const T& scalar_value, gsl::span<const T> vector_value) {
|
||||
if (!scalar_value.empty()) {
|
||||
|
|
|
|||
|
|
@ -94,9 +94,9 @@ inline std::basic_string<T> GetCurrentTimeString() {
|
|||
|
||||
InferenceSession::InferenceSession(const SessionOptions& session_options,
|
||||
logging::LoggingManager* logging_manager)
|
||||
: session_options_{session_options},
|
||||
graph_transformation_mgr_{session_options.max_num_graph_transformation_steps},
|
||||
logging_manager_{logging_manager},
|
||||
: session_options_(session_options),
|
||||
graph_transformation_mgr_(session_options.max_num_graph_transformation_steps),
|
||||
logging_manager_(logging_manager),
|
||||
thread_pool_(concurrency::CreateThreadPool("intra_op_thread_pool",
|
||||
session_options.intra_op_num_threads)),
|
||||
inter_op_thread_pool_(!session_options.enable_sequential_execution
|
||||
|
|
@ -107,7 +107,7 @@ InferenceSession::InferenceSession(const SessionOptions& session_options,
|
|||
session_options.enable_mem_pattern && session_options.enable_sequential_execution,
|
||||
thread_pool_.get(),
|
||||
inter_op_thread_pool_.get()),
|
||||
insert_cast_transformer_{"CastFloat16Transformer"} {
|
||||
insert_cast_transformer_("CastFloat16Transformer") {
|
||||
ORT_ENFORCE(Environment::IsInitialized(),
|
||||
"Environment must be initialized before creating an InferenceSession.");
|
||||
|
||||
|
|
|
|||
|
|
@ -75,7 +75,7 @@ struct OrtEnv {
|
|||
class LoggingWrapper : public ISink {
|
||||
public:
|
||||
LoggingWrapper(OrtLoggingFunction logging_function, void* logger_param)
|
||||
: logging_function_{logging_function}, logger_param_{logger_param} {
|
||||
: logging_function_(logging_function), logger_param_(logger_param) {
|
||||
}
|
||||
|
||||
void SendImpl(const Timestamp& /*timestamp*/ /*timestamp*/, const std::string& logger_id,
|
||||
|
|
|
|||
|
|
@ -61,11 +61,12 @@ template <typename T>
|
|||
using ConstEigenMatrixMapRowMajor = Eigen::Map<const Eigen::Matrix<T, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor>>;
|
||||
|
||||
template <typename T>
|
||||
auto EigenMap(Tensor& t) {
|
||||
auto EigenMap(Tensor& t) -> EigenVectorMap<T> {
|
||||
return EigenVectorMap<T>(t.template MutableData<T>(), t.Shape().Size());
|
||||
}
|
||||
template <typename T>
|
||||
auto EigenMap(const Tensor& t) {
|
||||
auto EigenMap(const Tensor& t) -> ConstEigenVectorMap<T> {
|
||||
|
||||
return ConstEigenVectorMap<T>(t.template Data<T>(), t.Shape().Size());
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1780,24 +1780,24 @@ gsl_DISABLE_MSVC_WARNINGS(26410 26415 26418 26472 26439 26440 26473 26481 26482
|
|||
// 26.7.3.3 Subviews [span.sub]
|
||||
|
||||
gsl_api gsl_constexpr14 span first(index_type count) const gsl_noexcept {
|
||||
Expects(0 <= count && count <= this->size());
|
||||
Expects(count <= this->size());
|
||||
return span(this->data(), count);
|
||||
}
|
||||
|
||||
gsl_api gsl_constexpr14 span last(index_type count) const gsl_noexcept {
|
||||
Expects(0 <= count && count <= this->size());
|
||||
Expects(count <= this->size());
|
||||
return span(this->data() + this->size() - count, count);
|
||||
}
|
||||
|
||||
gsl_api gsl_constexpr14 span subspan(index_type offset) const gsl_noexcept {
|
||||
Expects(0 <= offset && offset <= this->size());
|
||||
Expects(offset <= this->size());
|
||||
return span(this->data() + offset, this->size() - offset);
|
||||
}
|
||||
|
||||
gsl_api gsl_constexpr14 span subspan(index_type offset, index_type count) const gsl_noexcept {
|
||||
Expects(
|
||||
0 <= offset && offset <= this->size() &&
|
||||
0 <= count && count <= this->size() - offset);
|
||||
offset <= this->size() &&
|
||||
count <= this->size() - offset);
|
||||
return span(this->data() + offset, count);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,7 +1,6 @@
|
|||
// Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
// Licensed under the MIT License.
|
||||
|
||||
#include <codecvt>
|
||||
#include <vector>
|
||||
#include "gtest/gtest.h"
|
||||
#include "test/providers/provider_test_utils.h"
|
||||
|
|
|
|||
|
|
@ -195,7 +195,7 @@ TEST_F(ExecutionFrameTest, MemPatternTest) {
|
|||
status = state.SetGraphAndCreateKernels(graph, kernel_registry_manager);
|
||||
EXPECT_TRUE(status.IsOK()) << status.ErrorMessage();
|
||||
|
||||
const OrtValueNameIdxMap& mlvalue_name_idx_map{state.GetOrtValueNameIdxMap()};
|
||||
const OrtValueNameIdxMap& mlvalue_name_idx_map(state.GetOrtValueNameIdxMap());
|
||||
|
||||
int x1_idx, x2_idx, x3_idx;
|
||||
int t1_idx, t2_idx, t3_idx;
|
||||
|
|
|
|||
|
|
@ -53,27 +53,27 @@ class SparseTensorSample final {
|
|||
SparseTensorSample(SparseTensorSample&&) = default;
|
||||
SparseTensorSample& operator=(SparseTensorSample&&) = default;
|
||||
|
||||
const auto& Values() const {
|
||||
const std::vector<int64_t>& Values() const {
|
||||
return values_;
|
||||
}
|
||||
|
||||
const auto& Indicies() const {
|
||||
const std::vector<int64_t>& Indicies() const {
|
||||
return indicies_;
|
||||
}
|
||||
|
||||
const auto& Size() const {
|
||||
int64_t Size() const {
|
||||
return size_;
|
||||
}
|
||||
|
||||
auto& Values() {
|
||||
std::vector<int64_t>& Values() {
|
||||
return values_;
|
||||
}
|
||||
|
||||
auto& Indicies() {
|
||||
std::vector<int64_t>& Indicies() {
|
||||
return indicies_;
|
||||
}
|
||||
|
||||
auto& Size() {
|
||||
int64_t& Size() {
|
||||
return size_;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -364,6 +364,9 @@ int real_main(int argc, char* argv[], Ort::Env& env) {
|
|||
std::string test_name_;
|
||||
std::string reason_;
|
||||
std::set<std::string> broken_versions_ = {}; // apply to all versions if empty
|
||||
BrokenTest(std::string name, std::string reason) : test_name_(std::move(name)), reason_(std::move(reason)) {}
|
||||
BrokenTest(std::string name, std::string reason, const std::initializer_list<std::string>& versions) :
|
||||
test_name_(std::move(name)), reason_(std::move(reason)), broken_versions_(versions) {}
|
||||
bool operator < (const struct BrokenTest& test) const {
|
||||
return strcmp(test_name_.c_str(), test.test_name_.c_str()) < 0;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -170,8 +170,8 @@ TEST(GraphTransformationTests, ConstantFoldingSubgraph) {
|
|||
GraphProto subgraph;
|
||||
create_subgraph(subgraph);
|
||||
|
||||
if_node.AddAttribute("then_branch", {subgraph});
|
||||
if_node.AddAttribute("else_branch", {subgraph});
|
||||
if_node.AddAttribute("then_branch", subgraph);
|
||||
if_node.AddAttribute("else_branch", subgraph);
|
||||
|
||||
auto status = graph.Resolve();
|
||||
ASSERT_TRUE(status.IsOK()) << status;
|
||||
|
|
@ -614,7 +614,7 @@ TEST(GraphTransformationTests, GeluFusionTest) {
|
|||
Graph& graph = p_model->MainGraph();
|
||||
|
||||
onnxruntime::GraphTransformerManager graph_transformation_mgr{5};
|
||||
graph_transformation_mgr.Register(std::make_unique<GeluFusion>(), TransformerLevel::Level2);
|
||||
graph_transformation_mgr.Register(onnxruntime::make_unique<GeluFusion>(), TransformerLevel::Level2);
|
||||
auto ret = graph_transformation_mgr.ApplyTransformers(graph, TransformerLevel::Level2);
|
||||
ASSERT_TRUE(ret.IsOK());
|
||||
|
||||
|
|
|
|||
|
|
@ -97,8 +97,8 @@ class IfOpTester : public OpTester {
|
|||
|
||||
auto then_proto = CreateSubgraph(true, options_);
|
||||
auto else_proto = CreateSubgraph(false, options_);
|
||||
if_node.AddAttribute("then_branch", {then_proto});
|
||||
if_node.AddAttribute("else_branch", {else_proto});
|
||||
if_node.AddAttribute("then_branch", then_proto);
|
||||
if_node.AddAttribute("else_branch", else_proto);
|
||||
}
|
||||
|
||||
// add Identity node so if_graph_input_0 comes from graph inputs
|
||||
|
|
|
|||
|
|
@ -75,7 +75,7 @@ class LoopOpTester : public OpTester {
|
|||
auto& loop_node = graph.AddNode("loop", "Loop", "Loop node", graph_input_defs, graph_output_defs);
|
||||
|
||||
auto body = create_subgraph_(options_);
|
||||
loop_node.AddAttribute("body", {body});
|
||||
loop_node.AddAttribute("body", body);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -33,11 +33,11 @@ TEST(MathOpTest, Add_float) {
|
|||
test.AddInput<float>("A", dims,
|
||||
{1.0f, 2.0f, -1.0f,
|
||||
0.0f, 1.5f, -100.0f,
|
||||
-5.4f, 9.3f, -10'000.0f});
|
||||
-5.4f, 9.3f, -10000.0f});
|
||||
test.AddInput<float>("B", dims,
|
||||
{-1.0f, 4.4f, 432.3f,
|
||||
0.0f, 3.5f, 64.0f,
|
||||
-5.4f, 9.3f, 10'000.0f});
|
||||
-5.4f, 9.3f, 10000.0f});
|
||||
test.AddOutput<float>("C", dims,
|
||||
{0.0f, 6.4f, 431.3f,
|
||||
0.0f, 5.0f, -36.0f,
|
||||
|
|
@ -56,11 +56,11 @@ TEST(MathOpTest, Add_double) {
|
|||
test.AddInput<double>("A", dims,
|
||||
{1.0, 2.0, -1.0,
|
||||
0.0, 1.5, -100.0,
|
||||
-5.4, 9.3, -10'000.0});
|
||||
-5.4, 9.3, -10000.0});
|
||||
test.AddInput<double>("B", dims,
|
||||
{-1.0, 4.4, 432.3,
|
||||
0.0, 3.5, 64.0,
|
||||
-5.4, 9.3, 10'000.0});
|
||||
-5.4, 9.3, 10000.0});
|
||||
test.AddOutput<double>("C", dims,
|
||||
{0.0, 6.4, 431.3,
|
||||
0.0, 5.0, -36.0,
|
||||
|
|
@ -287,15 +287,15 @@ TEST(MathOpTest, Sub) {
|
|||
test.AddInput<float>("A", dims,
|
||||
{1.0f, 2.0f, -1.0f,
|
||||
0.0f, 1.5f, -100.0f,
|
||||
-5.4f, 9.3f, -10'000.0f});
|
||||
-5.4f, 9.3f, -10000.0f});
|
||||
test.AddInput<float>("B", dims,
|
||||
{-1.0f, 4.4f, 432.3f,
|
||||
0.0f, 3.5f, 64.0f,
|
||||
-5.4f, 9.3f, 10'000.0f});
|
||||
-5.4f, 9.3f, 10000.0f});
|
||||
test.AddOutput<float>("C", dims,
|
||||
{2.0f, -2.4f, -433.3f,
|
||||
0.0f, -2.0f, -164.0f,
|
||||
0.0f, 0.0f, -20'000.0f});
|
||||
0.0f, 0.0f, -20000.0f});
|
||||
test.Run();
|
||||
}
|
||||
|
||||
|
|
@ -305,12 +305,12 @@ TEST(MathOpTest, Sub_Broadcast_Scalar) {
|
|||
test.AddInput<float>("A", dims,
|
||||
{1.0f, 2.0f, -1.0f,
|
||||
0.0f, 1.5f, -100.0f,
|
||||
-5.4f, 9.3f, -10'000.0f});
|
||||
-5.4f, 9.3f, -10000.0f});
|
||||
test.AddInput<float>("B", {}, {5.0f});
|
||||
test.AddOutput<float>("C", dims,
|
||||
{-4.0f, -3.0f, -6.0f,
|
||||
-5.0f, -3.5f, -105.0f,
|
||||
-10.4f, 4.3f, -10'005.0f});
|
||||
-10.4f, 4.3f, -10005.0f});
|
||||
test.Run();
|
||||
}
|
||||
|
||||
|
|
@ -336,15 +336,15 @@ TEST(MathOpTest, Mul) {
|
|||
test.AddInput<float>("A", dims,
|
||||
{1.0f, 2.0f, -1.0f,
|
||||
0.0f, 1.5f, -100.0f, -5.4f,
|
||||
9.30f, -10'000.0f});
|
||||
9.30f, -10000.0f});
|
||||
test.AddInput<float>("B", dims,
|
||||
{-1.0f, 4.4f, 432.3f,
|
||||
0.0f, 3.5f, 64.0f, -5.4f,
|
||||
9.30f, 10'000.0f});
|
||||
9.30f, 10000.0f});
|
||||
test.AddOutput<float>("C", dims,
|
||||
{-1.0f, 8.8f, -432.3f,
|
||||
0.0f, 5.25f, -6'400.0f,
|
||||
29.16f, 86.49f, -100'000'000.0f});
|
||||
0.0f, 5.25f, -6400.0f,
|
||||
29.16f, 86.49f, -100000000.0f});
|
||||
|
||||
#if defined(OPENVINO_CONFIG_MYRIAD) || defined(OPENVINO_CONFIG_GPU_FP16) || defined(OPENVINO_CONFIG_VAD_M)
|
||||
test.Run(OpTester::ExpectResult::kExpectSuccess, "", {kOpenVINOExecutionProvider}); //OpenVINO: Disabled due to accuracy issues for MYRIAD FP16
|
||||
|
|
@ -373,10 +373,10 @@ TEST(MathOpTest, Div) {
|
|||
OpTester test("Div");
|
||||
std::vector<int64_t> dims{2, 3};
|
||||
test.AddInput<float>("A", dims,
|
||||
{1'000.0f, 1.0f, 6.0f,
|
||||
{1000.0f, 1.0f, 6.0f,
|
||||
0.0f, -10.0f, -1.0f});
|
||||
test.AddInput<float>("B", dims,
|
||||
{1'000.0f, 2.0f, 3.0f,
|
||||
{1000.0f, 2.0f, 3.0f,
|
||||
1.0f, -1.0f, 4.0f});
|
||||
test.AddOutput<float>("C", dims,
|
||||
{1.0f, 0.5f, 2.0f,
|
||||
|
|
@ -596,7 +596,7 @@ TEST(MathOpTest, Sum_6) {
|
|||
test.AddInput<float>("data_0", dims,
|
||||
{1.0f, 0.0f, 1.0f,
|
||||
-1.0f, 1.1f, -100.0f,
|
||||
-5.4f, 0.01f, -10'000.0f});
|
||||
-5.4f, 0.01f, -10000.0f});
|
||||
test.AddInput<float>("data_1", dims,
|
||||
{1.0f, 0.0f, 2.0f,
|
||||
-2.0f, 2.2f, 64.0f,
|
||||
|
|
@ -604,7 +604,7 @@ TEST(MathOpTest, Sum_6) {
|
|||
test.AddInput<float>("data_3", dims,
|
||||
{1.0f, 0.0f, 3.0f,
|
||||
-3.0f, 3.3f, 64.0f,
|
||||
5.4f, 0.03f, 10'000.0f});
|
||||
5.4f, 0.03f, 10000.0f});
|
||||
test.AddOutput<float>("sum", dims,
|
||||
{3.0f, 0.0f, 6.0f,
|
||||
-6.0f, 6.6f, 28.0f,
|
||||
|
|
@ -684,7 +684,7 @@ TEST(MathOpTest, Min_6) {
|
|||
test.AddInput<float>("data_0", dims,
|
||||
{1.0f, 0.0f, 1.0f,
|
||||
-1.0f, 1.1f, -100.0f,
|
||||
-5.4f, 0.01f, -10'000.0f});
|
||||
-5.4f, 0.01f, -10000.0f});
|
||||
test.AddInput<float>("data_1", dims,
|
||||
{1.0f, 0.0f, 2.0f,
|
||||
-2.0f, 2.2f, 64.0f,
|
||||
|
|
@ -692,11 +692,11 @@ TEST(MathOpTest, Min_6) {
|
|||
test.AddInput<float>("data_3", dims,
|
||||
{1.0f, 0.0f, 3.0f,
|
||||
-3.0f, 3.3f, 64.0f,
|
||||
5.4f, 0.03f, 10'000.0f});
|
||||
5.4f, 0.03f, 10000.0f});
|
||||
test.AddOutput<float>("sum", dims,
|
||||
{1.0f, 0.0f, 1.0f,
|
||||
-3.0f, 1.1f, -100.0f,
|
||||
-5.4f, 0.01f, -10'000.0f});
|
||||
-5.4f, 0.01f, -10000.0f});
|
||||
test.Run();
|
||||
}
|
||||
|
||||
|
|
@ -706,7 +706,7 @@ TEST(MathOpTest, Min_8) {
|
|||
test.AddInput<float>("data_0", dims,
|
||||
{1.0f, 0.0f, 1.0f,
|
||||
-1.0f, 1.1f, -100.0f,
|
||||
-5.4f, 0.01f, -10'000.0f});
|
||||
-5.4f, 0.01f, -10000.0f});
|
||||
test.AddInput<float>("data_1", dims,
|
||||
{1.0f, 0.0f, 2.0f,
|
||||
-2.0f, 2.2f, 64.0f,
|
||||
|
|
@ -714,11 +714,11 @@ TEST(MathOpTest, Min_8) {
|
|||
test.AddInput<float>("data_3", dims,
|
||||
{1.0f, 0.0f, 3.0f,
|
||||
-3.0f, 3.3f, 64.0f,
|
||||
5.4f, 0.03f, 10'000.0f});
|
||||
5.4f, 0.03f, 10000.0f});
|
||||
test.AddOutput<float>("min", dims,
|
||||
{1.0f, 0.0f, 1.0f,
|
||||
-3.0f, 1.1f, -100.0f,
|
||||
-5.4f, 0.01f, -10'000.0f});
|
||||
-5.4f, 0.01f, -10000.0f});
|
||||
test.Run();
|
||||
}
|
||||
|
||||
|
|
@ -728,7 +728,7 @@ TEST(MathOpTest, Max_6) {
|
|||
test.AddInput<float>("data_0", dims,
|
||||
{1.0f, 0.0f, 1.0f,
|
||||
-1.0f, 1.1f, -100.0f,
|
||||
-5.4f, 0.01f, -10'000.0f});
|
||||
-5.4f, 0.01f, -10000.0f});
|
||||
test.AddInput<float>("data_1", dims,
|
||||
{1.0f, 0.0f, 2.0f,
|
||||
-2.0f, 2.2f, 64.0f,
|
||||
|
|
@ -736,11 +736,11 @@ TEST(MathOpTest, Max_6) {
|
|||
test.AddInput<float>("data_2", dims,
|
||||
{1.0f, 0.0f, 3.0f,
|
||||
-3.0f, 3.3f, 64.0f,
|
||||
5.4f, 0.03f, 10'000.0f});
|
||||
5.4f, 0.03f, 10000.0f});
|
||||
test.AddOutput<float>("max", dims,
|
||||
{1.0f, 0.0f, 3.0f,
|
||||
-1.0f, 3.3f, 64.0f,
|
||||
5.4f, 0.03f, 10'000.0f});
|
||||
5.4f, 0.03f, 10000.0f});
|
||||
test.Run();
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -50,19 +50,25 @@ GenerateSequence(OutputIter out) {
|
|||
}
|
||||
|
||||
template <class T>
|
||||
inline auto to_testable_type(T v) {
|
||||
struct ToTestableType {
|
||||
static T to_type(T v) {
|
||||
return v;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
template <>
|
||||
inline auto to_testable_type(MLFloat16 v) {
|
||||
return math::halfToFloat(v.val);
|
||||
}
|
||||
struct ToTestableType<MLFloat16> {
|
||||
static float to_type(MLFloat16 v) {
|
||||
return math::halfToFloat(v.val);
|
||||
}
|
||||
};
|
||||
|
||||
template <>
|
||||
inline auto to_testable_type(BFloat16 v) {
|
||||
return v.ToFloat();
|
||||
}
|
||||
struct ToTestableType<BFloat16> {
|
||||
inline float to_type(BFloat16 v) {
|
||||
return v.ToFloat();
|
||||
}
|
||||
};
|
||||
|
||||
template <class T, class ForwardIter, class OutputIter>
|
||||
typename std::enable_if<!std::numeric_limits<T>::is_signed &&
|
||||
|
|
@ -70,7 +76,7 @@ typename std::enable_if<!std::numeric_limits<T>::is_signed &&
|
|||
!std::is_same<T, BFloat16>::value>::type
|
||||
TestImpl(ForwardIter first, ForwardIter last, OutputIter out) {
|
||||
std::transform(first, last, out, [](T v) {
|
||||
auto t = to_testable_type<T>(v);
|
||||
auto t = ToTestableType<T>::to_type(v);
|
||||
if (t == 0) {
|
||||
t = 0;
|
||||
} else {
|
||||
|
|
@ -86,7 +92,7 @@ typename std::enable_if<std::numeric_limits<T>::is_signed ||
|
|||
std::is_same<T, BFloat16>::value>::type
|
||||
TestImpl(ForwardIter first, ForwardIter last, OutputIter out) {
|
||||
std::transform(first, last, out, [](T v) {
|
||||
auto t = to_testable_type<T>(v);
|
||||
auto t = ToTestableType<T>::to_type(v);
|
||||
if (t == 0) {
|
||||
t = 0;
|
||||
} else if (t > 0) {
|
||||
|
|
|
|||
|
|
@ -45,7 +45,7 @@ TEST_F(ArrayFeatureExtractorTest, Basic) {
|
|||
TEST_F(ArrayFeatureExtractorTest, HigherDimensionalX) {
|
||||
const std::vector<int64_t> x_dims{2, 3, 4, 5};
|
||||
const int64_t x_size = std::accumulate(
|
||||
x_dims.begin(), x_dims.end(), static_cast<int64_t>(1), std::multiplies<>{});
|
||||
x_dims.begin(), x_dims.end(), static_cast<int64_t>(1), std::multiplies<int64_t>());
|
||||
const std::vector<int32_t> X = [x_size]() {
|
||||
std::vector<int32_t> v(x_size);
|
||||
std::iota(v.begin(), v.end(), 0);
|
||||
|
|
|
|||
|
|
@ -1,7 +1,6 @@
|
|||
// Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
// Licensed under the MIT License.
|
||||
|
||||
#include <codecvt>
|
||||
#include "gtest/gtest.h"
|
||||
#include "test/providers/provider_test_utils.h"
|
||||
|
||||
|
|
|
|||
|
|
@ -109,7 +109,12 @@ struct TTypeProto : ONNX_NAMESPACE::TypeProto {
|
|||
|
||||
// Variable template for ONNX_NAMESPACE::TensorProto_DataTypes, s_type_proto<float>, etc..
|
||||
template <typename T>
|
||||
const TTypeProto<T> s_type_proto;
|
||||
struct TTensorType {
|
||||
static const TTypeProto<T> s_type_proto;
|
||||
};
|
||||
|
||||
template <typename T>
|
||||
const TTypeProto<T> TTensorType<T>::s_type_proto;
|
||||
|
||||
//TypeProto for map<TKey, TVal>
|
||||
template <typename TKey, typename TVal>
|
||||
|
|
@ -122,7 +127,12 @@ struct MTypeProto : ONNX_NAMESPACE::TypeProto {
|
|||
};
|
||||
|
||||
template <typename TKey, typename TVal>
|
||||
const MTypeProto<TKey, TVal> s_map_type_proto;
|
||||
struct MMapType {
|
||||
static const MTypeProto<TKey, TVal> s_map_type_proto;
|
||||
};
|
||||
|
||||
template <typename TKey, typename TVal>
|
||||
const MTypeProto<TKey, TVal> MMapType<TKey, TVal>::s_map_type_proto;
|
||||
|
||||
//TypeProto for vector<map<TKey, TVal>>
|
||||
template <typename TKey, typename TVal>
|
||||
|
|
@ -136,7 +146,12 @@ struct VectorOfMapTypeProto : ONNX_NAMESPACE::TypeProto {
|
|||
};
|
||||
|
||||
template <typename TKey, typename TVal>
|
||||
const VectorOfMapTypeProto<TKey, TVal> s_vec_map_type_proto;
|
||||
struct VectorOfMapType {
|
||||
static const VectorOfMapTypeProto<TKey, TVal> s_vec_map_type_proto;
|
||||
};
|
||||
|
||||
template <typename TKey, typename TVal>
|
||||
const VectorOfMapTypeProto<TKey, TVal> VectorOfMapType<TKey, TVal>::s_vec_map_type_proto;
|
||||
|
||||
// To use OpTester:
|
||||
// 1. Create one with the op name
|
||||
|
|
@ -185,7 +200,7 @@ class OpTester {
|
|||
OrtValue value;
|
||||
value.Init(ptr.get(), mltype, mltype->GetDeleteFunc());
|
||||
ptr.release();
|
||||
input_data_.push_back({{name, mltype->GetTypeProto()}, value, optional<float>(), optional<float>()});
|
||||
input_data_.push_back(Data(NodeArg(name, mltype->GetTypeProto()), std::move(value), optional<float>(), optional<float>()));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
|
|
@ -196,10 +211,9 @@ class OpTester {
|
|||
OrtValue value;
|
||||
value.Init(ptr.get(), mltype, mltype->GetDeleteFunc());
|
||||
ptr.release();
|
||||
input_data_.push_back({{name, mltype->GetTypeProto()}, value, optional<float>(), optional<float>()});
|
||||
input_data_.push_back(Data(NodeArg(name, mltype->GetTypeProto()), std::move(value), optional<float>(), optional<float>()));
|
||||
}
|
||||
|
||||
|
||||
template <typename TKey, typename TVal>
|
||||
void AddInput(const char* name, const std::map<TKey, TVal>& val) {
|
||||
std::unique_ptr<std::map<TKey, TVal>> ptr = onnxruntime::make_unique<std::map<TKey, TVal>>(val);
|
||||
|
|
@ -207,13 +221,13 @@ class OpTester {
|
|||
value.Init(ptr.release(),
|
||||
DataTypeImpl::GetType<std::map<TKey, TVal>>(),
|
||||
DataTypeImpl::GetType<std::map<TKey, TVal>>()->GetDeleteFunc());
|
||||
input_data_.push_back({{name, &s_map_type_proto<TKey, TVal>}, value, optional<float>(), optional<float>()});
|
||||
input_data_.push_back(Data(NodeArg(name, &MMapType<TKey, TVal>::s_map_type_proto), std::move(value), optional<float>(), optional<float>()));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
void AddMissingOptionalInput() {
|
||||
std::string name; // empty == input doesn't exist
|
||||
input_data_.push_back({{name, &s_type_proto<T>}, {}, optional<float>(), optional<float>()});
|
||||
input_data_.push_back(Data(NodeArg(name, &TTensorType<T>::s_type_proto), OrtValue(), optional<float>(), optional<float>()));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
|
|
@ -229,7 +243,7 @@ class OpTester {
|
|||
template <typename T>
|
||||
void AddMissingOptionalOutput() {
|
||||
std::string name; // empty == input doesn't exist
|
||||
output_data_.push_back({{name, &s_type_proto<T>}, {}, optional<float>(), optional<float>()});
|
||||
output_data_.push_back(Data(NodeArg(name, &TTensorType<T>::s_type_proto), OrtValue(), optional<float>(), optional<float>()));
|
||||
}
|
||||
|
||||
// Add other registered types, possibly experimental
|
||||
|
|
@ -241,7 +255,7 @@ class OpTester {
|
|||
OrtValue value;
|
||||
value.Init(ptr.get(), mltype, mltype->GetDeleteFunc());
|
||||
ptr.release();
|
||||
output_data_.push_back({{name, mltype->GetTypeProto()}, value, optional<float>(), optional<float>()});
|
||||
output_data_.push_back(Data(NodeArg(name, mltype->GetTypeProto()), std::move(value), optional<float>(), optional<float>()));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
|
|
@ -252,7 +266,7 @@ class OpTester {
|
|||
OrtValue value;
|
||||
value.Init(ptr.get(), mltype, mltype->GetDeleteFunc());
|
||||
ptr.release();
|
||||
output_data_.push_back({{name, mltype->GetTypeProto()}, value, optional<float>(), optional<float>()});
|
||||
output_data_.push_back(Data(NodeArg(name, mltype->GetTypeProto()), std::move(value), optional<float>(), optional<float>()));
|
||||
}
|
||||
|
||||
// Add non tensor output
|
||||
|
|
@ -263,7 +277,7 @@ class OpTester {
|
|||
ml_value.Init(ptr.release(),
|
||||
DataTypeImpl::GetType<std::vector<std::map<TKey, TVal>>>(),
|
||||
DataTypeImpl::GetType<std::vector<std::map<TKey, TVal>>>()->GetDeleteFunc());
|
||||
output_data_.push_back({{name, &s_vec_map_type_proto<TKey, TVal>}, ml_value, optional<float>(), optional<float>()});
|
||||
output_data_.push_back(Data(NodeArg(name, &VectorOfMapType<TKey, TVal>::s_vec_map_type_proto), std::move(ml_value), optional<float>(), optional<float>()));
|
||||
}
|
||||
|
||||
void AddCustomOpRegistry(std::shared_ptr<CustomRegistry> registry) {
|
||||
|
|
@ -304,6 +318,10 @@ class OpTester {
|
|||
OrtValue data_;
|
||||
optional<float> relative_error_;
|
||||
optional<float> absolute_error_;
|
||||
Data(onnxruntime::NodeArg&& def, OrtValue&& data, optional<float>&& rel, optional<float>&& abs) :
|
||||
def_(std::move(def)), data_(std::move(data)), relative_error_(std::move(rel)), absolute_error_(abs) {}
|
||||
Data(Data&&) = default;
|
||||
Data& operator=(Data&&) = default;
|
||||
};
|
||||
|
||||
protected:
|
||||
|
|
@ -337,8 +355,8 @@ class OpTester {
|
|||
|
||||
auto allocator = test::AllocatorManager::Instance().GetAllocator(CPU);
|
||||
auto p_tensor = onnxruntime::make_unique<Tensor>(DataTypeImpl::GetType<T>(),
|
||||
shape,
|
||||
allocator);
|
||||
shape,
|
||||
allocator);
|
||||
|
||||
auto* data_ptr = p_tensor->template MutableData<T>();
|
||||
for (int64_t i = 0; i < values_count; i++) {
|
||||
|
|
@ -354,7 +372,7 @@ class OpTester {
|
|||
TTypeProto<T> type_proto(add_shape_to_tensor_data_ ? &dims_for_proto : nullptr);
|
||||
OrtValue value;
|
||||
value.Init(p_tensor.release(), DataTypeImpl::GetType<Tensor>(), DataTypeImpl::GetType<Tensor>()->GetDeleteFunc());
|
||||
data.push_back({{name, &type_proto}, value, optional<float>(), optional<float>()});
|
||||
data.push_back(Data(NodeArg(name, &type_proto), std::move(value), optional<float>(), optional<float>()));
|
||||
if (is_initializer)
|
||||
initializer_index_.push_back(data.size() - 1);
|
||||
} catch (const std::exception& ex) {
|
||||
|
|
|
|||
Loading…
Reference in a new issue