Exemplo n.º 1
0
        /// <summary>
        /// The CreateForDevice
        /// </summary>
        /// <param name="device">The <see cref="ComputeDevice"/></param>
        /// <returns>The <see cref="Dictionary{MinerBaseType, List{Algorithm}}"/></returns>
        private static Dictionary <MinerBaseType, List <Algorithm> > CreateForDevice(ComputeDevice device)
        {
            if (device != null)
            {
                var algoSettings = CreateDefaultsForGroup(device.DeviceGroupType);
                if (algoSettings != null)
                {
                    if (device.DeviceType == DeviceType.AMD)
                    {
                        // sgminer stuff
                        if (algoSettings.ContainsKey(MinerBaseType.sgminer))
                        {
                            var sgminerAlgos    = algoSettings[MinerBaseType.sgminer];
                            int Lyra2REv2_Index = sgminerAlgos.FindIndex((el) => el.CryptoMiner937ID == AlgorithmType.Lyra2REv2);
                            //int NeoScrypt_Index = sgminerAlgos.FindIndex((el) => el.CryptoMiner937ID == AlgorithmType.NeoScrypt);
                            int cryptonight_Index = sgminerAlgos.FindIndex((el) => el.CryptoMiner937ID == AlgorithmType.cryptonight);

                            // Check for optimized version
                            if (Lyra2REv2_Index > -1)
                            {
                                sgminerAlgos[Lyra2REv2_Index].ExtraLaunchParameters = AmdGpuDevice.DefaultParam + "--nfactor 10 --xintensity 64 --thread-concurrency 0 --worksize 64 --gpu-threads 2";
                            }
                            //if (!device.Codename.Contains("Tahiti") && NeoScrypt_Index > -1)
                            //{
                            //    sgminerAlgos[NeoScrypt_Index].ExtraLaunchParameters = AmdGpuDevice.DefaultParam + "--intensity 13 --worksize  256 --gpu-threads 1";
                            //    Helpers.ConsolePrint("ComputeDevice", "The GPU detected (" + device.Codename + ") is not Tahiti. Changing default gpu-threads to 2.");
                            //}
                            if (cryptonight_Index > -1)
                            {
                                if (device.Codename.Contains("Hawaii"))
                                {
                                    sgminerAlgos[cryptonight_Index].ExtraLaunchParameters = "--rawintensity 640 -w 8 -g 2";
                                }
                                else if (device.Name.Contains("Vega"))
                                {
                                    sgminerAlgos[cryptonight_Index].ExtraLaunchParameters = AmdGpuDevice.DefaultParam + " --rawintensity 1850 -w 8 -g 2";
                                }
                            }
                        }
                        if (algoSettings.ContainsKey(MinerBaseType.GatelessGate))
                        {
                            var glgAlgos          = algoSettings[MinerBaseType.GatelessGate];
                            int Lyra2REv2_Index   = glgAlgos.FindIndex((el) => el.CryptoMiner937ID == AlgorithmType.Lyra2REv2);
                            int NeoScrypt_Index   = glgAlgos.FindIndex((el) => el.CryptoMiner937ID == AlgorithmType.NeoScrypt);
                            int cryptonight_Index = glgAlgos.FindIndex((el) => el.CryptoMiner937ID == AlgorithmType.cryptonight);


                            // Check for optimized version
                            if (!device.Codename.Contains("Tahiti") && NeoScrypt_Index > -1)
                            {
                                glgAlgos[NeoScrypt_Index].ExtraLaunchParameters = AmdGpuDevice.DefaultParam + "--intensity 13 --worksize  256 --gpu-threads 1";
                                Helpers.ConsolePrint("ComputeDevice", "The GPU detected (" + device.Codename + ") is not Tahiti. Changing default gpu-threads to 2.");
                            }
                            if (cryptonight_Index > -1)
                            {
                                if (device.Codename.Contains("gfx804")) //rx550
                                {
                                    glgAlgos[cryptonight_Index].ExtraLaunchParameters = "--rawintensity 448 -w 8 -g 2";
                                }
                                if (device.Codename.Contains("Pitcairn")) //r7-370
                                {
                                    glgAlgos[cryptonight_Index].ExtraLaunchParameters = "--rawintensity 416 -w 8 -g 2";
                                }
                                if (device.Codename.Contains("Baffin")) //rx460/560
                                {
                                    glgAlgos[cryptonight_Index].ExtraLaunchParameters = "--rawintensity 448 -w 8 -g 2";
                                }

                                if (device.Codename.Contains("Ellesmere")) //rx570/580
                                {
                                    glgAlgos[cryptonight_Index].ExtraLaunchParameters = "--intensity 13 --worksize  256 --gpu-threads 1";
                                }

                                if (device.Codename.Contains("Hawaii"))
                                {
                                    glgAlgos[cryptonight_Index].ExtraLaunchParameters = "--rawintensity 640 -w 8 -g 2";
                                }
                                else if (device.Name.Contains("Vega"))
                                {
                                    glgAlgos[cryptonight_Index].ExtraLaunchParameters = AmdGpuDevice.DefaultParam + " --rawintensity 1850 -w 8 -g 2";
                                }
                            }
                        }
                        // Ellesmere, Polaris
                        // Ellesmere sgminer workaround, keep this until sgminer is fixed to work with Ellesmere
                        if ((device.Codename.Contains("Ellesmere") || device.InfSection.ToLower().Contains("polaris")))
                        {
                            foreach (var algosInMiner in algoSettings)
                            {
                                foreach (var algo in algosInMiner.Value)
                                {
                                    // disable all algos in list
                                    if (algo.CryptoMiner937ID == AlgorithmType.Decred || algo.CryptoMiner937ID == AlgorithmType.Lbry)
                                    {
                                        algo.Enabled = false;
                                    }
                                }
                            }
                        }
                        // non sgminer optimizations
                        if (algoSettings.ContainsKey(MinerBaseType.Claymore))
                        {
                            var claymoreNewAlgos    = algoSettings[MinerBaseType.Claymore];
                            var cryptonightNewIndex =
                                claymoreNewAlgos.FindIndex(el => el.CryptoMiner937ID == AlgorithmType.cryptonight);

                            if (cryptonightNewIndex > -1)
                            {
                                //string regex_a_3 = "[5|6][0-9][0-9][0-9]";
                                List <string> a_4 = new List <string>()
                                {
                                    "270",
                                    "270x",
                                    "280",
                                    "280x",
                                    "290",
                                    "290x",
                                    "370",
                                    "380",
                                    "390",
                                    "470",
                                    "480"
                                };
                                foreach (var namePart in a_4)
                                {
                                    if (device.Name.Contains(namePart))
                                    {
                                        break;
                                    }
                                }

                                List <string> old = new List <string> {
                                    "Verde",
                                    "Oland",
                                    "Bonaire"
                                };
                                foreach (var codeName in old)
                                {
                                    var isOld = device.Codename.Contains(codeName);
                                    claymoreNewAlgos[cryptonightNewIndex].Enabled = !isOld;
                                }
                            }
                        }

                        // drivers algos issue
                        if (device.DriverDisableAlgos)
                        {
                            //algoSettings = FilterMinerAlgos(algoSettings, new List<AlgorithmType> { AlgorithmType.NeoScrypt, AlgorithmType.Lyra2REv2 });
                            //algoSettings = FilterMinerAlgos(algoSettings, new List<AlgorithmType> { AlgorithmType.Lyra2REv2 });
                        }

                        /*if (algoSettings.ContainsKey(MinerBaseType.mkxminer))
                         * {
                         *  var mkxminerAlgos = algoSettings[MinerBaseType.mkxminer];
                         *  int Lyra2REv2_Index = mkxminerAlgos.FindIndex((el) => el.CryptoMiner937ID == AlgorithmType.Lyra2REv2);
                         *
                         *  if (Lyra2REv2_Index > -1)
                         *  {
                         *      if (device.Codename.Contains("gfx804")) //rx550
                         *      {
                         *          mkxminerAlgos[Lyra2REv2_Index].ExtraLaunchParameters = "-I 23";
                         *      }
                         *      if (device.Codename.Contains("Pitcairn")) //r7-370
                         *      {
                         *          mkxminerAlgos[Lyra2REv2_Index].ExtraLaunchParameters = "-I 23";
                         *      }
                         *      if (device.Codename.Contains("Baffin")) //rx460/560
                         *      {
                         *          mkxminerAlgos[Lyra2REv2_Index].ExtraLaunchParameters = "-I 23";
                         *      }
                         *
                         *      if (device.Codename.Contains("Ellesmere")) //rx570/580
                         *      {
                         *          mkxminerAlgos[Lyra2REv2_Index].ExtraLaunchParameters = "-I 23";
                         *      }
                         *
                         *      if (device.Codename.Contains("Hawaii"))
                         *      {
                         *          mkxminerAlgos[Lyra2REv2_Index].ExtraLaunchParameters = "-I 23";
                         *      }
                         *      else if (device.Name.Contains("Vega"))
                         *      {
                         *          mkxminerAlgos[Lyra2REv2_Index].ExtraLaunchParameters = AmdGpuDevice.DefaultParam + "-I 23";
                         *      }
                         *  }
                         * } */

                        // disable by default
                        {
                            var minerBases = new List <MinerBaseType>()
                            {
                                MinerBaseType.OptiminerAMD
                            };
                            foreach (var minerKey in minerBases)
                            {
                                if (algoSettings.ContainsKey(minerKey))
                                {
                                    foreach (var algo in algoSettings[minerKey])
                                    {
                                        algo.Enabled = false;
                                    }
                                }
                            }
                            if (algoSettings.ContainsKey(MinerBaseType.sgminer))
                            {
                                foreach (var algo in algoSettings[MinerBaseType.sgminer])
                                {
                                    if (algo.CryptoMiner937ID == AlgorithmType.DaggerHashimoto)
                                    {
                                        algo.Enabled = false;
                                    }
                                }
                            }
                            if (algoSettings.ContainsKey(MinerBaseType.Claymore))
                            {
                                foreach (var algo in algoSettings[MinerBaseType.Claymore])
                                {
                                    if (algo.CryptoMiner937ID == AlgorithmType.cryptonight)
                                    {
                                        algo.Enabled = false;
                                    }
                                    if (device.Codename.Contains("gfx804"))
                                    {
                                        if (algo.CryptoMiner937ID == AlgorithmType.NeoScrypt)
                                        {
                                            algo.Enabled = false;
                                        }
                                    }
                                }
                            }
                        }
                    } // END AMD case

                    // check if it is Etherum capable
                    if (device.IsEtherumCapale == false)
                    {
                        algoSettings = FilterMinerAlgos(algoSettings, new List <AlgorithmType> {
                            AlgorithmType.DaggerHashimoto
                        });
                    }
                    if (algoSettings.ContainsKey(MinerBaseType.experimental))
                    {
                        foreach (var unstable_algo in algoSettings[MinerBaseType.experimental])
                        {
                            unstable_algo.Enabled = false;
                        }
                    }

                    // This is not needed anymore after excavator v1.1.4a
                    //if (device.IsSM50() && algoSettings.ContainsKey(MinerBaseType.excavator)) {
                    //    int equihash_index = algoSettings[MinerBaseType.excavator].FindIndex((algo) => algo.CryptoMiner937ID == AlgorithmType.equihash);
                    //    if (equihash_index > -1) {
                    //        // -c1 1 needed for SM50 to work ATM
                    //        algoSettings[MinerBaseType.excavator][equihash_index].ExtraLaunchParameters = "-c1 1";
                    //    }
                    //}
                    // nheqminer exceptions scope
                } // END algoSettings != null
                return(algoSettings);
            }
            return(null);
        }
Exemplo n.º 2
0
        private static Dictionary <MinerBaseType, List <Algorithm> > CreateForDevice(ComputeDevice device)
        {
            if (device != null)
            {
                var algoSettings = CreateDefaultsForGroup(device.DeviceGroupType);
                if (algoSettings != null)
                {
                    if (device.DeviceType == DeviceType.AMD)
                    {
                        // sgminer stuff
                        if (algoSettings.ContainsKey(MinerBaseType.sgminer))
                        {
                            var sgminerAlgos      = algoSettings[MinerBaseType.sgminer];
                            int Lyra2REv2_Index   = sgminerAlgos.FindIndex((el) => el.NiceHashID == AlgorithmType.Lyra2REv2);
                            int NeoScrypt_Index   = sgminerAlgos.FindIndex((el) => el.NiceHashID == AlgorithmType.NeoScrypt);
                            int CryptoNight_Index = sgminerAlgos.FindIndex((el) => el.NiceHashID == AlgorithmType.CryptoNight);

                            // Check for optimized version
                            if (Lyra2REv2_Index > -1)
                            {
                                sgminerAlgos[Lyra2REv2_Index].ExtraLaunchParameters = AmdGpuDevice.DefaultParam + "--nfactor 10 --xintensity 64 --thread-concurrency 0 --worksize 64 --gpu-threads 2";
                            }
                            if (!device.Codename.Contains("Tahiti") && NeoScrypt_Index > -1)
                            {
                                sgminerAlgos[NeoScrypt_Index].ExtraLaunchParameters = AmdGpuDevice.DefaultParam + "--nfactor 10 --xintensity    2 --thread-concurrency 8192 --worksize  64 --gpu-threads 2";
                                Helpers.ConsolePrint("ComputeDevice", "The GPU detected (" + device.Codename + ") is not Tahiti. Changing default gpu-threads to 2.");
                            }
                            if (CryptoNight_Index > -1)
                            {
                                if (device.Codename.Contains("Hawaii"))
                                {
                                    sgminerAlgos[CryptoNight_Index].ExtraLaunchParameters = "--rawintensity 640 -w 8 -g 2";
                                }
                                else if (device.Name.Contains("Vega"))
                                {
                                    sgminerAlgos[CryptoNight_Index].ExtraLaunchParameters = AmdGpuDevice.DefaultParam + " --rawintensity 1850 -w 8 -g 2";
                                }
                            }
                        }

                        // Ellesmere, Polaris
                        // Ellesmere sgminer workaround, keep this until sgminer is fixed to work with Ellesmere
                        if ((device.Codename.Contains("Ellesmere") || device.InfSection.ToLower().Contains("polaris")))
                        {
                            foreach (var algosInMiner in algoSettings)
                            {
                                foreach (var algo in algosInMiner.Value)
                                {
                                    // disable all algos in list
                                    if (algo.NiceHashID == AlgorithmType.Decred || algo.NiceHashID == AlgorithmType.Lbry)
                                    {
                                        algo.Enabled = false;
                                    }
                                }
                            }
                        }
                        // non sgminer optimizations
                        if (algoSettings.ContainsKey(MinerBaseType.Claymore_old) && algoSettings.ContainsKey(MinerBaseType.Claymore))
                        {
                            var claymoreOldAlgos    = algoSettings[MinerBaseType.Claymore_old];
                            var cryptoNightOldIndex =
                                claymoreOldAlgos.FindIndex((el) => el.NiceHashID == AlgorithmType.CryptoNight);

                            var claymoreNewAlgos    = algoSettings[MinerBaseType.Claymore];
                            var cryptoNightNewIndex =
                                claymoreNewAlgos.FindIndex(el => el.NiceHashID == AlgorithmType.CryptoNight);

                            if (cryptoNightOldIndex > -1 && cryptoNightNewIndex > -1)
                            {
                                //string regex_a_3 = "[5|6][0-9][0-9][0-9]";
                                List <string> a_4 = new List <string>()
                                {
                                    "270",
                                    "270x",
                                    "280",
                                    "280x",
                                    "290",
                                    "290x",
                                    "370",
                                    "380",
                                    "390",
                                    "470",
                                    "480"
                                };
                                foreach (var namePart in a_4)
                                {
                                    if (device.Name.Contains(namePart))
                                    {
                                        claymoreOldAlgos[cryptoNightOldIndex].ExtraLaunchParameters = "-a 4";
                                        break;
                                    }
                                }

                                List <string> old = new List <string> {
                                    "Verde",
                                    "Oland",
                                    "Bonaire"
                                };
                                foreach (var codeName in old)
                                {
                                    var isOld = device.Codename.Contains(codeName);
                                    claymoreOldAlgos[cryptoNightOldIndex].Enabled = isOld;
                                    claymoreNewAlgos[cryptoNightNewIndex].Enabled = !isOld;
                                }
                            }
                        }

                        // drivers algos issue
                        if (device.DriverDisableAlgos)
                        {
                            algoSettings = FilterMinerAlgos(algoSettings, new List <AlgorithmType> {
                                AlgorithmType.NeoScrypt, AlgorithmType.Lyra2REv2
                            });
                        }

                        // disable by default
                        {
                            var minerBases = new List <MinerBaseType>()
                            {
                                MinerBaseType.ethminer, MinerBaseType.OptiminerAMD
                            };
                            foreach (var minerKey in minerBases)
                            {
                                if (algoSettings.ContainsKey(minerKey))
                                {
                                    foreach (var algo in algoSettings[minerKey])
                                    {
                                        algo.Enabled = false;
                                    }
                                }
                            }
                            if (algoSettings.ContainsKey(MinerBaseType.sgminer))
                            {
                                foreach (var algo in algoSettings[MinerBaseType.sgminer])
                                {
                                    if (algo.NiceHashID == AlgorithmType.DaggerHashimoto)
                                    {
                                        algo.Enabled = false;
                                    }
                                }
                            }
                            //if (algoSettings.ContainsKey(MinerBaseType.Claymore)) {
                            //    foreach (var algo in algoSettings[MinerBaseType.Claymore]) {
                            //        if (algo.NiceHashID == AlgorithmType.CryptoNight) {
                            //            algo.Enabled = false;
                            //        }
                            //    }
                            //}
                        }
                    } // END AMD case

                    // check if it is Etherum capable
                    if (device.IsEtherumCapale == false)
                    {
                        algoSettings = FilterMinerAlgos(algoSettings, new List <AlgorithmType> {
                            AlgorithmType.DaggerHashimoto
                        });
                    }

                    if (algoSettings.ContainsKey(MinerBaseType.ccminer_alexis))
                    {
                        foreach (var unstable_algo in algoSettings[MinerBaseType.ccminer_alexis])
                        {
                            unstable_algo.Enabled = false;
                        }
                    }
                    if (algoSettings.ContainsKey(MinerBaseType.experimental))
                    {
                        foreach (var unstable_algo in algoSettings[MinerBaseType.experimental])
                        {
                            unstable_algo.Enabled = false;
                        }
                    }

                    // This is not needed anymore after excavator v1.1.4a
                    //if (device.IsSM50() && algoSettings.ContainsKey(MinerBaseType.excavator)) {
                    //    int Equihash_index = algoSettings[MinerBaseType.excavator].FindIndex((algo) => algo.NiceHashID == AlgorithmType.Equihash);
                    //    if (Equihash_index > -1) {
                    //        // -c1 1 needed for SM50 to work ATM
                    //        algoSettings[MinerBaseType.excavator][Equihash_index].ExtraLaunchParameters = "-c1 1";
                    //    }
                    //}
                    // nheqminer exceptions scope
                    {
                        const MinerBaseType minerBaseKey = MinerBaseType.nheqminer;
                        if (algoSettings.ContainsKey(minerBaseKey) && device.Name.Contains("GTX") &&
                            (device.Name.Contains("560") || device.Name.Contains("650") || device.Name.Contains("680") || device.Name.Contains("770"))
                            )
                        {
                            algoSettings = FilterMinerBaseTypes(algoSettings, new List <MinerBaseType>()
                            {
                                minerBaseKey
                            });
                        }
                    }
                } // END algoSettings != null
                return(algoSettings);
            }
            return(null);
        }