Esempio n. 1
0
        public async void AnimateMandelbrot()
        {
            int[] data = new int[displayPort[0] * displayPort[1]];

            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;
            }


            MandelbrotInstance.InitGPURepeat(ref data, displayPort, areaView, maxIterations);
            StateHasChanged();
            float offsetX = -0.02f;
            float offsetY = 0.00562f;

            for (int i = 0; i < 500; i++)
            {
                // here we are in a long running loop, a user can navigate away or close a window which will
                // eventually result in an exception as this loop will continue to run


                if (_disposing || MandelbrotInstance.IsDisposing)
                {
                    break;
                }
                RestartWatch();
                MandelbrotInstance.CalcGPURepeat(ref data, displayPort, areaView, maxIterations); // ILGPU-CPU-Mode
                ExecutionsDetails2 = 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 || MandelbrotInstance.IsDisposing)
                {
                    break;
                }
                RestartWatch();
                await MandelbrotExtensions.Draw(Canvas2D, data, displayPort[0], displayPort[1], maxIterations, Color.Blue);

                ExecutionsDetails3 = ElapsedTime("Web Server Render");
                StateHasChanged();
            }

            MandelbrotInstance.CleanupGPURepeat();
        }
Esempio n. 2
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;
            }
        }