在多核(多cpu)下指定process執行於單一核心(cpu) |
|
johnlp
一般會員 發表:2 回覆:13 積分:8 註冊:2004-10-31 發送簡訊給我 |
近年多核心cpu當道
早期開發的某些程式,在多核心的環境下有時會出現莫名其妙的錯誤。 經測試後發現,只要在工作管理員裡的設定相關性指定程式執行於單一cpu,則這些錯誤就不再出現。 不過每次執行程式前要手動做這個動作也是滿麻煩的一件事。 於是開始著手找設定方式。 但找了半天,不論是設定檔或是登錄檔都沒有這類的設定方法。 最後才找到必須用 api 使用方式如下: <textarea name="code" class="cpp" rows="10" cols="90"> HANDLE hProcess = GetCurrentProcess(); DWORD dwProcessAffinityMask, dwSystemAffinityMask; GetProcessAffinityMask( hProcess, &dwProcessAffinityMask, &dwSystemAffinityMask ); // 取得 process Affinity mask SetProcessAffinityMask( hProcess, 1L );// 執行於 CPU 0 SetProcessAffinityMask( hProcess, 2L );// 執行於 CPU 1 SetProcessAffinityMask( hProcess, 3L );// 允許執行與CPU 0 與 CPU 1 (32bit mask) </textarea> |
dllee
站務副站長 發表:321 回覆:2519 積分:1711 註冊:2002-04-15 發送簡訊給我 |
真是太好了,感謝分享
===================引 用 johnlp 文 章=================== 近年多核心cpu當道 早期開發的某些程式,在多核心的環境下有時會出現莫名其妙的錯誤。 經測試後發現,只要在工作管理員裡的設定相關性指定程式執行於單一cpu,則這些錯誤就不再出現。 不過每次執行程式前要手動做這個動作也是滿麻煩的一件事。 於是開始著手找設定方式。 但找了半天,不論是設定檔或是登錄檔都沒有這類的設定方法。 最後才找到必須用 api 使用方式如下: <textarea cols="90" rows="10" class="cpp" name="code">HANDLE hProcess = GetCurrentProcess(); DWORD dwProcessAffinityMask, dwSystemAffinityMask; GetProcessAffinityMask( hProcess, &dwProcessAffinityMask, &dwSystemAffinityMask ); // 取得 process Affinity mask SetProcessAffinityMask( hProcess, 1L );// 執行於 CPU 0 SetProcessAffinityMask( hProcess, 2L );// 執行於 CPU 1 SetProcessAffinityMask( hProcess, 3L );// 允許執行與CPU 0 與 CPU 1 (32bit mask) </textarea>
------
http://www.ViewMove.com |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |