Mercurial > octave
annotate libinterp/corefcn/nproc.cc @ 27032:0ee0bb5eb381
make nproc default to "overridable" to agree with nproc shell utility
* nproc.cc (Fnproc): Set default to OCTAVE_NPROC_CURRENT_OVERRIDABLE. Add BIST
test.
* oct-fftw.cc (fftw_planner::fftw_planner): Use OCTAVE_NPROC_CURRENT_OVERRIDABLE
for default thread count. (float_fftw_planner::float_fftw_planner): Likewise.
author | Mike Miller <mtmiller@octave.org> |
---|---|
date | Sat, 06 Apr 2019 18:39:32 -0700 |
parents | 00f796120a6d |
children | 396d17dcfb9f |
rev | line source |
---|---|
12510
a1b2da4967ac
Add nproc, nproc_conf utility functions for determining number of available processors.
Iain Murray <iain@iainmurray.net>
parents:
diff
changeset
|
1 /* |
a1b2da4967ac
Add nproc, nproc_conf utility functions for determining number of available processors.
Iain Murray <iain@iainmurray.net>
parents:
diff
changeset
|
2 |
26376
00f796120a6d
maint: Update copyright dates in all source files.
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
3 Copyright (C) 2012-2019 Iain Murray |
12510
a1b2da4967ac
Add nproc, nproc_conf utility functions for determining number of available processors.
Iain Murray <iain@iainmurray.net>
parents:
diff
changeset
|
4 |
a1b2da4967ac
Add nproc, nproc_conf utility functions for determining number of available processors.
Iain Murray <iain@iainmurray.net>
parents:
diff
changeset
|
5 This file is part of Octave. |
a1b2da4967ac
Add nproc, nproc_conf utility functions for determining number of available processors.
Iain Murray <iain@iainmurray.net>
parents:
diff
changeset
|
6 |
24534
194eb4bd202b
maint: Update punctuation for GPL v3 license text.
Rik <rik@octave.org>
parents:
23220
diff
changeset
|
7 Octave is free software: you can redistribute it and/or modify it |
22755
3a2b891d0b33
maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents:
22407
diff
changeset
|
8 under the terms of the GNU General Public License as published by |
24534
194eb4bd202b
maint: Update punctuation for GPL v3 license text.
Rik <rik@octave.org>
parents:
23220
diff
changeset
|
9 the Free Software Foundation, either version 3 of the License, or |
22755
3a2b891d0b33
maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents:
22407
diff
changeset
|
10 (at your option) any later version. |
12510
a1b2da4967ac
Add nproc, nproc_conf utility functions for determining number of available processors.
Iain Murray <iain@iainmurray.net>
parents:
diff
changeset
|
11 |
22755
3a2b891d0b33
maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents:
22407
diff
changeset
|
12 Octave is distributed in the hope that it will be useful, but |
3a2b891d0b33
maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents:
22407
diff
changeset
|
13 WITHOUT ANY WARRANTY; without even the implied warranty of |
3a2b891d0b33
maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents:
22407
diff
changeset
|
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
3a2b891d0b33
maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents:
22407
diff
changeset
|
15 GNU General Public License for more details. |
12510
a1b2da4967ac
Add nproc, nproc_conf utility functions for determining number of available processors.
Iain Murray <iain@iainmurray.net>
parents:
diff
changeset
|
16 |
a1b2da4967ac
Add nproc, nproc_conf utility functions for determining number of available processors.
Iain Murray <iain@iainmurray.net>
parents:
diff
changeset
|
17 You should have received a copy of the GNU General Public License |
a1b2da4967ac
Add nproc, nproc_conf utility functions for determining number of available processors.
Iain Murray <iain@iainmurray.net>
parents:
diff
changeset
|
18 along with Octave; see the file COPYING. If not, see |
24534
194eb4bd202b
maint: Update punctuation for GPL v3 license text.
Rik <rik@octave.org>
parents:
23220
diff
changeset
|
19 <https://www.gnu.org/licenses/>. |
12510
a1b2da4967ac
Add nproc, nproc_conf utility functions for determining number of available processors.
Iain Murray <iain@iainmurray.net>
parents:
diff
changeset
|
20 |
a1b2da4967ac
Add nproc, nproc_conf utility functions for determining number of available processors.
Iain Murray <iain@iainmurray.net>
parents:
diff
changeset
|
21 */ |
a1b2da4967ac
Add nproc, nproc_conf utility functions for determining number of available processors.
Iain Murray <iain@iainmurray.net>
parents:
diff
changeset
|
22 |
21724
aba2e6293dd8
use "#if ..." consistently instead of "#ifdef" and "#ifndef"
John W. Eaton <jwe@octave.org>
parents:
21581
diff
changeset
|
23 #if defined (HAVE_CONFIG_H) |
21301
40de9f8f23a6
Use '#include "config.h"' rather than <config.h>.
Rik <rik@octave.org>
parents:
21200
diff
changeset
|
24 # include "config.h" |
12510
a1b2da4967ac
Add nproc, nproc_conf utility functions for determining number of available processors.
Iain Murray <iain@iainmurray.net>
parents:
diff
changeset
|
25 #endif |
a1b2da4967ac
Add nproc, nproc_conf utility functions for determining number of available processors.
Iain Murray <iain@iainmurray.net>
parents:
diff
changeset
|
26 |
15039
e753177cde93
maint: Move non-dynamically linked functions from DLD-FUNCTIONS/ to corefcn/ directory
Rik <rik@octave.org>
parents:
14501
diff
changeset
|
27 #include "defun.h" |
21893
0a6f387d18d3
* nproc.cc, oct-fftw.cc: Use octave_num_processors_wrapper.
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
28 #include "nproc-wrapper.h" |
12510
a1b2da4967ac
Add nproc, nproc_conf utility functions for determining number of available processors.
Iain Murray <iain@iainmurray.net>
parents:
diff
changeset
|
29 |
20915
a3359fe50966
remove unused nargout variables
John W. Eaton <jwe@octave.org>
parents:
20909
diff
changeset
|
30 DEFUN (nproc, args, , |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21893
diff
changeset
|
31 doc: /* -*- texinfo -*- |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21893
diff
changeset
|
32 @deftypefn {} {} nproc () |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21893
diff
changeset
|
33 @deftypefnx {} {} nproc (@var{query}) |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21893
diff
changeset
|
34 Return the current number of available processors. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21893
diff
changeset
|
35 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21893
diff
changeset
|
36 If called with the optional argument @var{query}, modify how processors |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21893
diff
changeset
|
37 are counted as follows: |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21893
diff
changeset
|
38 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21893
diff
changeset
|
39 @table @code |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21893
diff
changeset
|
40 @item all |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21893
diff
changeset
|
41 total number of processors. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21893
diff
changeset
|
42 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21893
diff
changeset
|
43 @item current |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21893
diff
changeset
|
44 processors available to the current process. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21893
diff
changeset
|
45 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21893
diff
changeset
|
46 @item overridable |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21893
diff
changeset
|
47 same as @code{current}, but overridable through the |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21893
diff
changeset
|
48 @w{@env{OMP_NUM_THREADS}} environment variable. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21893
diff
changeset
|
49 @end table |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21893
diff
changeset
|
50 @end deftypefn */) |
12510
a1b2da4967ac
Add nproc, nproc_conf utility functions for determining number of available processors.
Iain Murray <iain@iainmurray.net>
parents:
diff
changeset
|
51 { |
a1b2da4967ac
Add nproc, nproc_conf utility functions for determining number of available processors.
Iain Murray <iain@iainmurray.net>
parents:
diff
changeset
|
52 int nargin = args.length (); |
a1b2da4967ac
Add nproc, nproc_conf utility functions for determining number of available processors.
Iain Murray <iain@iainmurray.net>
parents:
diff
changeset
|
53 |
20909
03e4ddd49396
omit unnecessary nargout checks
John W. Eaton <jwe@octave.org>
parents:
20853
diff
changeset
|
54 if (nargin > 1) |
20801
a542a9bf177e
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20172
diff
changeset
|
55 print_usage (); |
12510
a1b2da4967ac
Add nproc, nproc_conf utility functions for determining number of available processors.
Iain Murray <iain@iainmurray.net>
parents:
diff
changeset
|
56 |
27032
0ee0bb5eb381
make nproc default to "overridable" to agree with nproc shell utility
Mike Miller <mtmiller@octave.org>
parents:
26376
diff
changeset
|
57 octave_nproc_query query = OCTAVE_NPROC_CURRENT_OVERRIDABLE; |
21893
0a6f387d18d3
* nproc.cc, oct-fftw.cc: Use octave_num_processors_wrapper.
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
58 |
12512
77b14e634166
Replace nprocs with nproc function. Use gnulib module for portability across platforms.
Iain Murray <iain@iainmurray.net>
parents:
12510
diff
changeset
|
59 if (nargin == 1) |
77b14e634166
Replace nprocs with nproc function. Use gnulib module for portability across platforms.
Iain Murray <iain@iainmurray.net>
parents:
12510
diff
changeset
|
60 { |
77b14e634166
Replace nprocs with nproc function. Use gnulib module for portability across platforms.
Iain Murray <iain@iainmurray.net>
parents:
12510
diff
changeset
|
61 std::string arg = args(0).string_value (); |
77b14e634166
Replace nprocs with nproc function. Use gnulib module for portability across platforms.
Iain Murray <iain@iainmurray.net>
parents:
12510
diff
changeset
|
62 |
77b14e634166
Replace nprocs with nproc function. Use gnulib module for portability across platforms.
Iain Murray <iain@iainmurray.net>
parents:
12510
diff
changeset
|
63 std::transform (arg.begin (), arg.end (), arg.begin (), tolower); |
77b14e634166
Replace nprocs with nproc function. Use gnulib module for portability across platforms.
Iain Murray <iain@iainmurray.net>
parents:
12510
diff
changeset
|
64 |
77b14e634166
Replace nprocs with nproc function. Use gnulib module for portability across platforms.
Iain Murray <iain@iainmurray.net>
parents:
12510
diff
changeset
|
65 if (arg == "all") |
21893
0a6f387d18d3
* nproc.cc, oct-fftw.cc: Use octave_num_processors_wrapper.
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
66 query = OCTAVE_NPROC_ALL; |
12512
77b14e634166
Replace nprocs with nproc function. Use gnulib module for portability across platforms.
Iain Murray <iain@iainmurray.net>
parents:
12510
diff
changeset
|
67 else if (arg == "current") |
21893
0a6f387d18d3
* nproc.cc, oct-fftw.cc: Use octave_num_processors_wrapper.
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
68 query = OCTAVE_NPROC_CURRENT; |
12512
77b14e634166
Replace nprocs with nproc function. Use gnulib module for portability across platforms.
Iain Murray <iain@iainmurray.net>
parents:
12510
diff
changeset
|
69 else if (arg == "overridable") |
21893
0a6f387d18d3
* nproc.cc, oct-fftw.cc: Use octave_num_processors_wrapper.
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
70 query = OCTAVE_NPROC_CURRENT_OVERRIDABLE; |
12512
77b14e634166
Replace nprocs with nproc function. Use gnulib module for portability across platforms.
Iain Murray <iain@iainmurray.net>
parents:
12510
diff
changeset
|
71 else |
20831
35241c4b696c
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20801
diff
changeset
|
72 error ("nproc: invalid value for QUERY"); |
12512
77b14e634166
Replace nprocs with nproc function. Use gnulib module for portability across platforms.
Iain Murray <iain@iainmurray.net>
parents:
12510
diff
changeset
|
73 } |
77b14e634166
Replace nprocs with nproc function. Use gnulib module for portability across platforms.
Iain Murray <iain@iainmurray.net>
parents:
12510
diff
changeset
|
74 |
21893
0a6f387d18d3
* nproc.cc, oct-fftw.cc: Use octave_num_processors_wrapper.
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
75 return ovl (octave_num_processors_wrapper (query)); |
12510
a1b2da4967ac
Add nproc, nproc_conf utility functions for determining number of available processors.
Iain Murray <iain@iainmurray.net>
parents:
diff
changeset
|
76 } |
a1b2da4967ac
Add nproc, nproc_conf utility functions for determining number of available processors.
Iain Murray <iain@iainmurray.net>
parents:
diff
changeset
|
77 |
12512
77b14e634166
Replace nprocs with nproc function. Use gnulib module for portability across platforms.
Iain Murray <iain@iainmurray.net>
parents:
12510
diff
changeset
|
78 /* |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
79 ## Must always report at least 1 cpu available |
21317
a4faec57f4c8
maint: remove semicolon after %!assert tests to follow Octave conventions.
Rik <rik@octave.org>
parents:
21301
diff
changeset
|
80 %!assert (nproc () >= 1) |
a4faec57f4c8
maint: remove semicolon after %!assert tests to follow Octave conventions.
Rik <rik@octave.org>
parents:
21301
diff
changeset
|
81 %!assert (nproc ("all") >= 1) |
a4faec57f4c8
maint: remove semicolon after %!assert tests to follow Octave conventions.
Rik <rik@octave.org>
parents:
21301
diff
changeset
|
82 %!assert (nproc ("current") >= 1) |
19136
10c57204fd72
nproc.cc: codesprint: adding tests
Andreas Weber <andy.weber.aw@gmail.com>
parents:
17787
diff
changeset
|
83 |
27032
0ee0bb5eb381
make nproc default to "overridable" to agree with nproc shell utility
Mike Miller <mtmiller@octave.org>
parents:
26376
diff
changeset
|
84 ## Test that "overridable" is the default |
0ee0bb5eb381
make nproc default to "overridable" to agree with nproc shell utility
Mike Miller <mtmiller@octave.org>
parents:
26376
diff
changeset
|
85 %!assert (nproc ("overridable"), nproc ()) |
0ee0bb5eb381
make nproc default to "overridable" to agree with nproc shell utility
Mike Miller <mtmiller@octave.org>
parents:
26376
diff
changeset
|
86 |
19136
10c57204fd72
nproc.cc: codesprint: adding tests
Andreas Weber <andy.weber.aw@gmail.com>
parents:
17787
diff
changeset
|
87 %!test |
10c57204fd72
nproc.cc: codesprint: adding tests
Andreas Weber <andy.weber.aw@gmail.com>
parents:
17787
diff
changeset
|
88 %! c = nproc ("current"); |
10c57204fd72
nproc.cc: codesprint: adding tests
Andreas Weber <andy.weber.aw@gmail.com>
parents:
17787
diff
changeset
|
89 %! unwind_protect |
10c57204fd72
nproc.cc: codesprint: adding tests
Andreas Weber <andy.weber.aw@gmail.com>
parents:
17787
diff
changeset
|
90 %! old_val = getenv ("OMP_NUM_THREADS"); |
10c57204fd72
nproc.cc: codesprint: adding tests
Andreas Weber <andy.weber.aw@gmail.com>
parents:
17787
diff
changeset
|
91 %! new_val = c + 1; |
10c57204fd72
nproc.cc: codesprint: adding tests
Andreas Weber <andy.weber.aw@gmail.com>
parents:
17787
diff
changeset
|
92 %! setenv ("OMP_NUM_THREADS", num2str (new_val)); |
10c57204fd72
nproc.cc: codesprint: adding tests
Andreas Weber <andy.weber.aw@gmail.com>
parents:
17787
diff
changeset
|
93 %! assert (nproc ("overridable"), new_val); |
10c57204fd72
nproc.cc: codesprint: adding tests
Andreas Weber <andy.weber.aw@gmail.com>
parents:
17787
diff
changeset
|
94 %! unwind_protect_cleanup |
10c57204fd72
nproc.cc: codesprint: adding tests
Andreas Weber <andy.weber.aw@gmail.com>
parents:
17787
diff
changeset
|
95 %! if (! isempty (old_val)) |
10c57204fd72
nproc.cc: codesprint: adding tests
Andreas Weber <andy.weber.aw@gmail.com>
parents:
17787
diff
changeset
|
96 %! setenv ("OMP_NUM_THREADS", old_val); |
19145
b5c03bcc640a
nproc: Fix unwind_protect_cleanup block in %!test
Mike Miller <mtmiller@ieee.org>
parents:
19136
diff
changeset
|
97 %! else |
19168
9163a6e9b096
Use unsetenv to fix libgomp error created by nproc BIST testing.
Rik <rik@octave.org>
parents:
19145
diff
changeset
|
98 %! unsetenv ("OMP_NUM_THREADS"); |
19136
10c57204fd72
nproc.cc: codesprint: adding tests
Andreas Weber <andy.weber.aw@gmail.com>
parents:
17787
diff
changeset
|
99 %! endif |
10c57204fd72
nproc.cc: codesprint: adding tests
Andreas Weber <andy.weber.aw@gmail.com>
parents:
17787
diff
changeset
|
100 %! end_unwind_protect |
10c57204fd72
nproc.cc: codesprint: adding tests
Andreas Weber <andy.weber.aw@gmail.com>
parents:
17787
diff
changeset
|
101 |
21581
6fab85c1538f
maint: Follow Octave conventions for use of semicolon in BIST tests.
Rik <rik@octave.org>
parents:
21547
diff
changeset
|
102 %!error nproc ("no_valid_option") |
12512
77b14e634166
Replace nprocs with nproc function. Use gnulib module for portability across platforms.
Iain Murray <iain@iainmurray.net>
parents:
12510
diff
changeset
|
103 */ |