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