Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
        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
            });
        }