From 2ad7d64687502943bdf6b751e890a82b2fd762a2 Mon Sep 17 00:00:00 2001 From: "Stefan J. Wernli" Date: Mon, 10 Jan 2022 18:47:32 -0800 Subject: [PATCH 1/3] Workaround for libomp on Linux, Mac --- .../Simulators/QuantumSimulator/QuantumSimulator.cs | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/Simulation/Simulators/QuantumSimulator/QuantumSimulator.cs b/src/Simulation/Simulators/QuantumSimulator/QuantumSimulator.cs index 2df2bae2bb7..11325e42a5c 100644 --- a/src/Simulation/Simulators/QuantumSimulator/QuantumSimulator.cs +++ b/src/Simulation/Simulators/QuantumSimulator/QuantumSimulator.cs @@ -30,6 +30,9 @@ public partial class QuantumSimulator : SimulatorBase, IQSharpCore, IType1Core, [DllImport(QSIM_DLL_NAME, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl, EntryPoint = "seed")] private static extern void SetSeed(uint id, UInt32 seedValue); + [DllImport("libomp", ExactSpelling = true, CallingConvention = CallingConvention.Cdecl, EntryPoint = "omp_get_num_threads")] + private static extern int OmpGetNumberOfThreads(); + /// /// Creates a an instance of a quantum simulator. /// @@ -45,6 +48,14 @@ public QuantumSimulator( (int?)randomNumberGeneratorSeed ) { + 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 = OmpGetNumberOfThreads(); + } + Id = Init(); // Make sure that the same seed used by the built-in System.Random // instance is also used by the native simulator itself. From 38a9e6fa012ceb2a1db9d1259a8e20dcbba25591 Mon Sep 17 00:00:00 2001 From: "Stefan J. Wernli" Date: Mon, 10 Jan 2022 21:54:33 -0800 Subject: [PATCH 2/3] Try renaming file --- .../Native/linux/{libomp.so.5 => libomp.so} | Bin 1 file changed, 0 insertions(+), 0 deletions(-) rename src/Simulation/Native/linux/{libomp.so.5 => libomp.so} (100%) 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 From 6438724a36da62ea27ad4486897562d52fa0ac9a Mon Sep 17 00:00:00 2001 From: "Stefan J. Wernli" Date: Tue, 11 Jan 2022 10:12:03 -0800 Subject: [PATCH 3/3] Add special case copy for local dev dependencies --- src/Simulation/Common/Simulators.Dev.props | 8 ++++++++ 1 file changed, 8 insertions(+) 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 +