Address windowed pow2 review feedback

This commit is contained in:
Marek Lemańczyk committed 2025-10-20 18:37:29 +02:00
1 parent 481d1010e8
commit da6ea25729
9 files changed
+17 -20

No files matched your search

@@ -21,7 +21,7 @@ internal static class DivisorKernels
ReadOnlyGpuUInt128 readOnlyMod = divisor;
if (x == 0)
{
baseVal = GpuUInt128.Pow2Mod(exponent, in readOnlyMod); // Uses the eight-bit windowed ladder measured fastest in GPU benchmarks.
baseVal = GpuUInt128.Pow2Mod(exponent, in readOnlyMod);
result[0] = baseVal.High == 0UL && baseVal.Low == 1UL ? (byte)1 : (byte)0;
return;
}
@@ -38,7 +38,7 @@ internal static class DivisorKernels
GpuUInt128 pow = baseVal;
pow.ModPow(exponent / ux, in readOnlyMod);
var part2 = GpuUInt128.Pow2Mod(exponent % ux, in readOnlyMod); // Windowed pow2 keeps the mixed-radix tail fast.
var part2 = GpuUInt128.Pow2Mod(exponent % ux, in readOnlyMod);
GpuUInt128 product = pow;
ReadOnlyGpuUInt128 part2ReadOnly = part2.AsReadOnly();
product.MulMod(in part2ReadOnly, in readOnlyMod);