gpt4 book ai didi

ocaml - 如何使用 OCaml 获取机器上的内核数?

转载 作者:行者123 更新时间:2023-12-04 17:50:59 25 4
gpt4 key购买 nike

我正在并行化我的 OCaml 程序中的一些工作(使用 parmap ),但我不希望将内核数量硬编码到我的应用程序中。有没有办法在运行时获取核心数量?我宁愿不再添加任何依赖项(不超过 parmap 或 JS 的 core )。我有一种感觉,我在看 stdlib 中的一些简单调用......

编辑:它不必是可移植的。在 linux 上工作就足够了。

最佳答案

once有同样的问题。这就是我最终带来的(我不想要 C 绑定(bind)):

let cpu_count () = 
try match Sys.os_type with
| "Win32" -> int_of_string (Sys.getenv "NUMBER_OF_PROCESSORS")
| _ ->
let i = Unix.open_process_in "getconf _NPROCESSORS_ONLN" in
let close () = ignore (Unix.close_process_in i) in
try Scanf.fscanf i "%d" (fun n -> close (); n) with e -> close (); raise e
with
| Not_found | Sys_error _ | Failure _ | Scanf.Scan_failure _
| End_of_file | Unix.Unix_error (_, _, _) -> 1

如果你不想要 Unix你可以替换 open_process_in通过 Sys.command写入临时文件。在 linux 和 osx 上测试过,据报道可以在 mingw 上工作,但当时不能在 cygwin 上工作。

更新。 请注意,这在 freebsd 上不起作用,正如提到的 here你需要使用 sysctl -n hw.ncpu .然而自从 Sys.os_type没有正确的粒度,您需要以 uname -s 的结果为条件每当 Sys.os_type不同于 Win32 .

关于ocaml - 如何使用 OCaml 获取机器上的内核数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16269393/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com