Skip to content

Commit

Permalink
Conditionally export execution provider apis in chsarp (#1724)
Browse files Browse the repository at this point in the history
  • Loading branch information
shahasad authored Sep 9, 2019
1 parent 071a0c2 commit 6a5b117
Show file tree
Hide file tree
Showing 9 changed files with 194 additions and 132 deletions.
26 changes: 25 additions & 1 deletion cmake/onnxruntime_csharp.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,35 @@ else()
set (CSHARP_DEPENDS onnxruntime)
endif()

if (onnxruntime_USE_CUDA)
STRING(APPEND CSHARP_PREPROCESSOR_DEFINES "USE_CUDA,")
endif()

if (onnxruntime_USE_MKLDNN)
STRING(APPEND CSHARP_PREPROCESSOR_DEFINES "USE_MKLDNN,")
endif()

if (onnxruntime_USE_TENSORRT)
STRING(APPEND CSHARP_PREPROCESSOR_DEFINES "USE_TENSORRT,")
endif()

if (onnxruntime_USE_OPENVINO)
STRING(APPEND CSHARP_PREPROCESSOR_DEFINES "USE_OPENVINO,")
endif()

if (onnxruntime_USE_NGRAPH)
STRING(APPEND CSHARP_PREPROCESSOR_DEFINES "USE_NGRAPH,")
endif()

if (onnxruntime_USE_NUPHAR)
STRING(APPEND CSHARP_PREPROCESSOR_DEFINES "USE_NUPHAR,")
endif()

include(CSharpUtilities)

include_external_msproject(${CSHARP_MASTER_TARGET}
${CSHARP_MASTER_PROJECT}
${CSHARP_DEPENDS}
${CSHARP_DEPENDS}
)

# generate Directory.Build.props
Expand Down
8 changes: 8 additions & 0 deletions csharp/Directory.Build.props.in
Original file line number Diff line number Diff line change
Expand Up @@ -4,5 +4,13 @@
<!-- Note: build.py puts the CMake binary directory under an additional directory named for the build
configuration, so we want the parent directory here. -->
<OnnxRuntimeBuildDirectory>@CMAKE_BINARY_DIR@/..</OnnxRuntimeBuildDirectory>

<OnnxRuntimeCsharpRoot>$(MSBuildThisDirectory)</OnnxRuntimeCsharpRoot>
<RestorePackagesPath>$(MSBuildThisFileDirectory)\packages</RestorePackagesPath>
<RestoreConfigFile>$(MSBuildThisFileDirectory)\NuGet.CSharp.config</RestoreConfigFile>
<MSBuildWarningsAsMessages>NU1503</MSBuildWarningsAsMessages>
<RestoreIgnoreFailedSource>true</RestoreIgnoreFailedSource>

<DefineConstants>@CSHARP_PREPROCESSOR_DEFINES@$(DefineConstants)</DefineConstants>
</PropertyGroup>
</Project>
10 changes: 5 additions & 5 deletions csharp/OnnxRuntime.CSharp.proj
Original file line number Diff line number Diff line change
Expand Up @@ -19,25 +19,25 @@ CMake creates a target to this project
<Message Importance="High" Text="Restoring NuGet packages for CSharp projects..." />
<MSBuild Projects="src\Microsoft.ML.OnnxRuntime\Microsoft.ML.OnnxRuntime.csproj"
Targets="Restore"
Properties="Platform=AnyCPU;RestorePackagesPath=$(MSBuildThisFileDirectory)\packages;RestoreConfigFile=$(MSBuildThisFileDirectory)\NuGet.CSharp.config;MSBuildWarningsAsMessages=NU1503;RestoreIgnoreFailedSource=true"
Properties="Platform=AnyCPU"
/>
<MSBuild Projects="sample\Microsoft.ML.OnnxRuntime.InferenceSample\Microsoft.ML.OnnxRuntime.InferenceSample.csproj"
Targets="Restore"
Properties="Platform=AnyCPU;RestorePackagesPath=$(MSBuildThisFileDirectory)\packages;RestoreConfigFile=$(MSBuildThisFileDirectory)\NuGet.CSharp.config;MSBuildWarningsAsMessages=NU1503;RestoreIgnoreFailedSource=true"
Properties="Platform=AnyCPU"
/>
<MSBuild Projects="test\Microsoft.ML.OnnxRuntime.Tests\Microsoft.ML.OnnxRuntime.Tests.csproj"
Targets="Restore"
Properties="RestorePackagesPath=$(MSBuildThisFileDirectory)\packages;RestoreConfigFile=$(MSBuildThisFileDirectory)\NuGet.CSharp.config;MSBuildWarningsAsMessages=NU1503;RestoreIgnoreFailedSource=true"
Properties=""
/>
<MSBuild Projects="tools\Microsoft.ML.OnnxRuntime.PerfTool\Microsoft.ML.OnnxRuntime.PerfTool.csproj"
Targets="Restore"
Properties="Platform=AnyCPU;RestorePackagesPath=$(MSBuildThisFileDirectory)\packages;RestoreConfigFile=$(MSBuildThisFileDirectory)\NuGet.CSharp.config;MSBuildWarningsAsMessages=NU1503;RestoreIgnoreFailedSource=true"
Properties="Platform=AnyCPU"
/>
</Target>

<Target Name="Build">
<Message Importance="High" Text="Building CSharp projects..." />

<MSBuild Projects="src\Microsoft.ML.OnnxRuntime\Microsoft.ML.OnnxRuntime.csproj"
Targets="ObtainPackageVersion;Build"
Properties="Platform=AnyCPU"/>
Expand Down
38 changes: 32 additions & 6 deletions csharp/src/Microsoft.ML.OnnxRuntime/NativeMethods.cs
Original file line number Diff line number Diff line change
Expand Up @@ -175,15 +175,41 @@ IntPtr[] outputValues /* An array of output value pointers. Array must be alloca
[DllImport(nativeLib, CharSet = charSet)]
public static extern IntPtr /*(OrtStatus*)*/ OrtSessionOptionsAppendExecutionProvider_CPU(IntPtr /*(OrtSessionOptions*) */ options, int use_arena);

#if USE_MKLDNN
[DllImport(nativeLib, CharSet = charSet)]
public static extern IntPtr /*(OrtStatus*)*/ OrtSessionOptionsAppendExecutionProvider_Mkldnn(IntPtr /*(OrtSessionOptions*) */ options, int use_arena);
#endif

#if USE_CUDA
[DllImport(nativeLib, CharSet = charSet)]
public static extern IntPtr /*(OrtStatus*)*/ OrtSessionOptionsAppendExecutionProvider_CUDA(IntPtr /*(OrtSessionOptions*) */ options, int device_id);
#endif

#if USE_NGRAPH
[DllImport(nativeLib, CharSet = charSet)]
public static extern IntPtr /*(OrtStatus*)*/ OrtSessionOptionsAppendExecutionProvider_Nuphar(IntPtr /*(OrtSessionOptions*) */ options, int allow_unaligned_buffers, string settings);
public static extern IntPtr /*(OrtStatus*)*/ OrtSessionOptionsAppendExecutionProvider_NGraph(IntPtr /*(OrtSessionOptions*) */ options, string /*(const char*)*/ ng_backend_type);
#endif

#if USE_OPENVINO
[DllImport(nativeLib, CharSet = charSet)]
public static extern IntPtr /*(OrtStatus*)*/ OrtSessionOptionsAppendExecutionProvider_OpenVINO(
IntPtr /*(OrtSessionOptions*)*/ options, string /*(const char*)*/ device_id);
#endif

#if USE_TENSORRT
[DllImport(nativeLib, CharSet = charSet)]
public static extern IntPtr /*(OrtStatus*)*/ OrtSessionOptionsAppendExecutionProvider_Tensorrt(IntPtr /*(OrtSessionOptions*)*/ options, int device_id);
#endif

#if USE_NNAPI
[DllImport(nativeLib, CharSet = charSet)]
public static extern IntPtr /*(OrtStatus*)*/ OrtSessionOptionsAppendExecutionProvider_Nnapi(IntPtr /*(OrtSessionOptions*)*/ options);
#endif

#if USE_NUPHAR
[DllImport(nativeLib, CharSet = charSet)]
public static extern IntPtr /*(OrtStatus*)*/ OrtSessionOptionsAppendExecutionProvider_Nuphar(IntPtr /*(OrtSessionOptions*) */ options, int allow_unaligned_buffers, string settings);
#endif
//[DllImport(nativeLib, CharSet = charSet)]
//public static extern void OrtAddCustomOp(IntPtr /*(OrtSessionOptions*)*/ options, string custom_op_path);

Expand Down Expand Up @@ -218,9 +244,9 @@ IntPtr[] outputValues /* An array of output value pointers. Array must be alloca



#endregion
#endregion

#region Allocator/AllocatorInfo API
#region Allocator/AllocatorInfo API

//TODO: consider exposing them publicly, when allocator API is exposed
public enum AllocatorType
Expand Down Expand Up @@ -273,9 +299,9 @@ public enum MemoryType
[DllImport(nativeLib, CharSet = charSet)]
public static extern IntPtr /*(OrtStatus*)*/OrtAllocatorGetInfo(IntPtr /*(const OrtAllocator*)*/ ptr, out IntPtr /*(const struct OrtMemoryInfo**)*/info);

#endregion Allocator/AllocatorInfo API
#endregion Allocator/AllocatorInfo API

#region Tensor/OnnxValue API
#region Tensor/OnnxValue API

[DllImport(nativeLib, CharSet = charSet)]
public static extern IntPtr /*(OrtStatus*)*/ OrtGetValue(IntPtr /*(OrtValue*)*/ value,
Expand Down Expand Up @@ -377,6 +403,6 @@ public enum MemoryType
[DllImport(nativeLib, CharSet = charSet)]
public static extern void OrtReleaseValue(IntPtr /*(OrtValue*)*/ value);

#endregion
#endregion
} //class NativeMethods
} //namespace
2 changes: 1 addition & 1 deletion csharp/src/Microsoft.ML.OnnxRuntime/RunOptions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ public LogLevel LogVerbosityLevel
/// <summary>
/// Log tag to be used during the run. default = ""
/// </summary>
public string LogTag
public string LogId
{
get
{
Expand Down
75 changes: 64 additions & 11 deletions csharp/src/Microsoft.ML.OnnxRuntime/SessionOptions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ public class SessionOptions : IDisposable
private IntPtr _nativePtr;
private static string[] cudaDelayLoadedLibs = { "cublas64_100.dll", "cudnn64_7.dll" };

#region Constructor and Factory methods
#region Constructor and Factory methods

/// <summary>
/// Constructs an empty SessionOptions
Expand All @@ -37,7 +37,7 @@ public SessionOptions()
NativeApiStatus.VerifySuccess(NativeMethods.OrtCreateSessionOptions(out _nativePtr));
}


#if USE_CUDA
/// <summary>
/// A helper method to constuct a SessionOptions object for CUDA execution
/// </summary>
Expand All @@ -47,7 +47,6 @@ public static SessionOptions MakeSessionOptionWithCudaProvider()
return MakeSessionOptionWithCudaProvider(0);
}


/// <summary>
/// A helper method to constuct a SessionOptions object for CUDA execution
/// </summary>
Expand All @@ -61,7 +60,58 @@ public static SessionOptions MakeSessionOptionWithCudaProvider(int deviceId = 0)
NativeMethods.OrtSessionOptionsAppendExecutionProvider_CPU(options._nativePtr, 1);
return options;
}
#endif
#endregion

#region ExecutionProviderAppends
public void AppendExecutionProvider_CPU(int useArena)
{
NativeApiStatus.VerifySuccess(NativeMethods.OrtSessionOptionsAppendExecutionProvider_CPU(_nativePtr, useArena));
}

#if USE_MKLDNN
public void AppendExecutionProvider_Mkldnn(int useArena)
{
NativeApiStatus.VerifySuccess(NativeMethods.OrtSessionOptionsAppendExecutionProvider_Mkldnn(_nativePtr, useArena));
}
#endif

#if USE_CUDA
public void AppendExecutionProvider_CUDA(int deviceId)
{
NativeApiStatus.VerifySuccess(NativeMethods.OrtSessionOptionsAppendExecutionProvider_CUDA(_nativePtr, deviceId));
}
#endif

#if USE_NGRAPH
public void AppendExecutionProvider_NGraph(string nGraphBackendType)
{
NativeApiStatus.VerifySuccess(NativeMethods.OrtSessionOptionsAppendExecutionProvider_NGraph(_nativePtr, nGraphBackendType));
}
#endif

#if USE_OPENVINO
public void AppendExecutionProvider_OpenVINO(string deviceId)
{
NativeApiStatus.VerifySuccess(NativeMethods.OrtSessionOptionsAppendExecutionProvider_OpenVINO(_nativePtr, deviceId));
}
#endif

#if USE_TENSORRT
public void AppendExecutionProvider_Tensorrt(int deviceId)
{
NativeApiStatus.VerifySuccess(NativeMethods.OrtSessionOptionsAppendExecutionProvider_Tensorrt(_nativePtr, deviceId));
}
#endif

#if USE_NNAPI
public void AppendExecutionProvider_Nnapi()
{
NativeApiStatus.VerifySuccess(NativeMethods.OrtSessionOptionsAppendExecutionProvider_Nnapi(_nativePtr));
}
#endif

#if USE_NUPHAR
/// <summary>
/// A helper method to construct a SessionOptions object for Nuphar execution
/// </summary>
Expand All @@ -73,9 +123,12 @@ public static SessionOptions MakeSessionOptionWithNupharProvider(String settings
NativeMethods.OrtSessionOptionsAppendExecutionProvider_Nuphar(options._nativePtr, 1, settings);
return options;
}

#endregion

public void AppendExecutionProvider_Nuphar(string settings = "")
{
NativeApiStatus.VerifySuccess(OrtSessionOptionsAppendExecutionProvider_Nuphar(options._nativePtr, 1, settings));
}
#endif
#endregion //ExecutionProviderAppends
#region Public Properties

internal IntPtr Handle
Expand Down Expand Up @@ -298,9 +351,9 @@ public GraphOptimizationLevel GraphOptimizationLevel
}
private GraphOptimizationLevel _graphOptimizationLevel = GraphOptimizationLevel.ORT_ENABLE_BASIC;

#endregion
#endregion

#region Private Methods
#region Private Methods


// Declared, but called only if OS = Windows.
Expand Down Expand Up @@ -331,8 +384,8 @@ private static bool CheckCudaExecutionProviderDLLs()
}


#endregion
#region destructors disposers
#endregion
#region destructors disposers

~SessionOptions()
{
Expand All @@ -354,6 +407,6 @@ protected virtual void Dispose(bool disposing)
NativeMethods.OrtReleaseSessionOptions(_nativePtr);
}

#endregion
#endregion
}
}
Loading

0 comments on commit 6a5b117

Please sign in to comment.