summaryrefslogtreecommitdiff
path: root/lib/thread/ncpu+linux.myr
blob: 5c2ea1568ecaf33f0f92b88a7438ae28a047d67f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
use std
use sys

pkg thread =
	const ncpu	: (-> int)
;;

const ncpu = {
	var cpubuf : uint64[4]
	var n

	sys.sched_getaffinity(sys.getpid(), sizeof(uint64[4]), (&cpubuf : uint64#))
	n = 0
	for b : cpubuf[:]
		if b != 0
			n += count(b)
		;;
	;;
	-> n
}

const count = {b
	var n = 0
	for var i = 0; i < 8*sizeof(uint64); i++
		if b & (1<<i) != 0
			n++
		;;
	;;
	-> n
}