Files
even-perfect-numbers-scanner/PerfectNumbers.Core/Gpu/Accelerators/HeuristicCombinedGpuViews.cs
T

66 lines
3.6 KiB
C#

using System.Runtime.CompilerServices;
using ILGPU;
using ILGPU.Runtime;
namespace PerfectNumbers.Core.Gpu.Accelerators;
public readonly struct HeuristicCombinedGpuViews(
ArrayView1D<ulong, Stride1D.Dense> combinedDivisorsEnding1,
ArrayView1D<ulong, Stride1D.Dense> combinedDivisorsEnding3,
ArrayView1D<ulong, Stride1D.Dense> combinedDivisorsEnding7,
ArrayView1D<ulong, Stride1D.Dense> combinedDivisorsEnding9,
ArrayView1D<ulong, Stride1D.Dense> combinedDivisorSquaresEnding1,
ArrayView1D<ulong, Stride1D.Dense> combinedDivisorSquaresEnding3,
ArrayView1D<ulong, Stride1D.Dense> combinedDivisorSquaresEnding7,
ArrayView1D<ulong, Stride1D.Dense> combinedDivisorSquaresEnding9)
{
// public readonly ArrayView1D<ulong, Stride1D.Dense> CombinedDivisorsEnding1 = combinedDivisorsEnding1;
// public readonly ArrayView1D<ulong, Stride1D.Dense> CombinedDivisorsEnding3 = combinedDivisorsEnding3;
// public readonly ArrayView1D<ulong, Stride1D.Dense> CombinedDivisorsEnding7 = combinedDivisorsEnding7;
// public readonly ArrayView1D<ulong, Stride1D.Dense> CombinedDivisorsEnding9 = combinedDivisorsEnding9;
public readonly (ArrayView1D<ulong, Stride1D.Dense>, ArrayView1D<ulong, Stride1D.Dense>) CombinedDivisorsAndSquaresEnding1 = (combinedDivisorsEnding1, combinedDivisorSquaresEnding1);
public readonly (ArrayView1D<ulong, Stride1D.Dense>, ArrayView1D<ulong, Stride1D.Dense>) CombinedDivisorsAndSquaresEnding3 = (combinedDivisorsEnding3, combinedDivisorSquaresEnding3);
public readonly (ArrayView1D<ulong, Stride1D.Dense>, ArrayView1D<ulong, Stride1D.Dense>) CombinedDivisorsAndSquaresEnding7 = (combinedDivisorsEnding7, combinedDivisorSquaresEnding7);
public readonly (ArrayView1D<ulong, Stride1D.Dense>, ArrayView1D<ulong, Stride1D.Dense>) CombinedDivisorsAndSquaresEnding9 = (combinedDivisorsEnding9, combinedDivisorSquaresEnding9);
// public readonly ArrayView1D<ulong, Stride1D.Dense> CombinedDivisorSquaresEnding1 = combinedDivisorSquaresEnding1;
// public readonly ArrayView1D<ulong, Stride1D.Dense> CombinedDivisorSquaresEnding3 = combinedDivisorSquaresEnding3;
// public readonly ArrayView1D<ulong, Stride1D.Dense> CombinedDivisorSquaresEnding7 = combinedDivisorSquaresEnding7;
// public readonly ArrayView1D<ulong, Stride1D.Dense> CombinedDivisorSquaresEnding9 = combinedDivisorSquaresEnding9;
private static readonly (ArrayView1D<ulong, Stride1D.Dense>, ArrayView1D<ulong, Stride1D.Dense>)EmptyCombinedDivisorsAndSquares = (ArrayView1D<ulong, Stride1D.Dense>.Empty, ArrayView1D<ulong, Stride1D.Dense>.Empty);
// [MethodImpl(MethodImplOptions.AggressiveInlining)]
// public ArrayView1D<ulong, Stride1D.Dense> SelectDivisors(byte ending) => ending switch
// {
// 1 => CombinedDivisorsEnding1,
// 3 => CombinedDivisorsEnding3,
// 7 => CombinedDivisorsEnding7,
// 9 => CombinedDivisorsEnding9,
// _ => ArrayView1D<ulong, Stride1D.Dense>.Empty,
// };
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public (ArrayView1D<ulong, Stride1D.Dense>, ArrayView1D<ulong, Stride1D.Dense>) SelectDivisorsAndSquares(byte ending) => ending switch
{
1 => CombinedDivisorsAndSquaresEnding1,
3 => CombinedDivisorsAndSquaresEnding3,
7 => CombinedDivisorsAndSquaresEnding7,
9 => CombinedDivisorsAndSquaresEnding9,
_ => EmptyCombinedDivisorsAndSquares,
};
// [MethodImpl(MethodImplOptions.AggressiveInlining)]
// public ArrayView1D<ulong, Stride1D.Dense> SelectDivisorSquares(byte ending) => ending switch
// {
// 1 => CombinedDivisorSquaresEnding1,
// 3 => CombinedDivisorSquaresEnding3,
// 7 => CombinedDivisorSquaresEnding7,
// 9 => CombinedDivisorSquaresEnding9,
// _ => ArrayView1D<ulong, Stride1D.Dense>.Empty,
// };
}