Remove CPU fallbacks when GPU pow2 fails
This commit is contained in:
1 parent
79d821c475
commit
158c51f659
6 files changed
+248
-40
No files matched your search
@@ -4,10 +4,12 @@ using System.Collections.Concurrent;
|
||||
using ILGPU;
|
||||
using ILGPU.Runtime;
|
||||
using System.Numerics;
|
||||
using System.Globalization;
|
||||
using PerfectNumbers.Core;
|
||||
using System.Runtime.InteropServices;
|
||||
using System.Runtime.CompilerServices;
|
||||
using ILGPU.Runtime.OpenCL;
|
||||
|
||||
namespace PerfectNumbers.Core.Gpu;
|
||||
|
||||
internal enum GpuPow2ModStatus
|
||||
@@ -27,6 +29,25 @@ internal static partial class PrimeOrderGpuHeuristics
|
||||
private static readonly ConcurrentDictionary<Accelerator, OrderKernelLauncher> OrderKernelCache = new();
|
||||
private static readonly ConcurrentDictionary<Accelerator, SmallPrimeDeviceCache> SmallPrimeDeviceCaches = new();
|
||||
|
||||
private static void ReportPow2FailureCore(string context, string modulusDescription, GpuPow2ModStatus status)
|
||||
{
|
||||
string message = $"GPU pow2mod failed with status {status} for divisor {modulusDescription} during {context}.";
|
||||
Console.Error.WriteLine(message);
|
||||
throw new InvalidOperationException(message);
|
||||
}
|
||||
|
||||
internal static void ReportPow2Failure(string context, ulong modulus, GpuPow2ModStatus status)
|
||||
{
|
||||
string modulusDescription = modulus.ToString(CultureInfo.InvariantCulture);
|
||||
ReportPow2FailureCore(context, modulusDescription, status);
|
||||
}
|
||||
|
||||
internal static void ReportPow2Failure(string context, UInt128 modulus, GpuPow2ModStatus status)
|
||||
{
|
||||
string modulusDescription = modulus.ToString(CultureInfo.InvariantCulture);
|
||||
ReportPow2FailureCore(context, modulusDescription, status);
|
||||
}
|
||||
|
||||
public readonly struct OrderKernelConfig(ulong previousOrder, byte hasPreviousOrder, uint smallFactorLimit, int maxPowChecks, int mode)
|
||||
{
|
||||
public readonly ulong PreviousOrder = previousOrder;
|
||||
|
||||
Reference in new issue
Block a user