Browse Source

Merge pull request #374 from kjbartel/LazyProvider

Moved initialization of LinearAlgebraProvider to reduce exceptions
netstandard
Christoph Ruegg 11 years ago
parent
commit
e67b89b40d
  1. 75
      src/Numerics/Control.cs

75
src/Numerics/Control.cs

@ -46,6 +46,7 @@ namespace MathNet.Numerics
static int _parallelizeOrder;
static int _parallelizeElements;
static ILinearAlgebraProvider _linearAlgebraProvider;
static readonly object _staticLock = new object();
static Control()
{
@ -64,48 +65,50 @@ namespace MathNet.Numerics
_parallelizeOrder = 64;
_parallelizeElements = 300;
TaskScheduler = TaskScheduler.Default;
}
// Linear Algebra Provider
#if PORTABLE
LinearAlgebraProvider = new ManagedLinearAlgebraProvider();
#else
try
private static void InitializeDefaultLinearAlgebraProvider()
{
lock (_staticLock)
{
var value = Environment.GetEnvironmentVariable(EnvVarLAProvider);
switch (value != null ? value.ToUpperInvariant() : string.Empty)
if (_linearAlgebraProvider == null)
{
#if NATIVE
case "MKL":
UseNativeMKL();
break;
case "CUDA":
UseNativeCUDA();
break;
case "OPENBLAS":
UseNativeOpenBLAS();
break;
default:
if (!TryUseNative())
try
{
var value = Environment.GetEnvironmentVariable(EnvVarLAProvider);
switch (value != null ? value.ToUpperInvariant() : string.Empty)
{
UseManaged();
case "MKL":
UseNativeMKL();
break;
case "CUDA":
UseNativeCUDA();
break;
case "OPENBLAS":
UseNativeOpenBLAS();
break;
default:
if (!TryUseNative())
{
UseManaged();
}
break;
}
break;
#else
default:
}
catch
{
// We don't care about any failures here at all (because "auto")
UseManaged();
break;
}
#else
UseManaged();
#endif
}
}
catch
{
// We don't care about any failures here at all (because "auto")
UseManaged();
}
#endif
}
public static void UseManaged()
@ -261,7 +264,13 @@ namespace MathNet.Numerics
/// <value>The linear algebra provider.</value>
public static ILinearAlgebraProvider LinearAlgebraProvider
{
get { return _linearAlgebraProvider; }
get
{
if (_linearAlgebraProvider == null)
InitializeDefaultLinearAlgebraProvider();
return _linearAlgebraProvider;
}
set
{
value.InitializeVerify();

Loading…
Cancel
Save