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 -->
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<DefineConstants>TRACE;NET35;NOSYSNUMERICS</DefineConstants>
<DefineConstants>TRACE;NET35;NOSYSNUMERICS;NATIVE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
@ -54,7 +54,7 @@
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<DefineConstants>TRACE;DEBUG;NET35;NOSYSNUMERICS</DefineConstants>
<DefineConstants>TRACE;DEBUG;NET35;NOSYSNUMERICS;NATIVE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
@ -69,7 +69,7 @@
<DebugType>pdbonly</DebugType>
<PlatformTarget>AnyCPU</PlatformTarget>
<Optimize>true</Optimize>
<DefineConstants>TRACE;NET35;NOSYSNUMERICS;STRONGNAME</DefineConstants>
<DefineConstants>TRACE;NET35;NOSYSNUMERICS;NATIVE;STRONGNAME</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
@ -111,4 +111,4 @@
</ItemGroup>
</When>
</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");
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
using System;
using System.Numerics;
using System.Runtime.InteropServices;
using System.Security;
using MathNet.Numerics.Providers.LinearAlgebra;
namespace MathNet.Numerics.Providers.Common.Cuda
{
#if !NOSYSNUMERICS
using Complex = System.Numerics.Complex;
#endif
/// <summary>
/// P/Invoke methods to the native math libraries.
/// </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));
}
return string.Concat("Intel MKL (", string.Join("; ", parts), ")");
return string.Concat("Intel MKL (", string.Join("; ", parts.ToArray()), ")");
}
enum MklMemoryRequestMode : int

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

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

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

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

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

@ -117,7 +117,7 @@ namespace MathNet.Numerics.Providers.Common.OpenBlas
if (_nativeARM) parts.Add("ARM");
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
using System.Numerics;
using System.Runtime.InteropServices;
using System.Security;
using MathNet.Numerics.Providers.LinearAlgebra;
@ -36,6 +35,10 @@ using MathNet.Numerics.Providers.LinearAlgebra.OpenBlas;
namespace MathNet.Numerics.Providers.Common.OpenBlas
{
#if !NOSYSNUMERICS
using Complex = System.Numerics.Complex;
#endif
/// <summary>
/// P/Invoke methods to the native math libraries.
/// </summary>

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

@ -29,12 +29,15 @@
#if NATIVE
using System;
using System.Numerics;
using System.Threading;
using MathNet.Numerics.Providers.Common.Mkl;
namespace MathNet.Numerics.Providers.FourierTransform.Mkl
{
#if !NOSYSNUMERICS
using Complex = System.Numerics.Complex;
#endif
public class MklFourierTransformProvider : IFourierTransformProvider, IDisposable
{
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));
}
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
using System;
using System.Numerics;
using System.Security;
using MathNet.Numerics.Properties;
using MathNet.Numerics.Providers.Common.Cuda;
namespace MathNet.Numerics.Providers.LinearAlgebra.Cuda
{
#if !NOSYSNUMERICS
using Complex = System.Numerics.Complex;
#endif
/// <summary>
/// NVidia's CUDA Toolkit linear algebra provider.
/// </summary>

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Loading…
Cancel
Save