日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

如何让程序运行在所有CPU核心上

發布時間:2025/5/22 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 如何让程序运行在所有CPU核心上 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

先解釋幾個概念:多CPU,多核,超線程

多CPU:(一臺主機的)主板上有多個CPU。

多核:一個CPU有多個核心(下圖是6個物理核心)。

超線程:CPU有一個重要的參數是某個型號的CPU是否支持超線程。例如,某個CPU有4個物理核心,它支持超線程技術,那么在邏輯上可以看作8個核心(也叫4核8線程)。比如我們在中關村在線上看到某款CPU的參數如下:

表明這款CPU是支持超線程技術的。

?

在Windows系統下如何設置一個進程能在所有的(邏輯)核心上執行呢?

方法一:在任務管理器中設置進程的相關性。

方法二:在C#中Environment.ProcessorCount可以得到當前CPU的所有邏輯核心。

1 static void SetProcessorAffinity() 2 { 3 pfcLogger logger = new pfcLogger(); 4 5 try 6 { 7 Process proc = Process.GetCurrentProcess(); 8 long affinitymask = (long)proc.ProcessorAffinity; 9 10 switch (Environment.ProcessorCount) 11 { 12 //Environment.ProcessorCount includes any hyperthreaded processors 13 14 case 2: affinitymask = 0x0003; break; // number of logical processors: 2 15 case 4: affinitymask = 0x000F; break; // number of logical processors: 4 16 case 8: affinitymask = 0x00FF; break; // number of logical processors: 8 17 case 12: affinitymask = 0x0FFF; break; // number of logical processors: 12 18 case 16: affinitymask = 0xFFFF; break; // number of logical processors: 16 19 default: break; // keep its default processorAffinity 20 } 21 proc.ProcessorAffinity = (IntPtr)affinitymask; 22 } 23 catch (System.ComponentModel.Win32Exception cwe) 24 { 25 MessageBox.Show("Fail to set processor affinity attribute. " + cwe.Message); 26 logger.Error(DateTime.Now, null, "PackOne.Server.Startup.Program", MethodBase.GetCurrentMethod().Name, cwe); 27 } 28 catch (System.NotSupportedException nse) 29 { 30 MessageBox.Show("Fail to set processor affinity attribute. " + nse.Message); 31 logger.Error(DateTime.Now, null, "PackOne.Server.Startup.Program", MethodBase.GetCurrentMethod().Name, nse); 32 } 33 catch (System.InvalidOperationException ioe) 34 { 35 MessageBox.Show("Fail to set processor affinity attribute. " + ioe.Message); 36 logger.Error(DateTime.Now, null, "PackOne.Server.Startup.Program", MethodBase.GetCurrentMethod().Name, ioe); 37 } 38 catch (Exception e) 39 { 40 MessageBox.Show("Fail to set processor affinity attribute. " + e.Message); 41 logger.Error(DateTime.Now, null, "PackOne.Server.Startup.Program", MethodBase.GetCurrentMethod().Name, e); 42 } 43 }

說明:上面的代碼的關鍵部分是這樣:

Process proc = Process.GetCurrentProcess();long affinitymask = (long)proc.ProcessorAffinity;switch (Environment.ProcessorCount){//Environment.ProcessorCount includes any hyperthreaded processorscase 2: affinitymask = 0x0003; break; // number of logical processors: 2case 4: affinitymask = 0x000F; break; // number of logical processors: 4case 8: affinitymask = 0x00FF; break; // number of logical processors: 8case 12: affinitymask = 0x0FFF; break; // number of logical processors: 12case 16: affinitymask = 0xFFFF; break; // number of logical processors: 16default: break; // keep its default processorAffinity }proc.ProcessorAffinity = (IntPtr)affinitymask;

其他代碼是用于寫日志和異常處理的。

?

另外,如何在windows上查看某個CPU的物理核心和邏輯核心呢?

使用命令:WMIC CPU Get DeviceID,NumberOfCores,NumberOfLogicalProcessors

?如果NumberOfCores =?NumberOfLogicalProcessors ,則表明該CPU不支持超線程。

?

轉載于:https://www.cnblogs.com/freecodeX/p/4333259.html

總結

以上是生活随笔為你收集整理的如何让程序运行在所有CPU核心上的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。