Example #1
0
        protected int[] Crunch()
        {
            int[] data = new int[displayPort[0] * displayPort[1]];

            if (DeviceName == "CPUOnly")
            {
                RestartWatch();
                //page resource
                MandelbrotExtensions.CalcCPUParallel(data, displayPort, areaView, maxIterations); // Single thread CPU
                ExecutionsDetails1 = ElapsedTime("CPU Only Mandelbrot");
            }
            else
            {
                Device device = MandelbrotInstance.ContextInstance.Devices.First(x => x.Name == DeviceName);

                if (_lastDevice != device)
                {
                    RestartWatch();
                    MandelbrotInstance.CompileKernel(device);
                    ExecutionsDetails2 = ElapsedTime("IL Compile - " + device.Name);
                    _lastDevice        = device;
                }


                RestartWatch();

                MandelbrotInstance.CalcGPU(ref data, displayPort, areaView, maxIterations); // ILGPU-CPU-Mode
                ExecutionsDetails3 = ElapsedTime("IL Run - " + DeviceName);
            }


            return(data);
        }
Example #2
0
        protected int[] Crunch(string device)
        {
            int[] data = new int[displayPort[0] * displayPort[1]];

            if (DeviceName == "Single Thread")
            {
                RestartWatch();
                MandelbrotExtensions.CalcCPUSingle(data, displayPort, areaView, maxIterations); // Single thread CPU
                ExecutionsDetails1 = ElapsedTime("Single Thread");
            }
            else if (DeviceName == "Parallel CPU")
            {
                RestartWatch();
                MandelbrotExtensions.CalcCPUParallel(data, displayPort, areaView, maxIterations); // Single thread CPU
                ExecutionsDetails2 = ElapsedTime("Parallel CPU");
            }
            else
            {
                _computing = true;
                if (_lastDevice != _CPUDevice)
                {
                    RestartWatch();
                    MandelbrotInstance.CompileKernel(_CPUDevice);
                    ExecutionsDetails3 = ElapsedTime("IL Compile - " + _CPUDevice.Name);
                    _lastDevice        = _CPUDevice;
                }


                RestartWatch();

                MandelbrotInstance.CalcGPU(ref data, displayPort, areaView, maxIterations); // ILGPU-CPU-Mode
                _computing         = false;
                ExecutionsDetails4 = ElapsedTime("IL Run - " + _CPUDevice.Name);
            }
            return(data);
        }
Example #3
0
        public async void AnimateMandelbrot()
        {
            int[] data = new int[displayPort[0] * displayPort[1]];


            float offsetX = -0.02f;
            float offsetY = 0.00562f;

            switch (DeviceName)
            {
            case "Single Thread":

                for (int i = 0; i < 500; i++)
                {
                    if (_disposing)
                    {
                        break;
                    }
                    RestartWatch();

                    MandelbrotExtensions.CalcCPUSingle(data, displayPort, areaView, maxIterations);     // ILGPU-CPU-Mode
                    ExecutionsDetails3 = ElapsedTime($"Single Thread");

                    areaView[0] = areaView[0] * 0.98f + offsetX;
                    areaView[1] = areaView[1] * 0.98f + offsetX;
                    areaView[2] = areaView[2] * 0.98f + offsetY;
                    areaView[3] = areaView[3] * 0.98f + offsetY;

                    if (_disposing)
                    {
                        break;
                    }
                    RestartWatch();

                    await MandelbrotExtensions.Draw(Canvas2D, data, displayPort[0], displayPort[1], maxIterations, Color.Blue);

                    StateHasChanged();

                    ExecutionsDetails4 = ElapsedTime("Render Time");
                }



                break;


            case "Parallel CPU":


                for (int i = 0; i < 500; i++)
                {
                    if (_disposing)
                    {
                        break;
                    }

                    RestartWatch();
                    MandelbrotExtensions.CalcCPUParallel(data, displayPort, areaView, maxIterations);     // ILGPU-CPU-Mode
                    ExecutionsDetails3 = ElapsedTime($"CPU Parallel");

                    areaView[0] = areaView[0] * 0.98f + offsetX;
                    areaView[1] = areaView[1] * 0.98f + offsetX;
                    areaView[2] = areaView[2] * 0.98f + offsetY;
                    areaView[3] = areaView[3] * 0.98f + offsetY;

                    if (_disposing)
                    {
                        break;
                    }

                    RestartWatch();
                    await MandelbrotExtensions.Draw(Canvas2D, data, displayPort[0], displayPort[1], maxIterations, Color.Blue);

                    StateHasChanged();

                    ExecutionsDetails4 = ElapsedTime("Render Time");
                }


                break;


            default:
                _computing = true;

                if (_lastDevice != _CPUDevice)
                {
                    RestartWatch();
                    MandelbrotInstance.CompileKernel(_CPUDevice);
                    ExecutionsDetails2 = ElapsedTime("IL Compile - " + _CPUDevice.Name);
                    _lastDevice        = _CPUDevice;
                }

                MandelbrotInstance.InitGPURepeat(ref data, displayPort, areaView, maxIterations);

                for (int i = 0; i < 500; i++)
                {
                    if (_disposing)
                    {
                        break;
                    }

                    RestartWatch();

                    MandelbrotInstance.CalcGPURepeat(ref data, displayPort, areaView, maxIterations);     // ILGPU-CPU-Mode
                    ExecutionsDetails3 = ElapsedTime($"IL Run - {DeviceName}");

                    areaView[0] = areaView[0] * 0.98f + offsetX;
                    areaView[1] = areaView[1] * 0.98f + offsetX;
                    areaView[2] = areaView[2] * 0.98f + offsetY;
                    areaView[3] = areaView[3] * 0.98f + offsetY;

                    if (_disposing)
                    {
                        break;
                    }
                    RestartWatch();

                    await MandelbrotExtensions.Draw(Canvas2D, data, displayPort[0], displayPort[1], maxIterations, Color.Blue);

                    StateHasChanged();

                    ExecutionsDetails4 = ElapsedTime("Render Time");
                }
                MandelbrotInstance.CleanupGPURepeat();
                _computing = false;
                break;
            }
        }