2013-12-18 44 views
4

是否有一個很好的跨平臺方法來確定機器在elisp中的處理器數量?我試圖讓我的配置自動檢測一些構建選項,並希望自動使用處理器的數量+ 1. Grepping/proc/cpuinfo不是我的解決方案,因爲它不適用於Windows。獲取emacs中處理器的數量

回答

8

Emacs 24.3 Lisp無權訪問該信息。您的選項似乎包括:

  • 編寫一個Elisp庫,它使用SYSTEM-TYPE的值選擇系統特定的方法來獲取處理器計數;
  • 修改Emacs C源代碼並重建它,以便它可以針對Emacs構建的每個潛在的多處理器平臺,在Lisp級別顯示處理器數量。

至少,這是四小時前,當我第一次開始寫這個答案。但後來我感興趣的問題,現在你有第三個選項:

  • 下載我system-cores.el庫,它實現了第一的上述兩個方案,並呼籲(system-cores :physical)獲得物理處理器的數量,(system-cores :logical)得到邏輯核心的數量,或者只是簡單的(system-cores)以獲得包含兩者的alist。

注意事項包括:

  • 該庫對工藝線功能強烈依賴。如果該函數在需要調用SYSTEM-CORES的上下文中無法做到任何明智的事情,那麼SYSTEM-CORES也不能。 (例如,如果您在達爾文並且(getenv "PATH")不包含/usr/sbin,PROCESS-LINES將用「正在搜索程序:沒有這樣的文件或目錄,system_profiler」進行彈出。)
  • 當前已知的系統是支持的是GNU/Linux(任何帶有/ proc/cpuinfo的內容,或多或少),Windows NT(及其衍生產品,包括2000,XP和所有後續版本),以及達爾文(OS X,理論上至少10.8,如10.2)。不巧的是,這些也是我可以訪問的系統。

    我還包括一個代表,其中應該至少在某些BSD風格上正常工作,但我沒有一個BSD框來測試它,所以不知道它是否會真正的工作 - 至少,你幾乎肯定需要修改由SYSTEM-CORES-SYSCTL委託檢查的sysctl列表。

如果您使用的是Linux,Windows或OS X的各種現代版本,那麼太棒了!你應該很好走,開箱即用。如果沒有,並且如果您的平臺包含一個命令行實用程序,該實用程序在其結果中提供了必需的信息,那麼爲您的系統編寫委託應該不會很困難。或者,如果你不想自己寫一個委託,然後發郵件給我所有的:

  • 的問題
  • 它生產系統上的輸出樣本命令行實用程序調用合適
  • M-: system-type在Emacs
  • M-: system-configuration輸出在Emacs
  • 輸出

,我就可以寫一個代表自己,並將其添加到庫中。

編輯:本:cores:processors關鍵字已改爲分別:physical:logical;我無法讓他們保持直線,我也不明白爲什麼我會期待其他人。

編輯:Per @ lunaryorn,將(split-string (shell-command-to-string ...))替換爲(process-lines ...)。這節省了調用一個shell,這可能會使庫更加可靠,並且使代碼更容易閱讀。

+2

你可以用'process-lines'來替換'(split-string(shell-command-to-string ...))'的各種實例。 – lunaryorn

+0

@ lunaryorn哦,嘿,那不需要調用shell!謝謝你的提示 - 我會相應地更新圖書館。 –