diff --git a/include/onnxruntime/core/session/onnxruntime_c_api.h b/include/onnxruntime/core/session/onnxruntime_c_api.h index 3d3240e938..7f4a84f99c 100644 --- a/include/onnxruntime/core/session/onnxruntime_c_api.h +++ b/include/onnxruntime/core/session/onnxruntime_c_api.h @@ -289,13 +289,13 @@ struct OrtApi { /** * \param out Should be freed by `OrtReleaseEnv` after use */ - ORT_API2_STATUS(CreateEnv, OrtLoggingLevel default_logging_level, _In_ const char* logid, _Outptr_ OrtEnv** out); + ORT_API2_STATUS(CreateEnv, OrtLoggingLevel logging_level, _In_ const char* logid, _Outptr_ OrtEnv** out); /** * \param out Should be freed by `OrtReleaseEnv` after use */ ORT_API2_STATUS(CreateEnvWithCustomLogger, OrtLoggingFunction logging_function, _In_opt_ void* logger_param, - OrtLoggingLevel default_warning_level, _In_ const char* logid, _Outptr_ OrtEnv** out); + OrtLoggingLevel logging_level, _In_ const char* logid, _Outptr_ OrtEnv** out); // Platform telemetry events are on by default since they are lightweight. You can manually turn them off. ORT_API2_STATUS(EnableTelemetryEvents, _In_ const OrtEnv* env); @@ -819,11 +819,9 @@ struct OrtApi { * Use this in conjunction with DisablePerSessionThreads API or else the session will use * its own thread pools. */ - ORT_API2_STATUS(CreateEnvWithGlobalThreadPools, OrtLoggingLevel default_logging_level, _In_ const char* logid, + ORT_API2_STATUS(CreateEnvWithGlobalThreadPools, OrtLoggingLevel logging_level, _In_ const char* logid, _In_ const OrtThreadingOptions* t_options, _Outptr_ OrtEnv** out); - /* TODO: Should there be a version of CreateEnvWithGlobalThreadPools with custom logging function? */ - /* * Calling this API will make the session use the global threadpools shared across sessions. * This API should be used in conjunction with CreateEnvWithGlobalThreadPools API. @@ -1064,6 +1062,16 @@ struct OrtApi { */ ORT_API2_STATUS(AddInitializer, _Inout_ OrtSessionOptions* options, _In_z_ const char* name, _In_ const OrtValue* val); + + /** + * Creates a custom environment with global threadpools and logger that will be shared across sessions. + * Use this in conjunction with DisablePerSessionThreads API or else the session will use + * its own thread pools. + * + * \param out should be freed by `OrtReleaseEnv` after use + */ + ORT_API2_STATUS(CreateEnvWithCustomLoggerAndGlobalThreadPools, OrtLoggingFunction logging_function, _In_opt_ void* logger_param, OrtLoggingLevel logging_level, + _In_ const char* logid, _In_ const struct OrtThreadingOptions* tp_options, _Outptr_ OrtEnv** out); }; /* diff --git a/include/onnxruntime/core/session/onnxruntime_cxx_api.h b/include/onnxruntime/core/session/onnxruntime_cxx_api.h index 1041faa919..e98d87a3a1 100644 --- a/include/onnxruntime/core/session/onnxruntime_cxx_api.h +++ b/include/onnxruntime/core/session/onnxruntime_cxx_api.h @@ -177,9 +177,11 @@ struct ModelMetadata; struct Env : Base { Env(std::nullptr_t) {} - Env(OrtLoggingLevel default_logging_level = ORT_LOGGING_LEVEL_WARNING, _In_ const char* logid = ""); - Env(const OrtThreadingOptions* tp_options, OrtLoggingLevel default_logging_level = ORT_LOGGING_LEVEL_WARNING, _In_ const char* logid = ""); - Env(OrtLoggingLevel default_logging_level, const char* logid, OrtLoggingFunction logging_function, void* logger_param); + Env(OrtLoggingLevel logging_level = ORT_LOGGING_LEVEL_WARNING, _In_ const char* logid = ""); + Env(const OrtThreadingOptions* tp_options, OrtLoggingLevel logging_level = ORT_LOGGING_LEVEL_WARNING, _In_ const char* logid = ""); + Env(OrtLoggingLevel logging_level, const char* logid, OrtLoggingFunction logging_function, void* logger_param); + Env(const OrtThreadingOptions* tp_options, OrtLoggingFunction logging_function, void* logger_param, + OrtLoggingLevel logging_level = ORT_LOGGING_LEVEL_WARNING, _In_ const char* logid = ""); explicit Env(OrtEnv* p) : Base{p} {} Env& EnableTelemetryEvents(); diff --git a/include/onnxruntime/core/session/onnxruntime_cxx_inline.h b/include/onnxruntime/core/session/onnxruntime_cxx_inline.h index 2da83b6b5f..21926ab079 100644 --- a/include/onnxruntime/core/session/onnxruntime_cxx_inline.h +++ b/include/onnxruntime/core/session/onnxruntime_cxx_inline.h @@ -286,18 +286,24 @@ inline void IoBinding::ClearBoundOutputs() { GetApi().ClearBoundOutputs(p_); } -inline Env::Env(OrtLoggingLevel default_warning_level, _In_ const char* logid) { - ThrowOnError(GetApi().CreateEnv(default_warning_level, logid, &p_)); +inline Env::Env(OrtLoggingLevel logging_level, _In_ const char* logid) { + ThrowOnError(GetApi().CreateEnv(logging_level, logid, &p_)); ThrowOnError(GetApi().SetLanguageProjection(p_, OrtLanguageProjection::ORT_PROJECTION_CPLUSPLUS)); } -inline Env::Env(OrtLoggingLevel default_warning_level, const char* logid, OrtLoggingFunction logging_function, void* logger_param) { - ThrowOnError(GetApi().CreateEnvWithCustomLogger(logging_function, logger_param, default_warning_level, logid, &p_)); +inline Env::Env(OrtLoggingLevel logging_level, const char* logid, OrtLoggingFunction logging_function, void* logger_param) { + ThrowOnError(GetApi().CreateEnvWithCustomLogger(logging_function, logger_param, logging_level, logid, &p_)); ThrowOnError(GetApi().SetLanguageProjection(p_, OrtLanguageProjection::ORT_PROJECTION_CPLUSPLUS)); } -inline Env::Env(const OrtThreadingOptions* tp_options, OrtLoggingLevel default_warning_level, _In_ const char* logid) { - ThrowOnError(GetApi().CreateEnvWithGlobalThreadPools(default_warning_level, logid, tp_options, &p_)); +inline Env::Env(const OrtThreadingOptions* tp_options, OrtLoggingLevel logging_level, _In_ const char* logid) { + ThrowOnError(GetApi().CreateEnvWithGlobalThreadPools(logging_level, logid, tp_options, &p_)); + ThrowOnError(GetApi().SetLanguageProjection(p_, OrtLanguageProjection::ORT_PROJECTION_CPLUSPLUS)); +} + +inline Env::Env(const OrtThreadingOptions* tp_options, OrtLoggingFunction logging_function, void* logger_param, + OrtLoggingLevel logging_level, _In_ const char* logid) { + ThrowOnError(GetApi().CreateEnvWithCustomLoggerAndGlobalThreadPools(logging_function, logger_param, logging_level, logid, tp_options, &p_)); ThrowOnError(GetApi().SetLanguageProjection(p_, OrtLanguageProjection::ORT_PROJECTION_CPLUSPLUS)); } diff --git a/onnxruntime/core/session/onnxruntime_c_api.cc b/onnxruntime/core/session/onnxruntime_c_api.cc index 6327c77417..a642318738 100644 --- a/onnxruntime/core/session/onnxruntime_c_api.cc +++ b/onnxruntime/core/session/onnxruntime_c_api.cc @@ -83,30 +83,41 @@ using namespace onnxruntime; auto tensor = v->GetMutable(); ORT_API_STATUS_IMPL(OrtApis::CreateEnvWithCustomLogger, OrtLoggingFunction logging_function, - _In_opt_ void* logger_param, OrtLoggingLevel default_warning_level, _In_ const char* logid, + _In_opt_ void* logger_param, OrtLoggingLevel logging_level, _In_ const char* logid, _Outptr_ OrtEnv** out) { API_IMPL_BEGIN - OrtEnv::LoggingManagerConstructionInfo lm_info{logging_function, logger_param, default_warning_level, logid}; + OrtEnv::LoggingManagerConstructionInfo lm_info{logging_function, logger_param, logging_level, logid}; Status status; *out = OrtEnv::GetInstance(lm_info, status); return ToOrtStatus(status); API_IMPL_END } -ORT_API_STATUS_IMPL(OrtApis::CreateEnv, OrtLoggingLevel default_warning_level, +ORT_API_STATUS_IMPL(OrtApis::CreateEnv, OrtLoggingLevel logging_level, _In_ const char* logid, _Outptr_ OrtEnv** out) { API_IMPL_BEGIN - OrtEnv::LoggingManagerConstructionInfo lm_info{nullptr, nullptr, default_warning_level, logid}; + OrtEnv::LoggingManagerConstructionInfo lm_info{nullptr, nullptr, logging_level, logid}; Status status; *out = OrtEnv::GetInstance(lm_info, status); return ToOrtStatus(status); API_IMPL_END } -ORT_API_STATUS_IMPL(OrtApis::CreateEnvWithGlobalThreadPools, OrtLoggingLevel default_warning_level, +ORT_API_STATUS_IMPL(OrtApis::CreateEnvWithGlobalThreadPools, OrtLoggingLevel logging_level, _In_ const char* logid, _In_ const struct OrtThreadingOptions* tp_options, _Outptr_ OrtEnv** out) { API_IMPL_BEGIN - OrtEnv::LoggingManagerConstructionInfo lm_info{nullptr, nullptr, default_warning_level, logid}; + OrtEnv::LoggingManagerConstructionInfo lm_info{nullptr, nullptr, logging_level, logid}; + Status status; + *out = OrtEnv::GetInstance(lm_info, status, tp_options); + return ToOrtStatus(status); + API_IMPL_END +} + +ORT_API_STATUS_IMPL(OrtApis::CreateEnvWithCustomLoggerAndGlobalThreadPools, OrtLoggingFunction logging_function, _In_opt_ void* logger_param, + OrtLoggingLevel logging_level, _In_ const char* logid, _In_ const struct OrtThreadingOptions* tp_options, + _Outptr_ OrtEnv** out) { + API_IMPL_BEGIN + OrtEnv::LoggingManagerConstructionInfo lm_info{logging_function, logger_param, logging_level, logid}; Status status; *out = OrtEnv::GetInstance(lm_info, status, tp_options); return ToOrtStatus(status); @@ -2016,6 +2027,7 @@ static constexpr OrtApi ort_api_1_to_6 = { // Version 6 - In development, feel free to add/remove/rearrange here &OrtApis::AddInitializer, + &OrtApis::CreateEnvWithCustomLoggerAndGlobalThreadPools, }; // Assert to do a limited check to ensure Version 1 of OrtApi never changes (will detect an addition or deletion but not if they cancel out each other) diff --git a/onnxruntime/core/session/ort_apis.h b/onnxruntime/core/session/ort_apis.h index 15ccfef3db..84f9eb2fe3 100644 --- a/onnxruntime/core/session/ort_apis.h +++ b/onnxruntime/core/session/ort_apis.h @@ -26,9 +26,16 @@ _Check_return_ _Ret_notnull_ OrtStatus* ORT_API_CALL CreateStatus(OrtErrorCode c OrtErrorCode ORT_API_CALL GetErrorCode(_In_ const OrtStatus* status) NO_EXCEPTION ORT_ALL_ARGS_NONNULL; const char* ORT_API_CALL GetErrorMessage(_In_ const OrtStatus* status) NO_EXCEPTION ORT_ALL_ARGS_NONNULL; -ORT_API_STATUS_IMPL(CreateEnv, OrtLoggingLevel default_logging_level, _In_ const char* logid, _Outptr_ OrtEnv** out) +ORT_API_STATUS_IMPL(CreateEnv, OrtLoggingLevel logging_level, _In_ const char* logid, _Outptr_ OrtEnv** out) ORT_ALL_ARGS_NONNULL; -ORT_API_STATUS_IMPL(CreateEnvWithCustomLogger, OrtLoggingFunction logging_function, _In_opt_ void* logger_param, OrtLoggingLevel default_warning_level, _In_ const char* logid, _Outptr_ OrtEnv** out); +ORT_API_STATUS_IMPL(CreateEnvWithCustomLogger, OrtLoggingFunction logging_function, _In_opt_ void* logger_param, OrtLoggingLevel logging_level, _In_ const char* logid, _Outptr_ OrtEnv** out); +ORT_API_STATUS_IMPL(CreateEnvWithGlobalThreadPools, OrtLoggingLevel logging_level, _In_ const char* logid, + _In_ const struct OrtThreadingOptions* t_options, _Outptr_ OrtEnv** out) +ORT_ALL_ARGS_NONNULL; +ORT_API_STATUS_IMPL(CreateEnvWithCustomLoggerAndGlobalThreadPools, OrtLoggingFunction logging_function, _In_opt_ void* logger_param, OrtLoggingLevel logging_level, + _In_ const char* logid, _In_ const struct OrtThreadingOptions* tp_options, _Outptr_ OrtEnv** out) +ORT_ALL_ARGS_NONNULL; + ORT_API_STATUS_IMPL(EnableTelemetryEvents, _In_ const OrtEnv* env); ORT_API_STATUS_IMPL(DisableTelemetryEvents, _In_ const OrtEnv* env); @@ -187,10 +194,6 @@ ORT_API_STATUS_IMPL(GetMapValueType, _In_ const OrtMapTypeInfo* map_type_info, _ // OrtSequenceTypeInfo Accessors ORT_API_STATUS_IMPL(GetSequenceElementType, _In_ const OrtSequenceTypeInfo* sequence_type_info, _Outptr_ OrtTypeInfo** type_info); -ORT_API_STATUS_IMPL(CreateEnvWithGlobalThreadPools, OrtLoggingLevel default_logging_level, _In_ const char* logid, - _In_ const struct OrtThreadingOptions* t_options, _Outptr_ OrtEnv** out) -ORT_ALL_ARGS_NONNULL; - ORT_API_STATUS_IMPL(DisablePerSessionThreads, _In_ OrtSessionOptions* options); ORT_API_STATUS_IMPL(CreateThreadingOptions, _Outptr_ OrtThreadingOptions** out); ORT_API(void, ReleaseThreadingOptions, _Frees_ptr_opt_ OrtThreadingOptions*);