diff --git a/winml/lib/Api/LearningModelSession.cpp b/winml/lib/Api/LearningModelSession.cpp index ccfd736cec..41755e95c6 100644 --- a/winml/lib/Api/LearningModelSession.cpp +++ b/winml/lib/Api/LearningModelSession.cpp @@ -138,7 +138,7 @@ void LearningModelSession::Initialize() { model_proto = nullptr; // Initialize the session - session_builder->Initialize(session.get(), cached_execution_provider_); + WINML_THROW_IF_FAILED(session_builder->Initialize(session.get(), cached_execution_provider_)); // Cache the constructed session inference_session_ = session; diff --git a/winml/lib/Api/impl/TensorBase.h b/winml/lib/Api/impl/TensorBase.h index bfdc34e4c1..40ef0e625d 100644 --- a/winml/lib/Api/impl/TensorBase.h +++ b/winml/lib/Api/impl/TensorBase.h @@ -105,6 +105,11 @@ struct TensorBase : TBase { auto provider = session_impl->GetExecutionProvider(); WINML_THROW_IF_FAILED(adapter_->GetProviderMemoryInfo(provider, dml_memory.put())); + auto spSession = context.session.as(); + auto spDevice = spSession->Device().as(); + WINML_THROW_HR_IF_TRUE_MSG(WINML_ERR_INVALID_BINDING, + spDevice->IsCpuDevice(), + "Cannot create GPU tensor on CPU device"); // create the OrtValue as a tensor letting ort know that we own the data buffer auto value = Ort::Value::CreateTensor( dml_memory,