private async Task BenchmarkAlgorithm(AlgorithmContainer algo, CancellationToken stop)
        {
            var miningLocation = StratumService.Instance.SelectedOrFallbackServiceLocationCode().miningLocationCode;

            // TODO hidden issue here if our market is not available we will not be able to execute benchmarks
            // unable to benchmark service locations are not operational
            if (miningLocation == null)
            {
                return;
            }
            using (var powerHelper = new PowerHelper(algo.ComputeDevice))
            {
                var plugin     = algo.PluginContainer;
                var miner      = plugin.CreateMiner();
                var miningPair = new NHM.MinerPlugin.MiningPair
                {
                    Device    = algo.ComputeDevice.BaseDevice,
                    Algorithm = algo.Algorithm
                };
                // check ethlargement
                var miningPairs = new List <NHM.MinerPlugin.MiningPair> {
                    miningPair
                };
                EthlargementIntegratedPlugin.Instance.Start(miningPairs);
                miner.InitMiningPairs(miningPairs);
                // fill service since the benchmark might be online. DemoUser.BTC must be used
                miner.InitMiningLocationAndUsername(miningLocation, DemoUser.BTC);
                powerHelper.Start();
                algo.ComputeDevice.State = DeviceState.Benchmarking;
                var result = await miner.StartBenchmark(stop, PerformanceType);

                if (stop.IsCancellationRequested)
                {
                    return;
                }

                algo.IsReBenchmark = false;
                //EthlargementIntegratedPlugin.Instance.Stop(miningPairs); // TODO check stopping
                var power = powerHelper.Stop();
                if (result.Success || result.AlgorithmTypeSpeeds?.Count > 0)
                {
                    var ids    = result.AlgorithmTypeSpeeds.Select(ats => ats.type).ToList();
                    var speeds = result.AlgorithmTypeSpeeds.Select(ats => ats.speed).ToList();
                    algo.Speeds     = speeds;
                    algo.PowerUsage = power;
                    ConfigManager.CommitBenchmarksForDevice(algo.ComputeDevice);
                }
                else
                {
                    // mark it as failed
                    algo.LastBenchmarkingFailed = true;
                    // add new failed list
                    _benchmarkFailedAlgo.Add(algo.AlgorithmName);
                    algo.SetBenchmarkError(result.ErrorMessage);
                }
            }
        }
Esempio n. 2
0
        private async Task BenchmarkAlgorithm(AlgorithmContainer algo, CancellationToken stop)
        {
            using (var powerHelper = new PowerHelper(algo.ComputeDevice))
            {
                var plugin     = algo.PluginContainer;
                var miner      = plugin.CreateMiner();
                var miningPair = new NHM.MinerPlugin.MiningPair
                {
                    Device    = algo.ComputeDevice.BaseDevice,
                    Algorithm = algo.Algorithm
                };
                // check ethlargement
                var miningPairs = new List <NHM.MinerPlugin.MiningPair> {
                    miningPair
                };
                EthlargementIntegratedPlugin.Instance.Start(miningPairs);
                miner.InitMiningPairs(miningPairs);
                // fill service since the benchmark might be online. DemoUser.BTC must be used
                miner.InitMiningLocationAndUsername(StratumService.Instance.SelectedServiceLocation, DemoUser.BTC);
                powerHelper.Start();
                algo.ComputeDevice.State = DeviceState.Benchmarking;
                var result = await miner.StartBenchmark(stop, PerformanceType);

                if (stop.IsCancellationRequested)
                {
                    return;
                }

                algo.IsReBenchmark = false;
                //EthlargementIntegratedPlugin.Instance.Stop(miningPairs); // TODO check stopping
                var power = powerHelper.Stop();
                if (result.Success || result.AlgorithmTypeSpeeds?.Count > 0)
                {
                    var ids    = result.AlgorithmTypeSpeeds.Select(ats => ats.type).ToList();
                    var speeds = result.AlgorithmTypeSpeeds.Select(ats => ats.speed).ToList();
                    algo.Speeds     = speeds;
                    algo.PowerUsage = power;
                    // set status to empty string it will return speed
                    BenchmarkManager.SetCurrentStatus(algo.ComputeDevice, algo, "");
                    ConfigManager.CommitBenchmarksForDevice(algo.ComputeDevice);
                }
                else
                {
                    // mark it as failed
                    algo.LastBenchmarkingFailed = true;
                    // add new failed list
                    _benchmarkFailedAlgo.Add(algo.AlgorithmName);
                    algo.SetBenchmarkError(result.ErrorMessage);
                    BenchmarkManager.SetCurrentStatus(algo.ComputeDevice, algo, result.ErrorMessage);
                }
            }
        }
        } = BenchmarkPerformanceType.Standard;                                                             // TODO TEMP

        private async Task <object> BenchmarkAlgorithm(AlgorithmContainer algo, CancellationToken stop)
        {
            if (algo == null)
            {
                Logger.Error("BenchmarkingComputeDeviceHandler.BenchmarkNextAlgorithm", $"TakeNextAlgorithm returned null");
                return(false);
            }

            bool ret         = false;
            var  miningPairs = new List <MiningPair> {
                algo.ToMiningPair()
            };

            try
            {
                algo.IsBenchmarking = true;
                using (var powerHelper = new PowerHelper(algo.ComputeDevice))
                {
                    var plugin = algo.PluginContainer;
                    var miner  = plugin.CreateMiner();

                    GPUProfileManager.Instance.Start(miningPairs);
                    miner.InitMiningPairs(miningPairs);
                    // fill service since the benchmark might be online. DemoUser.BTC must be used
                    miner.InitMiningLocationAndUsername("auto", DemoUser.BTC);
                    powerHelper.Start();
                    algo.ComputeDevice.State = DeviceState.Benchmarking;
                    var result = await miner.StartBenchmark(stop, BenchmarkManagerState.Instance.SelectedBenchmarkType);

                    GPUProfileManager.Instance.Stop(miningPairs);
                    if (stop.IsCancellationRequested)
                    {
                        return(false);
                    }

                    algo.IsReBenchmark = false;
                    var power = powerHelper.Stop();
                    ret = result.Success || result.AlgorithmTypeSpeeds?.Count > 0;
                    if (ret)
                    {
                        algo.Speeds     = result.AlgorithmTypeSpeeds.Select(ats => ats.speed).ToList();
                        algo.PowerUsage = power;
                        ConfigManager.CommitBenchmarksForDevice(algo.ComputeDevice);
                    }
                    else
                    {
                        // mark it as failed
                        algo.LastBenchmarkingFailed = true;
                        algo.SetBenchmarkError(result.ErrorMessage);
                    }
                }
            }
            finally
            {
                GPUProfileManager.Instance.Stop(miningPairs);
                algo.ClearBenchmarkPending();
                algo.IsBenchmarking = false;
            }

            return(ret);
        }
Esempio n. 4
0
        } = BenchmarkPerformanceType.Standard;                                                             // TODO TEMP

        private async Task <object> BenchmarkAlgorithm(AlgorithmContainer algo, CancellationToken stop)
        {
            if (algo == null)
            {
                Logger.Error("BenchmarkingComputeDeviceHandler.BenchmarkNextAlgorithm", $"TakeNextAlgorithm returned null");
                return(false);
            }

            // TODO here you got shity state
            var miningLocation = StratumService.Instance.SelectedOrFallbackServiceLocationCode().miningLocationCode;

            // TODO hidden issue here if our market is not available we will not be able to execute benchmarks
            // unable to benchmark service locations are not operational
            if (miningLocation == null)
            {
                return(false);
            }


            bool ret         = false;
            var  miningPairs = new List <MiningPair> {
                algo.ToMiningPair()
            };

            try
            {
                algo.IsBenchmarking = true;
                using (var powerHelper = new PowerHelper(algo.ComputeDevice))
                {
                    var plugin = algo.PluginContainer;
                    var miner  = plugin.CreateMiner();

                    // check ethlargement
                    EthlargementIntegratedPlugin.Instance.Start(miningPairs);
                    miner.InitMiningPairs(miningPairs);
                    // fill service since the benchmark might be online. DemoUser.BTC must be used
                    miner.InitMiningLocationAndUsername(miningLocation, DemoUser.BTC);
                    powerHelper.Start();
                    algo.ComputeDevice.State = DeviceState.Benchmarking;
                    var result = await miner.StartBenchmark(stop, PerformanceType);

                    EthlargementIntegratedPlugin.Instance.Stop(miningPairs);
                    if (stop.IsCancellationRequested)
                    {
                        return(false);
                    }

                    algo.IsReBenchmark = false;
                    var power = powerHelper.Stop();
                    ret = result.Success || result.AlgorithmTypeSpeeds?.Count > 0;
                    if (ret)
                    {
                        algo.Speeds     = result.AlgorithmTypeSpeeds.Select(ats => ats.speed).ToList();
                        algo.PowerUsage = power;
                        ConfigManager.CommitBenchmarksForDevice(algo.ComputeDevice);
                    }
                    else
                    {
                        // mark it as failed
                        algo.LastBenchmarkingFailed = true;
                        algo.SetBenchmarkError(result.ErrorMessage);
                    }
                }
            }
            finally
            {
                EthlargementIntegratedPlugin.Instance.Stop(miningPairs);
                algo.ClearBenchmarkPending();
                algo.IsBenchmarking = false;
            }

            return(ret);
        }