Browse Source

Support Native Providers also in .Net 3.5

v3
Christoph Ruegg 9 years ago
parent
commit
7825e7fdb9
  1. 8
      src/Numerics/Numerics-Net35.csproj
  2. 2
      src/Numerics/Providers/Common/Cuda/CudaProvider.cs
  3. 5
      src/Numerics/Providers/Common/Cuda/SafeNativeMethods.cs
  4. 2
      src/Numerics/Providers/Common/Mkl/MklProvider.cs
  5. 5
      src/Numerics/Providers/Common/Mkl/SafeNativeMethods.cs
  6. 8
      src/Numerics/Providers/Common/NativeProviderLoader.cs
  7. 2
      src/Numerics/Providers/Common/OpenBlas/OpenBlasProvider.cs
  8. 5
      src/Numerics/Providers/Common/OpenBlas/SafeNativeMethods.cs
  9. 9
      src/Numerics/Providers/FourierTransform/Mkl/MklFourierTransformProvider.cs
  10. 5
      src/Numerics/Providers/LinearAlgebra/Cuda/CudaLinearAlgebraProvider.Complex.cs
  11. 7
      src/Numerics/Providers/LinearAlgebra/Mkl/MklLinearAlgebraProvider.Complex.cs
  12. 7
      src/Numerics/Providers/LinearAlgebra/Mkl/MklLinearAlgebraProvider.Complex32.cs
  13. 7
      src/Numerics/Providers/LinearAlgebra/Mkl/MklLinearAlgebraProvider.Double.cs
  14. 9
      src/Numerics/Providers/LinearAlgebra/Mkl/MklLinearAlgebraProvider.Single.cs
  15. 5
      src/Numerics/Providers/LinearAlgebra/OpenBlas/OpenBlasLinearAlgebraProvider.Complex.cs
  16. 5
      src/Numerics/Providers/LinearAlgebra/OpenBlas/OpenBlasLinearAlgebraProvider.Complex32.cs
  17. 5
      src/Numerics/Providers/LinearAlgebra/OpenBlas/OpenBlasLinearAlgebraProvider.Double.cs
  18. 5
      src/Numerics/Providers/LinearAlgebra/OpenBlas/OpenBlasLinearAlgebraProvider.Single.cs

8
src/Numerics/Numerics-Net35.csproj

@ -40,7 +40,7 @@
<!-- Conditional Strong Name: NO --> <!-- Conditional Strong Name: NO -->
<DebugType>pdbonly</DebugType> <DebugType>pdbonly</DebugType>
<Optimize>true</Optimize> <Optimize>true</Optimize>
<DefineConstants>TRACE;NET35;NOSYSNUMERICS</DefineConstants> <DefineConstants>TRACE;NET35;NOSYSNUMERICS;NATIVE</DefineConstants>
<ErrorReport>prompt</ErrorReport> <ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel> <WarningLevel>4</WarningLevel>
<CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet> <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
@ -54,7 +54,7 @@
<DebugSymbols>true</DebugSymbols> <DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType> <DebugType>full</DebugType>
<Optimize>false</Optimize> <Optimize>false</Optimize>
<DefineConstants>TRACE;DEBUG;NET35;NOSYSNUMERICS</DefineConstants> <DefineConstants>TRACE;DEBUG;NET35;NOSYSNUMERICS;NATIVE</DefineConstants>
<ErrorReport>prompt</ErrorReport> <ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel> <WarningLevel>4</WarningLevel>
<CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet> <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
@ -69,7 +69,7 @@
<DebugType>pdbonly</DebugType> <DebugType>pdbonly</DebugType>
<PlatformTarget>AnyCPU</PlatformTarget> <PlatformTarget>AnyCPU</PlatformTarget>
<Optimize>true</Optimize> <Optimize>true</Optimize>
<DefineConstants>TRACE;NET35;NOSYSNUMERICS;STRONGNAME</DefineConstants> <DefineConstants>TRACE;NET35;NOSYSNUMERICS;NATIVE;STRONGNAME</DefineConstants>
<ErrorReport>prompt</ErrorReport> <ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel> <WarningLevel>4</WarningLevel>
<CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet> <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
@ -111,4 +111,4 @@
</ItemGroup> </ItemGroup>
</When> </When>
</Choose> </Choose>
</Project> </Project>

2
src/Numerics/Providers/Common/Cuda/CudaProvider.cs

@ -103,7 +103,7 @@ namespace MathNet.Numerics.Providers.Common.Cuda
if (_nativeIA64) parts.Add("IA64"); if (_nativeIA64) parts.Add("IA64");
parts.Add("revision " + _nativeRevision); parts.Add("revision " + _nativeRevision);
return string.Concat("Nvidia CUDA (", string.Join("; ", parts), ")"); return string.Concat("Nvidia CUDA (", string.Join("; ", parts.ToArray()), ")");
} }
} }
} }

5
src/Numerics/Providers/Common/Cuda/SafeNativeMethods.cs

@ -29,13 +29,16 @@
#if NATIVE #if NATIVE
using System; using System;
using System.Numerics;
using System.Runtime.InteropServices; using System.Runtime.InteropServices;
using System.Security; using System.Security;
using MathNet.Numerics.Providers.LinearAlgebra; using MathNet.Numerics.Providers.LinearAlgebra;
namespace MathNet.Numerics.Providers.Common.Cuda namespace MathNet.Numerics.Providers.Common.Cuda
{ {
#if !NOSYSNUMERICS
using Complex = System.Numerics.Complex;
#endif
/// <summary> /// <summary>
/// P/Invoke methods to the native math libraries. /// P/Invoke methods to the native math libraries.
/// </summary> /// </summary>

2
src/Numerics/Providers/Common/Mkl/MklProvider.cs

@ -234,7 +234,7 @@ namespace MathNet.Numerics.Providers.Common.Mkl
: string.Concat("MKL ", _mklVersion.ToString(2), " Update ", _mklVersion.Build)); : string.Concat("MKL ", _mklVersion.ToString(2), " Update ", _mklVersion.Build));
} }
return string.Concat("Intel MKL (", string.Join("; ", parts), ")"); return string.Concat("Intel MKL (", string.Join("; ", parts.ToArray()), ")");
} }
enum MklMemoryRequestMode : int enum MklMemoryRequestMode : int

5
src/Numerics/Providers/Common/Mkl/SafeNativeMethods.cs

@ -29,13 +29,16 @@
#if NATIVE #if NATIVE
using System; using System;
using System.Numerics;
using System.Runtime.InteropServices; using System.Runtime.InteropServices;
using System.Security; using System.Security;
using MathNet.Numerics.Providers.LinearAlgebra; using MathNet.Numerics.Providers.LinearAlgebra;
namespace MathNet.Numerics.Providers.Common.Mkl namespace MathNet.Numerics.Providers.Common.Mkl
{ {
#if !NOSYSNUMERICS
using Complex = System.Numerics.Complex;
#endif
/// <summary> /// <summary>
/// P/Invoke methods to the native math libraries. /// P/Invoke methods to the native math libraries.
/// </summary> /// </summary>

8
src/Numerics/Providers/Common/NativeProviderLoader.cs

@ -79,10 +79,15 @@ namespace MathNet.Numerics.Providers.Common
static string EvaluateArchitectureKey() static string EvaluateArchitectureKey()
{ {
#if NET35
return (IntPtr.Size == 8) ? X64 : X86;
#else
if (IsUnix) if (IsUnix)
{ {
// Only support x86 and amd64 on Unix as there isn't a reliable way to detect the architecture // Only support x86 and amd64 on Unix as there isn't a reliable way to detect the architecture
return Environment.Is64BitProcess ? X64 : X86; return Environment.Is64BitProcess ? X64 : X86;
} }
var architecture = Environment.GetEnvironmentVariable("PROCESSOR_ARCHITECTURE"); var architecture = Environment.GetEnvironmentVariable("PROCESSOR_ARCHITECTURE");
@ -110,6 +115,7 @@ namespace MathNet.Numerics.Providers.Common
// Fallback if unknown // Fallback if unknown
return architecture; return architecture;
#endif
} }
/// <summary> /// <summary>
@ -162,7 +168,7 @@ namespace MathNet.Numerics.Providers.Common
// If we have a know architecture, try the matching subdirectory first // If we have a know architecture, try the matching subdirectory first
var architecture = ArchitectureKey.Value; var architecture = ArchitectureKey.Value;
if (!string.IsNullOrEmpty(architecture) && TryLoadFile(new FileInfo(Path.Combine(directory, architecture, fileName)))) if (!string.IsNullOrEmpty(architecture) && TryLoadFile(new FileInfo(Path.Combine(Path.Combine(directory, architecture), fileName))))
{ {
return true; return true;
} }

2
src/Numerics/Providers/Common/OpenBlas/OpenBlasProvider.cs

@ -117,7 +117,7 @@ namespace MathNet.Numerics.Providers.Common.OpenBlas
if (_nativeARM) parts.Add("ARM"); if (_nativeARM) parts.Add("ARM");
parts.Add("revision " + _nativeRevision); parts.Add("revision " + _nativeRevision);
return string.Concat("OpenBLAS (", string.Join("; ", parts), ")"); return string.Concat("OpenBLAS (", string.Join("; ", parts.ToArray()), ")");
} }
} }
} }

5
src/Numerics/Providers/Common/OpenBlas/SafeNativeMethods.cs

@ -28,7 +28,6 @@
#if NATIVE #if NATIVE
using System.Numerics;
using System.Runtime.InteropServices; using System.Runtime.InteropServices;
using System.Security; using System.Security;
using MathNet.Numerics.Providers.LinearAlgebra; using MathNet.Numerics.Providers.LinearAlgebra;
@ -36,6 +35,10 @@ using MathNet.Numerics.Providers.LinearAlgebra.OpenBlas;
namespace MathNet.Numerics.Providers.Common.OpenBlas namespace MathNet.Numerics.Providers.Common.OpenBlas
{ {
#if !NOSYSNUMERICS
using Complex = System.Numerics.Complex;
#endif
/// <summary> /// <summary>
/// P/Invoke methods to the native math libraries. /// P/Invoke methods to the native math libraries.
/// </summary> /// </summary>

9
src/Numerics/Providers/FourierTransform/Mkl/MklFourierTransformProvider.cs

@ -29,12 +29,15 @@
#if NATIVE #if NATIVE
using System; using System;
using System.Numerics;
using System.Threading; using System.Threading;
using MathNet.Numerics.Providers.Common.Mkl; using MathNet.Numerics.Providers.Common.Mkl;
namespace MathNet.Numerics.Providers.FourierTransform.Mkl namespace MathNet.Numerics.Providers.FourierTransform.Mkl
{ {
#if !NOSYSNUMERICS
using Complex = System.Numerics.Complex;
#endif
public class MklFourierTransformProvider : IFourierTransformProvider, IDisposable public class MklFourierTransformProvider : IFourierTransformProvider, IDisposable
{ {
class Kernel class Kernel
@ -230,7 +233,7 @@ namespace MathNet.Numerics.Providers.FourierTransform.Mkl
{ {
SafeNativeMethods.z_fft_create_multidim(out kernel.Handle, dimensions.Length, dimensions, ForwardScaling(scaling, length), BackwardScaling(scaling, length)); SafeNativeMethods.z_fft_create_multidim(out kernel.Handle, dimensions.Length, dimensions, ForwardScaling(scaling, length), BackwardScaling(scaling, length));
} }
return kernel; return kernel;
} }
@ -406,4 +409,4 @@ namespace MathNet.Numerics.Providers.FourierTransform.Mkl
} }
} }
#endif #endif

5
src/Numerics/Providers/LinearAlgebra/Cuda/CudaLinearAlgebraProvider.Complex.cs

@ -30,13 +30,16 @@
#if NATIVE #if NATIVE
using System; using System;
using System.Numerics;
using System.Security; using System.Security;
using MathNet.Numerics.Properties; using MathNet.Numerics.Properties;
using MathNet.Numerics.Providers.Common.Cuda; using MathNet.Numerics.Providers.Common.Cuda;
namespace MathNet.Numerics.Providers.LinearAlgebra.Cuda namespace MathNet.Numerics.Providers.LinearAlgebra.Cuda
{ {
#if !NOSYSNUMERICS
using Complex = System.Numerics.Complex;
#endif
/// <summary> /// <summary>
/// NVidia's CUDA Toolkit linear algebra provider. /// NVidia's CUDA Toolkit linear algebra provider.
/// </summary> /// </summary>

7
src/Numerics/Providers/LinearAlgebra/Mkl/MklLinearAlgebraProvider.Complex.cs

@ -30,7 +30,6 @@
#if NATIVE #if NATIVE
using System; using System;
using System.Numerics;
using System.Security; using System.Security;
using MathNet.Numerics.LinearAlgebra.Factorization; using MathNet.Numerics.LinearAlgebra.Factorization;
using MathNet.Numerics.Properties; using MathNet.Numerics.Properties;
@ -38,6 +37,10 @@ using MathNet.Numerics.Providers.Common.Mkl;
namespace MathNet.Numerics.Providers.LinearAlgebra.Mkl namespace MathNet.Numerics.Providers.LinearAlgebra.Mkl
{ {
#if !NOSYSNUMERICS
using Complex = System.Numerics.Complex;
#endif
/// <summary> /// <summary>
/// Intel's Math Kernel Library (MKL) linear algebra provider. /// Intel's Math Kernel Library (MKL) linear algebra provider.
/// </summary> /// </summary>
@ -358,7 +361,7 @@ namespace MathNet.Numerics.Providers.LinearAlgebra.Mkl
if (info > 0) if (info > 0)
{ {
throw new SingularUMatrixException(info); throw new SingularUMatrixException(info);
} }
} }
/// <summary> /// <summary>

7
src/Numerics/Providers/LinearAlgebra/Mkl/MklLinearAlgebraProvider.Complex32.cs

@ -30,7 +30,6 @@
#if NATIVE #if NATIVE
using System; using System;
using System.Numerics;
using System.Security; using System.Security;
using MathNet.Numerics.LinearAlgebra.Factorization; using MathNet.Numerics.LinearAlgebra.Factorization;
using MathNet.Numerics.Properties; using MathNet.Numerics.Properties;
@ -38,6 +37,10 @@ using MathNet.Numerics.Providers.Common.Mkl;
namespace MathNet.Numerics.Providers.LinearAlgebra.Mkl namespace MathNet.Numerics.Providers.LinearAlgebra.Mkl
{ {
#if !NOSYSNUMERICS
using Complex = System.Numerics.Complex;
#endif
/// <summary> /// <summary>
/// Intel's Math Kernel Library (MKL) linear algebra provider. /// Intel's Math Kernel Library (MKL) linear algebra provider.
/// </summary> /// </summary>
@ -358,7 +361,7 @@ namespace MathNet.Numerics.Providers.LinearAlgebra.Mkl
if (info > 0) if (info > 0)
{ {
throw new SingularUMatrixException(info); throw new SingularUMatrixException(info);
} }
} }
/// <summary> /// <summary>

7
src/Numerics/Providers/LinearAlgebra/Mkl/MklLinearAlgebraProvider.Double.cs

@ -30,7 +30,6 @@
#if NATIVE #if NATIVE
using System; using System;
using System.Numerics;
using System.Security; using System.Security;
using MathNet.Numerics.LinearAlgebra.Factorization; using MathNet.Numerics.LinearAlgebra.Factorization;
using MathNet.Numerics.Properties; using MathNet.Numerics.Properties;
@ -38,6 +37,10 @@ using MathNet.Numerics.Providers.Common.Mkl;
namespace MathNet.Numerics.Providers.LinearAlgebra.Mkl namespace MathNet.Numerics.Providers.LinearAlgebra.Mkl
{ {
#if !NOSYSNUMERICS
using Complex = System.Numerics.Complex;
#endif
/// <summary> /// <summary>
/// Intel's Math Kernel Library (MKL) linear algebra provider. /// Intel's Math Kernel Library (MKL) linear algebra provider.
/// </summary> /// </summary>
@ -358,7 +361,7 @@ namespace MathNet.Numerics.Providers.LinearAlgebra.Mkl
if (info > 0) if (info > 0)
{ {
throw new SingularUMatrixException(info); throw new SingularUMatrixException(info);
} }
} }
/// <summary> /// <summary>

9
src/Numerics/Providers/LinearAlgebra/Mkl/MklLinearAlgebraProvider.Single.cs

@ -30,7 +30,6 @@
#if NATIVE #if NATIVE
using System; using System;
using System.Numerics;
using System.Security; using System.Security;
using MathNet.Numerics.LinearAlgebra.Factorization; using MathNet.Numerics.LinearAlgebra.Factorization;
using MathNet.Numerics.Properties; using MathNet.Numerics.Properties;
@ -38,6 +37,10 @@ using MathNet.Numerics.Providers.Common.Mkl;
namespace MathNet.Numerics.Providers.LinearAlgebra.Mkl namespace MathNet.Numerics.Providers.LinearAlgebra.Mkl
{ {
#if !NOSYSNUMERICS
using Complex = System.Numerics.Complex;
#endif
/// <summary> /// <summary>
/// Intel's Math Kernel Library (MKL) linear algebra provider. /// Intel's Math Kernel Library (MKL) linear algebra provider.
/// </summary> /// </summary>
@ -358,7 +361,7 @@ namespace MathNet.Numerics.Providers.LinearAlgebra.Mkl
if (info > 0) if (info > 0)
{ {
throw new SingularUMatrixException(info); throw new SingularUMatrixException(info);
} }
} }
/// <summary> /// <summary>
@ -812,7 +815,7 @@ namespace MathNet.Numerics.Providers.LinearAlgebra.Mkl
if (method == QRMethod.Full) if (method == QRMethod.Full)
{ {
var info = SafeNativeMethods.s_qr_solve_factored(rowsA, columnsA, columnsB, r, b, tau, x); var info = SafeNativeMethods.s_qr_solve_factored(rowsA, columnsA, columnsB, r, b, tau, x);
if (info == (int)MklError.MemoryAllocation) if (info == (int)MklError.MemoryAllocation)
{ {
throw new MemoryAllocationException(); throw new MemoryAllocationException();

5
src/Numerics/Providers/LinearAlgebra/OpenBlas/OpenBlasLinearAlgebraProvider.Complex.cs

@ -32,12 +32,15 @@
using MathNet.Numerics.LinearAlgebra.Factorization; using MathNet.Numerics.LinearAlgebra.Factorization;
using MathNet.Numerics.Properties; using MathNet.Numerics.Properties;
using System; using System;
using System.Numerics;
using System.Security; using System.Security;
using MathNet.Numerics.Providers.Common.OpenBlas; using MathNet.Numerics.Providers.Common.OpenBlas;
namespace MathNet.Numerics.Providers.LinearAlgebra.OpenBlas namespace MathNet.Numerics.Providers.LinearAlgebra.OpenBlas
{ {
#if !NOSYSNUMERICS
using Complex = System.Numerics.Complex;
#endif
/// <summary> /// <summary>
/// OpenBLAS linear algebra provider. /// OpenBLAS linear algebra provider.
/// </summary> /// </summary>

5
src/Numerics/Providers/LinearAlgebra/OpenBlas/OpenBlasLinearAlgebraProvider.Complex32.cs

@ -32,12 +32,15 @@
using MathNet.Numerics.LinearAlgebra.Factorization; using MathNet.Numerics.LinearAlgebra.Factorization;
using MathNet.Numerics.Properties; using MathNet.Numerics.Properties;
using System; using System;
using System.Numerics;
using System.Security; using System.Security;
using MathNet.Numerics.Providers.Common.OpenBlas; using MathNet.Numerics.Providers.Common.OpenBlas;
namespace MathNet.Numerics.Providers.LinearAlgebra.OpenBlas namespace MathNet.Numerics.Providers.LinearAlgebra.OpenBlas
{ {
#if !NOSYSNUMERICS
using Complex = System.Numerics.Complex;
#endif
/// <summary> /// <summary>
/// OpenBLAS linear algebra provider. /// OpenBLAS linear algebra provider.
/// </summary> /// </summary>

5
src/Numerics/Providers/LinearAlgebra/OpenBlas/OpenBlasLinearAlgebraProvider.Double.cs

@ -32,12 +32,15 @@
using MathNet.Numerics.LinearAlgebra.Factorization; using MathNet.Numerics.LinearAlgebra.Factorization;
using MathNet.Numerics.Properties; using MathNet.Numerics.Properties;
using System; using System;
using System.Numerics;
using System.Security; using System.Security;
using MathNet.Numerics.Providers.Common.OpenBlas; using MathNet.Numerics.Providers.Common.OpenBlas;
namespace MathNet.Numerics.Providers.LinearAlgebra.OpenBlas namespace MathNet.Numerics.Providers.LinearAlgebra.OpenBlas
{ {
#if !NOSYSNUMERICS
using Complex = System.Numerics.Complex;
#endif
/// <summary> /// <summary>
/// OpenBLAS linear algebra provider. /// OpenBLAS linear algebra provider.
/// </summary> /// </summary>

5
src/Numerics/Providers/LinearAlgebra/OpenBlas/OpenBlasLinearAlgebraProvider.Single.cs

@ -32,12 +32,15 @@
using MathNet.Numerics.LinearAlgebra.Factorization; using MathNet.Numerics.LinearAlgebra.Factorization;
using MathNet.Numerics.Properties; using MathNet.Numerics.Properties;
using System; using System;
using System.Numerics;
using System.Security; using System.Security;
using MathNet.Numerics.Providers.Common.OpenBlas; using MathNet.Numerics.Providers.Common.OpenBlas;
namespace MathNet.Numerics.Providers.LinearAlgebra.OpenBlas namespace MathNet.Numerics.Providers.LinearAlgebra.OpenBlas
{ {
#if !NOSYSNUMERICS
using Complex = System.Numerics.Complex;
#endif
/// <summary> /// <summary>
/// OpenBLAS linear algebra provider. /// OpenBLAS linear algebra provider.
/// </summary> /// </summary>

Loading…
Cancel
Save