From a5696ca17f33b34843743a0dbd38ee055eca5add Mon Sep 17 00:00:00 2001 From: mlemanczyk Date: Tue, 18 Nov 2025 06:01:58 +0100 Subject: [PATCH] App crash fix related to unassigned value --- .../Accelerators/PrimeOrderCalculatorAccelerator.cs | 11 ++++++++--- PerfectNumbers.Core/Gpu/SmallPrimeFactorGpuTables.cs | 4 ++-- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/PerfectNumbers.Core/Gpu/Accelerators/PrimeOrderCalculatorAccelerator.cs b/PerfectNumbers.Core/Gpu/Accelerators/PrimeOrderCalculatorAccelerator.cs index 1d631ea..c7b933d 100644 --- a/PerfectNumbers.Core/Gpu/Accelerators/PrimeOrderCalculatorAccelerator.cs +++ b/PerfectNumbers.Core/Gpu/Accelerators/PrimeOrderCalculatorAccelerator.cs @@ -129,7 +129,7 @@ public sealed class PrimeOrderCalculatorAccelerator public void EnsureCapacity(int factorsCount, int primeTesterCapacity) { Accelerator accelerator = Accelerator; - + MemoryBuffer1D, Stride1D.Dense> pow2ModEntriesToTestOnDevice = Pow2ModEntriesToTestOnDevice; if (pow2ModEntriesToTestOnDevice.Length < factorsCount) { @@ -225,8 +225,13 @@ public sealed class PrimeOrderCalculatorAccelerator .CreateViews(); var smallPrimeFactorTables = SmallPrimeFactorGpuTables.GetStaticTables(acceleratorIndex); - SmallPrimeFactorPrimes = smallPrimeFactorTables.Primes.View; - SmallPrimeFactorSquares = smallPrimeFactorTables.Squares.View; + + if (smallPrimeFactorTables.HasValue) + { + SmallPrimeFactorGpuTables tables = smallPrimeFactorTables.Value; + SmallPrimeFactorPrimes = tables.Primes.View; + SmallPrimeFactorSquares = tables.Squares.View; + } CheckFactorsKernel = KernelUtil.GetKernel(accelerator.LoadStreamKernel, Stride1D.Dense>, MontgomeryDivisorData, ArrayView1D>(PrimeOrderGpuHeuristics.CheckFactorsKernel)); diff --git a/PerfectNumbers.Core/Gpu/SmallPrimeFactorGpuTables.cs b/PerfectNumbers.Core/Gpu/SmallPrimeFactorGpuTables.cs index db66daf..614ca98 100644 --- a/PerfectNumbers.Core/Gpu/SmallPrimeFactorGpuTables.cs +++ b/PerfectNumbers.Core/Gpu/SmallPrimeFactorGpuTables.cs @@ -7,10 +7,10 @@ public readonly struct SmallPrimeFactorGpuTables { private static readonly Accelerator[] _accelerators = AcceleratorPool.Shared.Accelerators; - private static readonly SmallPrimeFactorGpuTables[] _sharedTables = new SmallPrimeFactorGpuTables[PerfectNumberConstants.RollingAccelerators]; + private static readonly SmallPrimeFactorGpuTables?[] _sharedTables = new SmallPrimeFactorGpuTables?[PerfectNumberConstants.RollingAccelerators]; [MethodImpl(MethodImplOptions.AggressiveInlining)] - internal static SmallPrimeFactorGpuTables GetStaticTables(int acceleratorIndex) => _sharedTables[acceleratorIndex]; + internal static SmallPrimeFactorGpuTables? GetStaticTables(int acceleratorIndex) => _sharedTables[acceleratorIndex]; [MethodImpl(MethodImplOptions.AggressiveInlining)] internal static void WarmUp(int acceleratorIndex, AcceleratorStream stream) => _sharedTables[acceleratorIndex] = new SmallPrimeFactorGpuTables(_accelerators[acceleratorIndex], stream);