On linux, available CPUs is more useful information.

This commit is contained in:
Calvin Rose 2022-05-28 12:19:25 -05:00
parent 48289acee6
commit 8145f3b68d
3 changed files with 17 additions and 1 deletions

View File

@ -1,6 +1,9 @@
# Changelog
All notable changes to this project will be documented in this file.
## Unreleased - ???
- Added `os/cpu-count` to get the number of available processors on a machine
## 1.22.0 - 2022-05-09
- Prohibit negative size argument to `table/new`.
- Add `module/value`.

View File

@ -36,6 +36,11 @@
# endif
#endif
/* Needed for sched.h for cpu count */
#ifdef __linux__
#define _GNU_SOURCE
#endif
#if defined(WIN32) || defined(_WIN32)
#define WIN32_LEAN_AND_MEAN
#endif

View File

@ -43,6 +43,10 @@
#include <sys/sysctl.h>
#endif
#ifdef JANET_LINUX
#include <sched.h>
#endif
#ifdef JANET_WINDOWS
#include <windows.h>
#include <direct.h>
@ -218,7 +222,11 @@ JANET_CORE_FN(os_cpu_count,
return janet_wrap_integer(info.dwNumberOfProcessors);
#elif defined(JANET_LINUX)
(void) dflt;
return janet_wrap_integer(sysconf(_SC_NPROCESSORS_ONLN));
cpu_set_t cs;
CPU_ZERO(&cs);
sched_getaffinity(0, sizeof(cs), &cs);
int count = CPU_COUNT(&cs);
return janet_wrap_integer(count);
#elif defined(JANET_BSD) && defined(HW_NCPUONLINE)
(void) dflt;
const int name[2] = {CTL_HW, HW_NCPUONLINE};