using ILGPU; using ILGPU.Runtime; namespace PerfectNumbers.Core.Gpu.Accelerators; public static class AcceleratorExtensions { public static MemoryBuffer1D CopySpanToDevice(this Accelerator accelerator, AcceleratorStream stream, in ulong[] span) { MemoryBuffer1D? buffer; buffer = accelerator.Allocate1D(stream, span); return buffer; } public static MemoryBuffer1D CopyUintSpanToDevice(this Accelerator accelerator, AcceleratorStream stream, ReadOnlySpan span) { MemoryBuffer1D? buffer; buffer = accelerator.Allocate1D(span.Length); if (!span.IsEmpty) { var converted = new ulong[span.Length]; for (int i = 0; i < span.Length; i++) { converted[i] = span[i]; } buffer.View.CopyFromCPU(stream, converted); } return buffer; } }