GPU errors won't go silently, so that we can analyze and fix them.
This commit is contained in:
1 parent
31e95e5a8b
commit
48127845b5
1 file changed
+21
-11
@@ -7,6 +7,7 @@ using System.Numerics;
|
|||||||
using PerfectNumbers.Core;
|
using PerfectNumbers.Core;
|
||||||
using System.Runtime.InteropServices;
|
using System.Runtime.InteropServices;
|
||||||
using System.Runtime.CompilerServices;
|
using System.Runtime.CompilerServices;
|
||||||
|
using ILGPU.Runtime.OpenCL;
|
||||||
namespace PerfectNumbers.Core.Gpu;
|
namespace PerfectNumbers.Core.Gpu;
|
||||||
|
|
||||||
internal enum GpuPow2ModStatus
|
internal enum GpuPow2ModStatus
|
||||||
@@ -905,20 +906,18 @@ internal static partial class PrimeOrderGpuHeuristics
|
|||||||
try
|
try
|
||||||
{
|
{
|
||||||
var lease = GpuKernelPool.GetKernel(useGpuOrder: true);
|
var lease = GpuKernelPool.GetKernel(useGpuOrder: true);
|
||||||
try
|
var execution = lease.EnterExecutionScope();
|
||||||
{
|
|
||||||
using var execution = lease.EnterExecutionScope();
|
|
||||||
Accelerator accelerator = lease.Accelerator;
|
Accelerator accelerator = lease.Accelerator;
|
||||||
AcceleratorStream stream = lease.Stream;
|
AcceleratorStream stream = lease.Stream;
|
||||||
|
|
||||||
var kernel = GetPartialFactorKernel(accelerator);
|
var kernel = GetPartialFactorKernel(accelerator);
|
||||||
SmallPrimeDeviceCache cache = GetSmallPrimeDeviceCache(accelerator);
|
SmallPrimeDeviceCache cache = GetSmallPrimeDeviceCache(accelerator);
|
||||||
|
|
||||||
using var factorBuffer = accelerator.Allocate1D<ulong>(primeTargets.Length);
|
var factorBuffer = accelerator.Allocate1D<ulong>(primeTargets.Length);
|
||||||
using var exponentBuffer = accelerator.Allocate1D<int>(exponentTargets.Length);
|
var exponentBuffer = accelerator.Allocate1D<int>(exponentTargets.Length);
|
||||||
using var countBuffer = accelerator.Allocate1D<int>(1);
|
var countBuffer = accelerator.Allocate1D<int>(1);
|
||||||
using var remainingBuffer = accelerator.Allocate1D<ulong>(1);
|
var remainingBuffer = accelerator.Allocate1D<ulong>(1);
|
||||||
using var fullyFactoredBuffer = accelerator.Allocate1D<byte>(1);
|
var fullyFactoredBuffer = accelerator.Allocate1D<byte>(1);
|
||||||
|
|
||||||
factorBuffer.MemSetToZero();
|
factorBuffer.MemSetToZero();
|
||||||
exponentBuffer.MemSetToZero();
|
exponentBuffer.MemSetToZero();
|
||||||
@@ -953,15 +952,26 @@ internal static partial class PrimeOrderGpuHeuristics
|
|||||||
fullyFactoredBuffer.View.CopyToCPU(ref fullyFactoredFlag, 1);
|
fullyFactoredBuffer.View.CopyToCPU(ref fullyFactoredFlag, 1);
|
||||||
fullyFactored = fullyFactoredFlag != 0;
|
fullyFactored = fullyFactoredFlag != 0;
|
||||||
|
|
||||||
|
factorBuffer.Dispose();
|
||||||
|
exponentBuffer.Dispose();
|
||||||
|
countBuffer.Dispose();
|
||||||
|
remainingBuffer.Dispose();
|
||||||
|
fullyFactoredBuffer.Dispose();
|
||||||
|
execution.Dispose();
|
||||||
|
lease.Dispose();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
finally
|
catch (CLException ex)
|
||||||
{
|
{
|
||||||
lease.Dispose();
|
Console.WriteLine($"GPU ERROR ({ex.Error}): {ex.Message}");
|
||||||
}
|
factorCount = 0;
|
||||||
|
remaining = value;
|
||||||
|
fullyFactored = false;
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
catch (Exception ex) when (ex is AcceleratorException or InternalCompilerException or NotSupportedException or InvalidOperationException or AggregateException)
|
catch (Exception ex) when (ex is AcceleratorException or InternalCompilerException or NotSupportedException or InvalidOperationException or AggregateException)
|
||||||
{
|
{
|
||||||
|
Console.WriteLine($"GPU ERROR: {ex.Message}");
|
||||||
factorCount = 0;
|
factorCount = 0;
|
||||||
remaining = value;
|
remaining = value;
|
||||||
fullyFactored = false;
|
fullyFactored = false;
|
||||||
|
|||||||
Reference in new issue
Block a user