annotate config/ax_count_cpus.m4 @ 158:494b0b89df80 default tip

...
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Mon, 25 May 2020 18:13:55 +0900
parents 1830386684a0
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
145
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
1 # ===========================================================================
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
2 # https://www.gnu.org/software/autoconf-archive/ax_count_cpus.html
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
3 # ===========================================================================
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
4 #
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
5 # SYNOPSIS
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
6 #
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
7 # AX_COUNT_CPUS([ACTION-IF-DETECTED],[ACTION-IF-NOT-DETECTED])
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
8 #
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
9 # DESCRIPTION
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
10 #
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
11 # Attempt to count the number of logical processor cores (including
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
12 # virtual and HT cores) currently available to use on the machine and
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
13 # place detected value in CPU_COUNT variable.
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
14 #
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
15 # On successful detection, ACTION-IF-DETECTED is executed if present. If
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
16 # the detection fails, then ACTION-IF-NOT-DETECTED is triggered. The
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
17 # default ACTION-IF-NOT-DETECTED is to set CPU_COUNT to 1.
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
18 #
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
19 # LICENSE
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
20 #
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
21 # Copyright (c) 2014,2016 Karlson2k (Evgeny Grin) <k2k@narod.ru>
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
22 # Copyright (c) 2012 Brian Aker <brian@tangent.org>
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
23 # Copyright (c) 2008 Michael Paul Bailey <jinxidoru@byu.net>
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
24 # Copyright (c) 2008 Christophe Tournayre <turn3r@users.sourceforge.net>
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
25 #
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
26 # Copying and distribution of this file, with or without modification, are
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
27 # permitted in any medium without royalty provided the copyright notice
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
28 # and this notice are preserved. This file is offered as-is, without any
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
29 # warranty.
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
30
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
31 #serial 22
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
32
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
33 AC_DEFUN([AX_COUNT_CPUS],[dnl
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
34 AC_REQUIRE([AC_CANONICAL_HOST])dnl
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
35 AC_REQUIRE([AC_PROG_EGREP])dnl
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
36 AC_MSG_CHECKING([the number of available CPUs])
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
37 CPU_COUNT="0"
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
38
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
39 # Try generic methods
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
40
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
41 # 'getconf' is POSIX utility, but '_NPROCESSORS_ONLN' and
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
42 # 'NPROCESSORS_ONLN' are platform-specific
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
43 command -v getconf >/dev/null 2>&1 && \
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
44 CPU_COUNT=`getconf _NPROCESSORS_ONLN 2>/dev/null || getconf NPROCESSORS_ONLN 2>/dev/null` || CPU_COUNT="0"
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
45 AS_IF([[test "$CPU_COUNT" -gt "0" 2>/dev/null || ! command -v nproc >/dev/null 2>&1]],[[: # empty]],[dnl
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
46 # 'nproc' is part of GNU Coreutils and is widely available
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
47 CPU_COUNT=`OMP_NUM_THREADS='' nproc 2>/dev/null` || CPU_COUNT=`nproc 2>/dev/null` || CPU_COUNT="0"
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
48 ])dnl
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
49
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
50 AS_IF([[test "$CPU_COUNT" -gt "0" 2>/dev/null]],[[: # empty]],[dnl
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
51 # Try platform-specific preferred methods
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
52 AS_CASE([[$host_os]],dnl
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
53 [[*linux*]],[[CPU_COUNT=`lscpu -p 2>/dev/null | $EGREP -e '^@<:@0-9@:>@+,' -c` || CPU_COUNT="0"]],dnl
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
54 [[*darwin*]],[[CPU_COUNT=`sysctl -n hw.logicalcpu 2>/dev/null` || CPU_COUNT="0"]],dnl
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
55 [[freebsd*]],[[command -v sysctl >/dev/null 2>&1 && CPU_COUNT=`sysctl -n kern.smp.cpus 2>/dev/null` || CPU_COUNT="0"]],dnl
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
56 [[netbsd*]], [[command -v sysctl >/dev/null 2>&1 && CPU_COUNT=`sysctl -n hw.ncpuonline 2>/dev/null` || CPU_COUNT="0"]],dnl
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
57 [[solaris*]],[[command -v psrinfo >/dev/null 2>&1 && CPU_COUNT=`psrinfo 2>/dev/null | $EGREP -e '^@<:@0-9@:>@.*on-line' -c 2>/dev/null` || CPU_COUNT="0"]],dnl
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
58 [[mingw*]],[[CPU_COUNT=`ls -qpU1 /proc/registry/HKEY_LOCAL_MACHINE/HARDWARE/DESCRIPTION/System/CentralProcessor/ 2>/dev/null | $EGREP -e '^@<:@0-9@:>@+/' -c` || CPU_COUNT="0"]],dnl
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
59 [[msys*]],[[CPU_COUNT=`ls -qpU1 /proc/registry/HKEY_LOCAL_MACHINE/HARDWARE/DESCRIPTION/System/CentralProcessor/ 2>/dev/null | $EGREP -e '^@<:@0-9@:>@+/' -c` || CPU_COUNT="0"]],dnl
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
60 [[cygwin*]],[[CPU_COUNT=`ls -qpU1 /proc/registry/HKEY_LOCAL_MACHINE/HARDWARE/DESCRIPTION/System/CentralProcessor/ 2>/dev/null | $EGREP -e '^@<:@0-9@:>@+/' -c` || CPU_COUNT="0"]]dnl
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
61 )dnl
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
62 ])dnl
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
63
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
64 AS_IF([[test "$CPU_COUNT" -gt "0" 2>/dev/null || ! command -v sysctl >/dev/null 2>&1]],[[: # empty]],[dnl
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
65 # Try less preferred generic method
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
66 # 'hw.ncpu' exist on many platforms, but not on GNU/Linux
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
67 CPU_COUNT=`sysctl -n hw.ncpu 2>/dev/null` || CPU_COUNT="0"
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
68 ])dnl
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
69
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
70 AS_IF([[test "$CPU_COUNT" -gt "0" 2>/dev/null]],[[: # empty]],[dnl
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
71 # Try platform-specific fallback methods
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
72 # They can be less accurate and slower then preferred methods
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
73 AS_CASE([[$host_os]],dnl
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
74 [[*linux*]],[[CPU_COUNT=`$EGREP -e '^processor' -c /proc/cpuinfo 2>/dev/null` || CPU_COUNT="0"]],dnl
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
75 [[*darwin*]],[[CPU_COUNT=`system_profiler SPHardwareDataType 2>/dev/null | $EGREP -i -e 'number of cores:'|cut -d : -f 2 -s|tr -d ' '` || CPU_COUNT="0"]],dnl
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
76 [[freebsd*]],[[CPU_COUNT=`dmesg 2>/dev/null| $EGREP -e '^cpu@<:@0-9@:>@+: '|sort -u|$EGREP -e '^' -c` || CPU_COUNT="0"]],dnl
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
77 [[netbsd*]], [[CPU_COUNT=`command -v cpuctl >/dev/null 2>&1 && cpuctl list 2>/dev/null| $EGREP -e '^@<:@0-9@:>@+ .* online ' -c` || \
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
78 CPU_COUNT=`dmesg 2>/dev/null| $EGREP -e '^cpu@<:@0-9@:>@+ at'|sort -u|$EGREP -e '^' -c` || CPU_COUNT="0"]],dnl
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
79 [[solaris*]],[[command -v kstat >/dev/null 2>&1 && CPU_COUNT=`kstat -m cpu_info -s state -p 2>/dev/null | $EGREP -c -e 'on-line'` || \
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
80 CPU_COUNT=`kstat -m cpu_info 2>/dev/null | $EGREP -c -e 'module: cpu_info'` || CPU_COUNT="0"]],dnl
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
81 [[mingw*]],[AS_IF([[CPU_COUNT=`reg query 'HKLM\\Hardware\\Description\\System\\CentralProcessor' 2>/dev/null | $EGREP -e '\\\\@<:@0-9@:>@+$' -c`]],dnl
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
82 [[: # empty]],[[test "$NUMBER_OF_PROCESSORS" -gt "0" 2>/dev/null && CPU_COUNT="$NUMBER_OF_PROCESSORS"]])],dnl
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
83 [[msys*]],[[test "$NUMBER_OF_PROCESSORS" -gt "0" 2>/dev/null && CPU_COUNT="$NUMBER_OF_PROCESSORS"]],dnl
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
84 [[cygwin*]],[[test "$NUMBER_OF_PROCESSORS" -gt "0" 2>/dev/null && CPU_COUNT="$NUMBER_OF_PROCESSORS"]]dnl
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
85 )dnl
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
86 ])dnl
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
87
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
88 AS_IF([[test "x$CPU_COUNT" != "x0" && test "$CPU_COUNT" -gt 0 2>/dev/null]],[dnl
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
89 AC_MSG_RESULT([[$CPU_COUNT]])
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
90 m4_ifvaln([$1],[$1],)dnl
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
91 ],[dnl
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
92 m4_ifval([$2],[dnl
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
93 AS_UNSET([[CPU_COUNT]])
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
94 AC_MSG_RESULT([[unable to detect]])
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
95 $2
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
96 ], [dnl
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
97 CPU_COUNT="1"
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
98 AC_MSG_RESULT([[unable to detect (assuming 1)]])
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
99 ])dnl
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
100 ])dnl
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
101 ])dnl