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