From 05077f7e90f8f9f0a572063cf2ae73ba2f347757 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20Lema=C5=84czyk?= Date: Thu, 25 Sep 2025 10:31:34 +0200 Subject: [PATCH] Fixed regression with ref taken only once while it may move since.. --- .../Gpu/MersenneNumberDivisorByDivisorGpuTester.cs | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/PerfectNumbers.Core/Gpu/MersenneNumberDivisorByDivisorGpuTester.cs b/PerfectNumbers.Core/Gpu/MersenneNumberDivisorByDivisorGpuTester.cs index e39ad4a..0ad07a4 100644 --- a/PerfectNumbers.Core/Gpu/MersenneNumberDivisorByDivisorGpuTester.cs +++ b/PerfectNumbers.Core/Gpu/MersenneNumberDivisorByDivisorGpuTester.cs @@ -386,7 +386,7 @@ public sealed class MersenneNumberDivisorByDivisorGpuTester : IMersenneNumberDiv int batchSize, computeCount, i, offset = 0; bool useDivisorCycles = owner._useDivisorCycles; - ulong exponentSliceRef, residue; + ulong residue; while (offset < primesLength) { batchSize = Math.Min(gpuBatchSize, primesLength - offset); @@ -426,12 +426,11 @@ public sealed class MersenneNumberDivisorByDivisorGpuTester : IMersenneNumberDiv exponentSlice = hostSpan[..computeCount]; exponentView = exponentsView.SubView(0, computeCount); - exponentSliceRef = MemoryMarshal.GetReference(exponentSlice); - exponentView.CopyFromCPU(ref exponentSliceRef, computeCount); + exponentView.CopyFromCPU(ref MemoryMarshal.GetReference(exponentSlice), computeCount); resultView = resultsView.SubView(0, computeCount); kernel(computeCount, divisorData, exponentView, resultView); accelerator.Synchronize(); - resultView.CopyToCPU(ref exponentSliceRef, computeCount); + resultView.CopyToCPU(ref MemoryMarshal.GetReference(exponentSlice), computeCount); for (i = 0; i < computeCount; i++) {