CNTKUtility.cs 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. using System;
  2. namespace WingAIDiagnosisService.Carotid.Utilities
  3. {
  4. public enum PerformanceAbility
  5. {
  6. Low = 0,
  7. Medium = 1,
  8. High = 2,
  9. Maximum = 3
  10. }
  11. class CNTKUtility
  12. {
  13. public static void SetMaxNumCPUThreads(PerformanceAbility performanceAbility)
  14. {
  15. int numLogicalProcessor = Environment.ProcessorCount;
  16. int numAvailableProcessor = 1;
  17. int numWorker = 1;
  18. switch (performanceAbility)
  19. {
  20. case PerformanceAbility.Maximum:
  21. numAvailableProcessor = Math.Max(Convert.ToInt32(Math.Round(numLogicalProcessor * 0.8)), 1);
  22. numWorker = Math.Min(Math.Max(Convert.ToInt32(Math.Round(numAvailableProcessor * 0.5)), 1), 8);
  23. break;
  24. case PerformanceAbility.High:
  25. numAvailableProcessor = Math.Max(Convert.ToInt32(Math.Round(numLogicalProcessor * 0.6)), 1);
  26. numWorker = Math.Min(Math.Max(Convert.ToInt32(Math.Round(numAvailableProcessor * 0.5)), 1), 4);
  27. break;
  28. case PerformanceAbility.Medium:
  29. numAvailableProcessor = Math.Max(Convert.ToInt32(Math.Round(numLogicalProcessor * 0.4)), 1);
  30. numWorker = Math.Min(Math.Max(Convert.ToInt32(Math.Round(numAvailableProcessor * 0.5)), 1), 2);
  31. break;
  32. default:
  33. numAvailableProcessor = 1;
  34. break;
  35. }
  36. //CNTK.Utils.SetMaxNumCPUThreads(numWorker);
  37. }
  38. }
  39. }