获取emacs中的处理器数量

时间:2013-12-18 19:15:58

标签: emacs elisp

是否有一个很好的跨平台方法来确定机器在elisp中的处理器数量?我正在尝试让我的配置自动检测一些构建选项,并希望它自动使用处理器的数量+ 1. Grepping / proc / cpuinfo对我来说不是一个解决方案,因为它不适用于Windows。

1 个答案:

答案 0 :(得分:9)

Emacs 24.3 Lisp无权访问该信息。您的选择似乎包括:

  • 编写一个Elisp库,该库使用SYSTEM-TYPE的值来选择特定于系统的方法来获取处理器数量;
  • 修改Emacs C源并重建它,以便它可以为Emacs构建的每个可能的多处理器平台公开Lisp级别的处理器计数。

至少,四个小时前,当我第一次开始写这个答案时,这是真的。但后来我对这个问题感兴趣,现在你有了第三个选择:

  • 下载我的system-cores.el库,该库实现上述两个选项中的第一个,并调用(system-cores :physical)以获取物理处理器的数量,(system-cores :logical)以获取逻辑核心的数量,或者只是简单(system-cores)来获得包含两者的列表。

警告包括:

  • 该库强烈依赖于PROCESS-LINES功能。如果该函数在您需要调用SYSTEM-CORES的上下文中无法做任何合理的事情,那么SYSTEM-CORES也不能。 (例如,如果你在Darwin并且(getenv "PATH")不包含/usr/sbin,则PROCESS-LINES会弹出“搜索程序:没有这样的文件或目录,system_profiler”。)
  • 目前已知支持的系统是GNU / Linux(任何带有/ proc / cpuinfo的东西,或多或少),Windows NT(及其衍生产品,包括2000,XP和所有后续版本),以及Darwin (OS X,至少10.8,理论上可以追溯到10.2)。并非巧合,这些也是我可以访问的系统。

    我还包括一个应该至少在某些BSD版本上正常工作的代理,但是我没有可以测试它的BSD框,所以不知道是否或者不是它真的有用 - 至少,你几乎肯定需要修改SYSTEM-CORES-SYSCTL代表检查的sysctl列表。

如果您正在使用各种现代Linux,Windows或OS X,那太好了!开箱即用你应该很好。如果没有,并且如果您的平台包含一个命令行实用程序,该实用程序在其结果中提供必要的信息,那么为您的系统编写委托应该不难。或者,如果您不想自己写代理,请给我发电子邮件:

  • 正确调用有问题的命令行实用程序
  • 它在您的系统上生成的输出样本
  • Emacs中M-: system-type的输出
  • Emacs中M-: system-configuration的输出

我将能够自己编写代理并将其添加到库中。

修改:cores:processors个关键字分别替换为:physical:logical;我无法保持他们的直率,我也不明白为什么我也应该期待其他人。

编辑:根据@lunaryorn,将(split-string (shell-command-to-string ...))替换为(process-lines ...)。这样可以节省调用shell,这可能使库更可靠,并且当然使代码更容易阅读。