/// <summary> /// Queries all the execution providers supported in the native onnxruntime shared library /// </summary> /// <returns>an array of strings that represent execution provider names</returns> public string[] GetAvailableProviders() { IntPtr availableProvidersHandle = IntPtr.Zero; int numProviders; NativeApiStatus.VerifySuccess(NativeMethods.OrtGetAvailableProviders(out availableProvidersHandle, out numProviders)); var availableProviders = new string[numProviders]; try { for (int i = 0; i < numProviders; ++i) { availableProviders[i] = NativeOnnxValueHelper.StringFromNativeUtf8(Marshal.ReadIntPtr(availableProvidersHandle, IntPtr.Size * i)); } } finally { // Looks a bit weird that we might throw in finally(...) // But the native method OrtReleaseAvailableProviders actually doesn't return a failure status // If it does, it is BUG and we would like to propagate that to the user in the form of an exception NativeApiStatus.VerifySuccess(NativeMethods.OrtReleaseAvailableProviders(availableProvidersHandle, numProviders)); } return(availableProviders); }
private static string GetErrorMessage(IntPtr /*(ONNXStatus*)*/ status) { // nativeString belongs to status, no need for separate release IntPtr nativeString = NativeMethods.OrtGetErrorMessage(status); return(NativeOnnxValueHelper.StringFromNativeUtf8(nativeString)); }
internal static NodeMetadata GetMetadataFromTypeInfo(IntPtr typeInfo) { OnnxValueType valueType; { IntPtr valType; NativeApiStatus.VerifySuccess(NativeMethods.OrtGetOnnxTypeFromTypeInfo(typeInfo, out valType)); valueType = (OnnxValueType)valType; } if (valueType != OnnxValueType.ONNX_TYPE_TENSOR && valueType != OnnxValueType.ONNX_TYPE_SPARSETENSOR) { return(new NodeMetadata(valueType, new int[] { }, new string[] { }, typeof(NamedOnnxValue))); } // This should not be released IntPtr tensorInfo; NativeApiStatus.VerifySuccess(NativeMethods.OrtCastTypeInfoToTensorInfo(typeInfo, out tensorInfo)); //(IntPtr)(int)(uint) // Convert the newly introduced OrtTypeInfo* to the older OrtTypeAndShapeInfo* if (tensorInfo == IntPtr.Zero) { return(null); } TensorElementType type; { IntPtr el_type; NativeApiStatus.VerifySuccess(NativeMethods.OrtGetTensorElementType(tensorInfo, out el_type)); type = (TensorElementType)el_type; } Type dotnetType = null; int width = 0; TensorElementTypeConverter.GetTypeAndWidth(type, out dotnetType, out width); UIntPtr numDimensions; NativeApiStatus.VerifySuccess(NativeMethods.OrtGetDimensionsCount(tensorInfo, out numDimensions)); long[] dimensions = new long[(int)numDimensions]; NativeApiStatus.VerifySuccess(NativeMethods.OrtGetDimensions(tensorInfo, dimensions, numDimensions)); int[] intDimensions = new int[(int)numDimensions]; for (var i = 0; i < (long)numDimensions; i++) { intDimensions[i] = (int)dimensions[i]; } IntPtr[] dimensionNamePtrs = new IntPtr[(int)numDimensions]; NativeApiStatus.VerifySuccess( NativeMethods.OrtGetSymbolicDimensions(tensorInfo, dimensionNamePtrs, numDimensions)); string[] symbolicDimensions = new string[(int)numDimensions]; for (var i = 0; i < (int)numDimensions; i++) { symbolicDimensions[i] = NativeOnnxValueHelper.StringFromNativeUtf8(dimensionNamePtrs[i]); } return(new NodeMetadata(valueType, intDimensions, symbolicDimensions, dotnetType)); }
/// <summary> /// Get TensorRT EP provider options /// </summary> /// <returns> return C# UTF-16 encoded string </returns> public string GetOptions() { var allocator = OrtAllocator.DefaultInstance; // Process provider options string IntPtr providerOptions = IntPtr.Zero; NativeApiStatus.VerifySuccess(NativeMethods.OrtGetTensorRTProviderOptionsAsString(handle, allocator.Pointer, out providerOptions)); using (var ortAllocation = new OrtMemoryAllocation(allocator, providerOptions, 0)) { return(NativeOnnxValueHelper.StringFromNativeUtf8(providerOptions)); } }
/// <summary> /// Ends profiling for the session. Returns the profile file name. /// public string EndProfiling() { IntPtr nameHandle = IntPtr.Zero; var allocator = OrtAllocator.DefaultInstance; NativeApiStatus.VerifySuccess(NativeMethods.OrtSessionEndProfiling(_nativeHandle, allocator.Pointer, out nameHandle)); using (var allocation = new OrtMemoryAllocation(allocator, nameHandle, 0)) { return(NativeOnnxValueHelper.StringFromNativeUtf8(nameHandle)); } }
private string GetOverridableInitializerName(ulong index) { string str = null; var allocator = OrtAllocator.DefaultInstance; IntPtr nameHandle = IntPtr.Zero; NativeApiStatus.VerifySuccess(NativeMethods.OrtSessionGetOverridableInitializerName( _nativeHandle, (UIntPtr)index, allocator.Pointer, out nameHandle)); using (var ortAllocation = new OrtMemoryAllocation(allocator, nameHandle, 0)) { str = NativeOnnxValueHelper.StringFromNativeUtf8(nameHandle); } return(str); }