Ejemplo n.º 1
0
 private IEnumerable <Algorithm> GetSupportedAlgorithms(CUDADevice dev)
 {
     return(new List <Algorithm> {
         new Algorithm(PluginUUID, AlgorithmType.MTP),
         new Algorithm(PluginUUID, AlgorithmType.Lyra2REv3),
     });
 }
Ejemplo n.º 2
0
        //TODO fix constructor to not include 3rd party handles + refactor inside interface device info (lookup fans speed/temps/...)
        public CudaComputeDevice(CudaDevice cudaDevice, DeviceGroupType group, int gpuCount,
                                 NvPhysicalGpuHandle nvHandle, nvmlDevice nvmlHandle)
            : base((int)cudaDevice.DeviceID,
                   cudaDevice.GetName(),
                   true,
                   group,
                   DeviceType.NVIDIA,
                   string.Format(Translations.Tr("GPU#{0}"), gpuCount),
                   cudaDevice.DeviceGlobalMemory)
        {
            BusID             = cudaDevice.pciBusID;
            SMMajor           = cudaDevice.SM_major;
            SMMinor           = cudaDevice.SM_minor;
            Uuid              = cudaDevice.UUID;
            AlgorithmSettings = DefaultAlgorithms.GetAlgorithmsForDevice(this);
            Index             = ID + AvailableDevices.AvailCpus; // increment by CPU count

            _nvHandle   = nvHandle;
            _nvmlDevice = nvmlHandle;

            ShouldRunEthlargement = cudaDevice.DeviceName.Contains("1080") || cudaDevice.DeviceName.Contains("Titan Xp");
            // plugin device
            var bd = new BaseDevice(DeviceType.NVIDIA, cudaDevice.UUID, cudaDevice.GetName(), (int)cudaDevice.DeviceID);

            PluginDevice = new CUDADevice(bd, cudaDevice.pciBusID, cudaDevice.DeviceGlobalMemory, cudaDevice.SM_major, cudaDevice.SM_minor);
        }
Ejemplo n.º 3
0
        private IEnumerable <Algorithm> GetCUDASupportedAlgorithms(CUDADevice dev)
        {
            const ulong minZhashMem  = 1879047230;
            const ulong minBeamMem   = 3113849695;
            const ulong minGrin29Mem = 6012951136;
            const ulong minGrin31Mem = 9UL << 30;

            if (dev.GpuRam >= minZhashMem)
            {
                yield return(new Algorithm(PluginUUID, AlgorithmType.ZHash));
            }

            if (dev.GpuRam >= minBeamMem)
            {
                yield return(new Algorithm(PluginUUID, AlgorithmType.Beam));
            }

            if (dev.GpuRam >= minGrin29Mem)
            {
                yield return(new Algorithm(PluginUUID, AlgorithmType.GrinCuckaroo29));
            }

            if (dev.GpuRam >= minGrin31Mem)
            {
                yield return(new Algorithm(PluginUUID, AlgorithmType.GrinCuckatoo31));
            }
        }
Ejemplo n.º 4
0
 private static bool IsCUDADeviceSupported(CUDADevice cudaDev)
 {
     if (cudaDev == null)
     {
         return(false);
     }
     // SM 5.2+
     return(cudaDev.SM_major >= 6 || (cudaDev.SM_major == 5 && cudaDev.SM_minor > 0));
 }
        private IEnumerable <Algorithm> GetSupportedCUDAAlgorithms(CUDADevice dev)
        {
            const ulong minBeamMem = 4UL << 30;

            if (dev.GpuRam >= minBeamMem)
            {
                yield return(new Algorithm(PluginUUID, AlgorithmType.Beam));
            }
        }
Ejemplo n.º 6
0
        IReadOnlyList <Algorithm> GetSupportedAlgorithms(CUDADevice gpu)
        {
            var algorithms = new List <Algorithm>
            {
                new Algorithm(PluginUUID, AlgorithmType.ZHash),
            };
            var filteredAlgorithms = Filters.FilterInsufficientRamAlgorithmsList(gpu.GpuRam, algorithms);

            return(filteredAlgorithms);
        }
Ejemplo n.º 7
0
        private IEnumerable <Algorithm> GetNvidiaSupportedAlgorithms(CUDADevice gpu)
        {
            var algorithms = new List <Algorithm>
            {
                new Algorithm(PluginUUID, AlgorithmType.CryptoNightR),
            };
            var filteredAlgorithms = Filters.FilterInsufficientRamAlgorithmsList(gpu.GpuRam, algorithms);

            return(filteredAlgorithms);
        }
Ejemplo n.º 8
0
        private IEnumerable <Algorithm> GetSupportedAlgorithms(CUDADevice dev)
        {
            yield return(new Algorithm(PluginUUID, AlgorithmType.Lyra2Z));

            yield return(new Algorithm(PluginUUID, AlgorithmType.X16R));

            yield return(new Algorithm(PluginUUID, AlgorithmType.MTP)
            {
                Enabled = false
            });
        }
Ejemplo n.º 9
0
        private IEnumerable <Algorithm> GetSupportedAlgorithms(CUDADevice gpu)
        {
            var algorithms = PluginSupportedAlgorithms.GetSupportedAlgorithmsNVIDIA(PluginUUID);

            if (PluginSupportedAlgorithms.UnsafeLimits(PluginUUID))
            {
                return(algorithms);
            }
            var filteredAlgorithms = Filters.FilterInsufficientRamAlgorithmsList(gpu.GpuRam, algorithms);

            return(filteredAlgorithms);
        }
Ejemplo n.º 10
0
        private IEnumerable <Algorithm> GetSupportedAlgorithms(CUDADevice gpu)
        {
            var algorithms = new List <Algorithm>
            {
                new Algorithm(PluginUUID, AlgorithmType.GrinCuckatoo31),
                new Algorithm(PluginUUID, AlgorithmType.CuckooCycle),
                new Algorithm(PluginUUID, AlgorithmType.GrinCuckarood29),
            };
            var filteredAlgorithms = Filters.FilterInsufficientRamAlgorithmsList(gpu.GpuRam, algorithms);

            return(filteredAlgorithms);
        }
Ejemplo n.º 11
0
        public void Number()
        {
            int    deviceNumber = 1;
            string deviceName   = "Test Device (Number Test)";
            bool   isPreferred  = false;

            // Construct new CUDADevice object
            CUDADevice cudaDevice = new CUDADevice(deviceNumber, deviceName, isPreferred);

            // Ensure number property returns expected value
            Assert.AreEqual(deviceNumber, cudaDevice.number);
        }
Ejemplo n.º 12
0
        public void IsPreferred()
        {
            int    deviceNumber = 0;
            string deviceName   = "Test Device (IsPreferred Test)";
            bool   isPreferred  = true;

            // Construct new CUDADevice object
            CUDADevice cudaDevice = new CUDADevice(deviceNumber, deviceName, isPreferred);

            // Ensure name property returns expected value
            Assert.AreEqual(isPreferred, cudaDevice.isPreferred);
        }
Ejemplo n.º 13
0
        public void FullConstructor()
        {
            int    deviceNumber = 3;
            string deviceName   = "Test Device (Full Constructor Test)";
            bool   isPreferred  = true;

            // Construct new CUDADevice object
            CUDADevice cudaDevice = new CUDADevice(deviceNumber, deviceName, isPreferred);

            // Ensure CUDADevice object has expected data
            Assert.AreEqual(deviceNumber, cudaDevice.number);
            Assert.AreEqual(deviceName, cudaDevice.name);
            Assert.AreEqual(isPreferred, cudaDevice.isPreferred);
        }
Ejemplo n.º 14
0
        IReadOnlyList <Algorithm> GetSupportedAlgorithms(CUDADevice gpu)
        {
            var algorithms = new List <Algorithm>
            {
                new Algorithm(PluginUUID, AlgorithmType.MTP)
                {
                    Enabled = false
                },
                new Algorithm(PluginUUID, AlgorithmType.Lyra2REv3),
            };
            var filteredAlgorithms = Filters.FilterInsufficientRamAlgorithmsList(gpu.GpuRam, algorithms);

            return(filteredAlgorithms);
        }
Ejemplo n.º 15
0
        private IEnumerable <Algorithm> GetSupportedAlgorithms(CUDADevice dev)
        {
            const ulong minGrin29Mem = 5UL << 30;
            const ulong minGrin31Mem = 8UL << 30;

            if (dev.GpuRam >= minGrin29Mem)
            {
                yield return(new Algorithm(PluginUUID, AlgorithmType.GrinCuckaroo29));
            }

            if (dev.GpuRam >= minGrin31Mem)
            {
                yield return(new Algorithm(PluginUUID, AlgorithmType.GrinCuckatoo31));
            }
        }
Ejemplo n.º 16
0
        IReadOnlyList <Algorithm> GetCUDASupportedAlgorithms(CUDADevice gpu)
        {
            var algorithms = new List <Algorithm>
            {
                new Algorithm(PluginUUID, AlgorithmType.ZHash),
                new Algorithm(PluginUUID, AlgorithmType.GrinCuckatoo31),
                new Algorithm(PluginUUID, AlgorithmType.CuckooCycle)
                {
                    Enabled = false
                },                                                                       //~5% of invalid nonce shares,
                new Algorithm(PluginUUID, AlgorithmType.GrinCuckarood29),
                new Algorithm(PluginUUID, AlgorithmType.BeamV2),
            };
            var filteredAlgorithms = Filters.FilterInsufficientRamAlgorithmsList(gpu.GpuRam, algorithms);

            return(filteredAlgorithms);
        }
        private IEnumerable <Algorithm> GetSupportedAlgorithms(CUDADevice dev)
        {
            const ulong minMem    = 2UL << 30;
            const ulong minMTPMem = 5UL << 30;

            if (dev.GpuRam >= minMem)
            {
                yield return(new Algorithm(PluginUUID, AlgorithmType.Lyra2REv3));

                yield return(new Algorithm(PluginUUID, AlgorithmType.X16R));
            }
            if (dev.GpuRam >= minMTPMem)
            {
                yield return(new Algorithm(PluginUUID, AlgorithmType.MTP)
                {
                    Enabled = false
                });
            }
        }
Ejemplo n.º 18
0
        IReadOnlyList <Algorithm> GetSupportedAlgorithms(CUDADevice gpu)
        {
            //var algorithms = new List<Algorithm> { };
            //// on btctalk ~1.63GB vram
            //const ulong MinZHashMemory = 1879047230; // 1.75GB
            //if (gpu.GpuRam > MinZHashMemory)
            //{
            //    algorithms.Add(new Algorithm(PluginUUID, AlgorithmType.ZHash));
            //}

            //return algorithms;
            var algorithms = new List <Algorithm>
            {
                new Algorithm(PluginUUID, AlgorithmType.ZHash),
            };
            var filteredAlgorithms = Filters.FilterInsufficientRamAlgorithmsList(gpu.GpuRam, algorithms);

            return(filteredAlgorithms);
        }
Ejemplo n.º 19
0
        private Dictionary <BaseDevice, IReadOnlyList <Algorithm> > GetSupportedDevicesAndAlgorithms(IEnumerable <BaseDevice> devices)
        {
            bool isNVIDIADriverGreaterThanMinVersion() => CUDADevice.INSTALLED_NVIDIA_DRIVERS >= NVIDIA_Min_Version;

            bool isSupportedGPU(BaseDevice gpu) =>
            gpu switch
            {
                CUDADevice cuda => isNVIDIADriverGreaterThanMinVersion() && cuda.SM_major >= 6,
                           _ => gpu is AMDDevice,
            };
            if (!isNVIDIADriverGreaterThanMinVersion())
            {
                Logger.Error("ExcavatorPlugin", $"Insufficient NVIDIA driver version. Installed {CUDADevice.INSTALLED_NVIDIA_DRIVERS} Required {NVIDIA_Min_Version}");
            }
            return(devices
                   .Where(isSupportedGPU)
                   .Select(gpu => (gpu, algos: GetSupportedAlgorithmsForDevice(gpu)))
                   .Where(p => p.algos.Any())
                   .ToDictionary(p => p.gpu, p => p.algos));
        }
Ejemplo n.º 20
0
        private IEnumerable <Algorithm> GetSupportedAlgorithms(CUDADevice dev)
        {
            const ulong minMem    = 2UL << 30;
            const ulong minMTPMem = 5UL << 30;

            if (dev.GpuRam >= minMem)
            {
                yield return(new Algorithm(PluginUUID, AlgorithmType.CryptoNightHeavy));

                yield return(new Algorithm(PluginUUID, AlgorithmType.CryptoNightV8));

                yield return(new Algorithm(PluginUUID, AlgorithmType.Lyra2REv3));

                yield return(new Algorithm(PluginUUID, AlgorithmType.NeoScrypt));

                yield return(new Algorithm(PluginUUID, AlgorithmType.X16R));
            }
            if (dev.GpuRam >= minMTPMem)
            {
                yield return(new Algorithm(PluginUUID, AlgorithmType.MTP));
            }
        }
Ejemplo n.º 21
0
        private IEnumerable <Algorithm> GetCUDASupportedAlgorithms(CUDADevice gpu)
        {
            var algorithms = new List <Algorithm>
            {
                new Algorithm(PluginUUID, AlgorithmType.ZHash)
                {
                    Enabled = false
                },
                new Algorithm(PluginUUID, AlgorithmType.DaggerHashimoto)
                {
                    Enabled = false
                },
                new Algorithm(PluginUUID, AlgorithmType.Beam)
                {
                    Enabled = false
                },
                new Algorithm(PluginUUID, AlgorithmType.GrinCuckaroo29),
                new Algorithm(PluginUUID, AlgorithmType.GrinCuckatoo31),
            };
            var filteredAlgorithms = Filters.FilterInsufficientRamAlgorithmsList(gpu.GpuRam, algorithms);

            return(filteredAlgorithms);
        }
Ejemplo n.º 22
0
        private IEnumerable <Algorithm> GetSupportedAlgorithms(CUDADevice dev)
        {
            yield return(new Algorithm(PluginUUID, AlgorithmType.Skunk));

            yield return(new Algorithm(PluginUUID, AlgorithmType.X16R));
        }