std.parallelism: Use core.sys.platform.sys.sysctl module

This commit is contained in:
Iain Buclaw 2021-02-01 15:38:48 +01:00
parent d8cde81d0a
commit 87e5ab73b8

View file

@ -95,23 +95,6 @@ import std.meta;
import std.range.primitives;
import std.traits;
version (Darwin)
{
version = useSysctlbyname;
}
else version (FreeBSD)
{
version = useSysctlbyname;
}
else version (DragonFlyBSD)
{
version = useSysctlbyname;
}
else version (NetBSD)
{
version = useSysctlbyname;
}
/*
(For now public undocumented with reserved name.)
@ -952,11 +935,6 @@ if (is(typeof(fun(args))) && isSafeTask!F)
return ret;
}
version (useSysctlbyname)
private extern(C) int sysctlbyname(
const char *, void *, size_t *, void *, size_t
) @nogc nothrow;
/**
The total number of CPU cores available on the current machine, as reported by
the operating system.
@ -989,6 +967,38 @@ uint totalCPUsImpl() @nogc nothrow @trusted
}
return cast(uint) sysconf(_SC_NPROCESSORS_ONLN);
}
else version (Darwin)
{
import core.sys.darwin.sys.sysctl : sysctlbyname;
uint result;
size_t len = result.sizeof;
sysctlbyname("hw.physicalcpu", &result, &len, null, 0);
return result;
}
else version (DragonFlyBSD)
{
import core.sys.dragonflybsd.sys.sysctl : sysctlbyname;
uint result;
size_t len = result.sizeof;
sysctlbyname("hw.ncpu", &result, &len, null, 0);
return result;
}
else version (FreeBSD)
{
import core.sys.freebsd.sys.sysctl : sysctlbyname;
uint result;
size_t len = result.sizeof;
sysctlbyname("hw.ncpu", &result, &len, null, 0);
return result;
}
else version (NetBSD)
{
import core.sys.netbsd.sys.sysctl : sysctlbyname;
uint result;
size_t len = result.sizeof;
sysctlbyname("hw.ncpu", &result, &len, null, 0);
return result;
}
else version (Solaris)
{
import core.sys.posix.unistd : _SC_NPROCESSORS_ONLN, sysconf;
@ -999,30 +1009,6 @@ uint totalCPUsImpl() @nogc nothrow @trusted
import core.sys.posix.unistd : _SC_NPROCESSORS_ONLN, sysconf;
return cast(uint) sysconf(_SC_NPROCESSORS_ONLN);
}
else version (useSysctlbyname)
{
version (Darwin)
{
enum nameStr = "hw.physicalcpu";
}
else version (FreeBSD)
{
auto nameStr = "hw.ncpu\0".ptr;
}
else version (DragonFlyBSD)
{
auto nameStr = "hw.ncpu\0".ptr;
}
else version (NetBSD)
{
auto nameStr = "hw.ncpu\0".ptr;
}
uint result;
size_t len = result.sizeof;
sysctlbyname(nameStr, &result, &len, null, 0);
return result;
}
else
{
static assert(0, "Don't know how to get N CPUs on this OS.");