diff --git a/src/Simulation/Common/Simulators.Dev.props b/src/Simulation/Common/Simulators.Dev.props index 9abcca669a7..bf304660f95 100644 --- a/src/Simulation/Common/Simulators.Dev.props +++ b/src/Simulation/Common/Simulators.Dev.props @@ -16,6 +16,9 @@ $(QsimDllMac) $(QsimDllLinux) $(QsimDllWindows) + $([MSBuild]::NormalizePath($(NativeBuildPath)/../../osx)) + $([MSBuild]::NormalizePath($(NativeBuildPath)/../../linux)) + $([MSBuild]::NormalizePath($(NativeBuildPath)/../../win10)) @@ -29,6 +32,11 @@ PreserveNewest false + + %(Filename)%(Extension) + PreserveNewest + false + diff --git a/src/Simulation/Native/linux/libomp.so.5 b/src/Simulation/Native/linux/libomp.so similarity index 100% rename from src/Simulation/Native/linux/libomp.so.5 rename to src/Simulation/Native/linux/libomp.so diff --git a/src/Simulation/Simulators/QuantumSimulator/NativeImports.cs b/src/Simulation/Simulators/QuantumSimulator/NativeImports.cs index dd77a4299d0..3562c661487 100644 --- a/src/Simulation/Simulators/QuantumSimulator/NativeImports.cs +++ b/src/Simulation/Simulators/QuantumSimulator/NativeImports.cs @@ -14,6 +14,9 @@ public partial class QuantumSimulator // Preparation\Arbitrary.cs(23,41): error CS0117: 'QuantumSimulator' does not contain a definition for // 'QSIM_DLL_NAME' [D:\a\1\s\submodules\QuantumLibraries\Standard\src\Standard.csproj] + [DllImport("libomp", ExactSpelling = true, CallingConvention = CallingConvention.Cdecl, EntryPoint = "omp_get_num_threads")] + private static extern int OmpGetNumberOfThreadsNative(); + private delegate void IdsCallback(uint id); [DllImport(QSIM_DLL_NAME, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl, EntryPoint = "DumpIds")] private static extern void sim_QubitsIdsNative(uint id, IdsCallback callback); diff --git a/src/Simulation/Simulators/QuantumSimulator/QuantumSimulator.cs b/src/Simulation/Simulators/QuantumSimulator/QuantumSimulator.cs index 58bceb2903f..c012d569b40 100644 --- a/src/Simulation/Simulators/QuantumSimulator/QuantumSimulator.cs +++ b/src/Simulation/Simulators/QuantumSimulator/QuantumSimulator.cs @@ -28,6 +28,14 @@ public QuantumSimulator( randomNumberGeneratorSeed, disableBorrowing) { + if (!RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) + { + // We don't need this value, but explicitly calling an OMP function should trigger the load of libomp + // by .NET from the runtimes folder for the current platform, such that the later library load by the + // simulator does not need to know where to search for it. + var threadCount = OmpGetNumberOfThreadsNative(); + } + Id = InitNative(); // Make sure that the same seed used by the built-in System.Random // instance is also used by the native simulator itself.