Пример #1
0
 public Config() // set defaults
 {
     isLogFile              = false;
     minerJsonAPI           = Defaults.JsonAPIPath;
     minerCcminerAPI        = Defaults.CcminerAPIPath;
     web3api                = Defaults.InfuraAPI_mainnet;
     contractAddress        = Defaults.Contract0xBTC_mainnet;
     abiFile                = Defaults.AbiFile0xBTC;
     overrideMaxTarget      = new HexBigInteger(BigInteger.Zero);
     customDifficulty       = BigInteger.Zero;
     submitStale            = Defaults.SubmitStale;
     maxScanRetry           = Defaults.MaxScanRetry;
     pauseOnFailedScans     = Defaults.PauseOnFailedScan;
     networkUpdateInterval  = Defaults.NetworkUpdateInterval;
     hashrateUpdateInterval = Defaults.HashrateUpdateInterval;
     masterMode             = false;
     masterURL              = string.Empty;
     kingAddress            = string.Empty;
     minerAddress           = DevFee.Address;
     slaveUpdateInterval    = Defaults.SlaveUpdateInterval;
     primaryPool            = Defaults.PoolPrimary;
     secondaryPool          = string.Empty;
     privateKey             = string.Empty;
     gasToMine              = Defaults.GasToMine;
     gasLimit               = Defaults.GasLimit;
     gasApiURL              = Defaults.GasApiURL;
     gasApiPath             = Defaults.GasApiPath;
     gasApiMultiplier       = Defaults.GasApiMultiplier;
     gasApiOffset           = Defaults.GasApiOffset;
     gasApiMax              = Defaults.GasApiMax;
     allowCPU               = false;
     cpuDevice              = new Miner.Device.CPU();
     allowIntel             = true;
     intelDevices           = new Miner.Device.OpenCL[] { };
     allowAMD               = true;
     amdDevices             = new Miner.Device.OpenCL[] { };
     allowCUDA              = true;
     cudaDevices            = new Miner.Device.CUDA[] { };
 }
Пример #2
0
        private void CheckOpenCLConfig(string[] args)
        {
            if (!Program.AllowAMD && !Program.AllowIntel)
            {
                return;
            }

            if (args.All(a => !a.StartsWith("amdDevice")))
            {
                Program.Print("OpenCL [INFO] AMD APP device not specified, default assign all AMD APP devices.");
            }

            try
            {
                var maxPlatformCount = 5u;
                var maxDeviceCount   = 64u;

                using (var sha3KernelStream = typeof(Program).Assembly.GetManifestResourceStream("SoliditySHA3Miner.Miner.Kernels.OpenCL.sha3Kernel.cl"))
                {
                    var sha3KernelBin = Array.CreateInstance(typeof(byte), sha3KernelStream.Length) as byte[];
                    sha3KernelStream.Read(sha3KernelBin, 0, sha3KernelBin.Length);

                    using (var sha3KingKernelStream = typeof(Program).Assembly.GetManifestResourceStream("SoliditySHA3Miner.Miner.Kernels.OpenCL.sha3KingKernel.cl"))
                    {
                        var sha3KingKernelBin = Array.CreateInstance(typeof(byte), sha3KingKernelStream.Length) as byte[];
                        sha3KingKernelStream.Read(sha3KingKernelBin, 0, sha3KingKernelBin.Length);

                        var sha3Kernel     = new StringBuilder(Encoding.ASCII.GetString(sha3KernelBin));
                        var sha3KingKernel = new StringBuilder(Encoding.ASCII.GetString(sha3KingKernelBin));
                        OpenCL.Solver.PreInitialize(sha3Kernel, sha3KingKernel, (ulong)sha3KernelBin.Length, (ulong)sha3KingKernelBin.Length);
                    }
                }

                var platformCount   = 0u;
                var platformPointer = IntPtr.Zero;
                var errorMessage    = new StringBuilder(1024);

                OpenCL.Solver.GetPlatforms(ref platformPointer, maxPlatformCount, ref platformCount, errorMessage);
                if (errorMessage.Length > 0)
                {
                    Program.Print("OpenCL [ERROR] " + errorMessage.ToString());
                    return;
                }

                var platforms = (Structs.DeviceCL.Platform[])Array.CreateInstance(typeof(Structs.DeviceCL.Platform), platformCount);
                unsafe
                {
                    Structs.DeviceCL.Platform *tempPlatforms = (Structs.DeviceCL.Platform *)platformPointer.ToPointer();
                    for (var i = 0; i < platformCount; i++)
                    {
                        platforms[i] = tempPlatforms[i];
                    }
                }

                var amdPlatform   = platforms.FirstOrDefault(p => string.Concat(p.NameToString()).IndexOf("AMD Accelerated Parallel Processing", StringComparison.OrdinalIgnoreCase) > -1);
                var intelPlatform = platforms.FirstOrDefault(p => string.Concat(p.NameToString()).IndexOf("Intel(R) OpenCL", StringComparison.OrdinalIgnoreCase) > -1);
                var cudaPlatform  = platforms.FirstOrDefault(p => string.Concat(p.NameToString()).IndexOf("NVIDIA CUDA", StringComparison.OrdinalIgnoreCase) > -1);

                if (Program.AllowAMD && amdPlatform.ID != IntPtr.Zero)
                {
                    var deviceCount    = 0u;
                    var devicesPointer = IntPtr.Zero;
                    OpenCL.Solver.GetDevicesByPlatform(amdPlatform, maxDeviceCount, ref deviceCount, ref devicesPointer, errorMessage);

                    if (errorMessage.Length > 0)
                    {
                        var errMessage = errorMessage.ToString();

                        if (errMessage.IndexOf("CL_DEVICE_NOT_FOUND") > -1)
                        {
                            Program.Print("OpenCL [WARN] " + errMessage);
                        }
                        else
                        {
                            Program.Print("OpenCL [ERROR] " + errMessage);
                        }

                        errorMessage.Clear();
                    }
                    else
                    {
                        if (deviceCount < 1)
                        {
                            amdDevices = (Miner.Device.OpenCL[])Array.CreateInstance(typeof(Miner.Device.OpenCL), 0);
                        }
                        else
                        {
                            var devices = (Structs.DeviceCL[])Array.CreateInstance(typeof(Structs.DeviceCL), deviceCount);
                            unsafe
                            {
                                Structs.DeviceCL *tempDevices = (Structs.DeviceCL *)devicesPointer.ToPointer();
                                for (var i = 0; i < deviceCount; i++)
                                {
                                    devices[i] = tempDevices[i];
                                }
                            }

                            var tempAmdList = new List <Miner.Device.OpenCL>((int)deviceCount);
                            for (int i = 0; i < deviceCount; i++)
                            {
                                var userDevice = amdDevices?.FirstOrDefault(d => d.DeviceID.Equals(i));

                                var newDevice = new Miner.Device.OpenCL
                                {
                                    AllowDevice     = userDevice?.AllowDevice ?? true,
                                    DeviceCL_Struct = devices[i],
                                    Type            = "OpenCL",
                                    Platform        = "AMD Accelerated Parallel Processing",
                                    DeviceID        = i,
                                    PciBusID        = userDevice?.PciBusID ?? 0,
                                    Intensity       = userDevice?.Intensity ?? 0
                                };
                                try { newDevice.Name = devices[i].NameToString(); }
                                catch { }
                                tempAmdList.Add(newDevice);
                            }
                            amdDevices = tempAmdList.ToArray();
                        }
                    }
                }

                if (Program.AllowIntel && intelPlatform.ID != IntPtr.Zero)
                {
                    Program.Print("OpenCL [INFO] Assign all Intel(R) OpenCL devices.");

                    var deviceCount    = 0u;
                    var devicesPointer = IntPtr.Zero;
                    OpenCL.Solver.GetDevicesByPlatform(intelPlatform, maxDeviceCount, ref deviceCount, ref devicesPointer, errorMessage);

                    if (errorMessage.Length > 0)
                    {
                        var errMessage = errorMessage.ToString();

                        if (errMessage.IndexOf("CL_DEVICE_NOT_FOUND") > -1)
                        {
                            Program.Print("OpenCL [WARN] " + errMessage);
                        }
                        else
                        {
                            Program.Print("OpenCL [ERROR] " + errMessage);
                        }

                        errorMessage.Clear();
                    }
                    else
                    {
                        if (deviceCount < 1)
                        {
                            intelDevices = (Miner.Device.OpenCL[])Array.CreateInstance(typeof(Miner.Device.OpenCL), 0);
                        }
                        else
                        {
                            var devices = (Structs.DeviceCL[])Array.CreateInstance(typeof(Structs.DeviceCL), deviceCount);
                            unsafe
                            {
                                Structs.DeviceCL *tempDevices = (Structs.DeviceCL *)devicesPointer.ToPointer();
                                for (var i = 0; i < deviceCount; i++)
                                {
                                    devices[i] = tempDevices[i];
                                }
                            }

                            var tempIntelList = new List <Miner.Device.OpenCL>((int)deviceCount);
                            for (int i = 0; i < deviceCount; i++)
                            {
                                var userDevice = intelDevices?.FirstOrDefault(d => d.DeviceID.Equals(i));

                                tempIntelList.Add(new Miner.Device.OpenCL
                                {
                                    AllowDevice     = userDevice?.AllowDevice ?? true,
                                    DeviceCL_Struct = devices[i],
                                    Type            = "OpenCL",
                                    Platform        = "Intel(R) OpenCL",
                                    DeviceID        = i,
                                    Name            = devices[i].NameToString(),
                                    Intensity       = userDevice?.Intensity ?? 0
                                });
                            }
                            intelDevices = tempIntelList.ToArray();
                        }
                    }
                }
            }
            catch (DllNotFoundException)
            {
                Program.Print("OpenCL [WARN] OpenCL not found.");
            }
            catch (Exception ex)
            {
                Program.Print(ex.ToString());
            }
        }