private MagicInput[] MagicCycle(MagicInput[] input, int maxSize, ulong n, ulong h) { var t = (int)Math.Log(maxSize, 2); var result = new MagicInput[input.Length]; Parallel.For(0, result.Length, (i) => { result[i] = GetMagic(input[i], n, h, t); }); return(result); }
private MagicInput[] MagicCycleGPU(MagicInput[] input, int maxSize, ulong n, ulong h) { var t = (int)Math.Log(maxSize, 2); var result = new MagicInput[input.Length]; Gpu.Default.For(0, result.Length, i => { result[i] = GetMagicGPU(input[i], n, h, t); }); return(result); }
private MagicInput GetMagicGPU(MagicInput input, ulong n, ulong h, int size) { var x = input.X0; var x0 = input.X0; var counter = 0; //if first 32 - size bits are zero, x - magic num while (x >> (32 + size) != 0) { x = FunctionGPU(n, h, x); counter++; } return(new MagicInput() { X = x, X0 = x0, Counter = counter }); }