Ejemplo n.º 1
0
                /// <summary>
                /// 选择默认内核
                /// </summary>
                /// <param name="coin"></param>
                /// <returns></returns>
                private static Guid GetDefaultCoinKernelId(ICoin coin)
                {
                    var  root         = NTMinerRoot.Instance;
                    Guid coinKernelId = Guid.Empty;
                    bool noneGpu      = false;

                    if (root.GpuSet.GpuType == GpuType.Empty)
                    {
                        noneGpu = true;
                    }
                    List <ICoinKernel> coinKernels;

                    if (noneGpu)
                    {
                        coinKernels = root.ServerContext.CoinKernelSet.AsEnumerable().Where(a => a.CoinId == coin.GetId()).ToList();
                    }
                    else
                    {
                        coinKernels = root.ServerContext.CoinKernelSet.AsEnumerable().Where(a => a.CoinId == coin.GetId() && a.SupportedGpu.IsSupportedGpu(root.GpuSet.GpuType)).ToList();
                    }
                    var items = new List <Tuple <Guid, IKernel> >(coinKernels.Count);

                    foreach (var item in coinKernels)
                    {
                        if (root.ServerContext.KernelSet.TryGetKernel(item.KernelId, out IKernel kernel))
                        {
                            items.Add(new Tuple <Guid, IKernel>(item.GetId(), kernel));
                        }
                    }
                    items = items.OrderBy(a => a.Item2.Code).ThenByDescending(a => a.Item2.Version).ToList();
                    Guid kernelBrandId = coin.GetKernelBrandId(root.GpuSet.GpuType);

                    if (kernelBrandId == Guid.Empty)
                    {
                        coinKernelId = items.Select(a => a.Item1).FirstOrDefault();
                    }
                    else
                    {
                        coinKernelId = items.Where(a => a.Item2.BrandId == kernelBrandId).Select(a => a.Item1).FirstOrDefault();
                    }
                    return(coinKernelId);
                }