]> https://gitweb.dealii.org/ - dealii.git/commitdiff
Execute quick tests in parallel. 7143/head
authorDavid Wells <drwells@email.unc.edu>
Mon, 3 Sep 2018 21:22:01 +0000 (17:22 -0400)
committerDavid Wells <drwells@email.unc.edu>
Thu, 13 Sep 2018 23:19:03 +0000 (19:19 -0400)
The quick tests are currently set up as a custom target which immediately
launches ctest. The difficulty with this is that its not possible (AFAICT) to
get the number of jobs available from make at that point, so there is no way to
run these in parallel without giving an explicit number of jobs to ctest.

This PR sets the number of jobs to the number of CPUs on the machine: while
hardcoding this is not ideal, this is the right usage pattern for a build script
like

    make -j20
    make test

where all processors on the machine should be available.

doc/news/changes/minor/20180913DavidWells [new file with mode: 0644]
doc/readme.html
tests/quick_tests/run.cmake

diff --git a/doc/news/changes/minor/20180913DavidWells b/doc/news/changes/minor/20180913DavidWells
new file mode 100644 (file)
index 0000000..882500f
--- /dev/null
@@ -0,0 +1,8 @@
+Fixed: <code>make test</code> now runs in parallel automatically (i.e., it uses
+a CMake command to determine the number of cores available). Since <code>make
+test</code> just immediately invokes <code>ctest</code> as a subprocess, it is
+currently not possible to link the number of globally available
+<code>make</code> processes with the number of concurrently run tests; i.e.,
+the number of cores <code>make test</code> uses is not changeable by users.
+<br>
+(David Wells, 2018/09/13)
index 6751ee266bb8c04db5460b5151b923a3b3fd2ccb..de4c9b9747f37784080b72807191612759dbbcdb 100644 (file)
         </li>
 
         <li> If your machine has multiple processors, use <code>make
-         -jN</code> in the last step, where <code>N</code> is the number of simultaneous build processes you want <code>make</code> to use at any given time. Allowing <code>make</code> to use more simultaneous build processes (assuming you have that many processor
-            cores) will greatly lower the build time.
+         -jN install</code> in the second to last step instead, where <code>N</code> is the number of simultaneous build processes you want <code>make</code> to use at any given time. Allowing <code>make</code> to use more simultaneous build processes (assuming you have that many processor
+            cores) will greatly lower the build time. <code>make test</code> automatically runs in parallel and no <code>-jN</code> flag should be supplied to it.
         </li>
 
         <li> If you do not intend to modify the <acronym>deal.II</acronym> sources and recompile things, then you can remove the <code>build/</code> directory after the last step.
index 4b4567bce428759704840ad10a97db23c14d8499..4e4c2129983658336f705a772c28342c4e520bbe 100644 (file)
 ##
 ## ---------------------------------------------------------------------
 
-# This file is run when "make test" is executed by the user and is 
+# This file is run when "make test" is executed by the user and is
 # responsible for running the tests and printing some helpful
 # error messages.
+include(ProcessorCount)
+PROCESSORCOUNT(_n_processors)
+IF(_n_processors EQUAL 0)
+  SET(_n_processors "1")
+ENDIF()
 
 SEPARATE_ARGUMENTS(ALL_TESTS)
 
-EXECUTE_PROCESS(COMMAND ${CMAKE_CTEST_COMMAND} --force-new-ctest-process --output-on-failure -O quicktests.log RESULT_VARIABLE res_var)
+EXECUTE_PROCESS(COMMAND ${CMAKE_CTEST_COMMAND} -j${_n_processors}
+  --force-new-ctest-process
+  --output-on-failure
+  -O quicktests.log
+  RESULT_VARIABLE res_var)
 
 IF(NOT "${res_var}" STREQUAL "0")
   MESSAGE("

In the beginning the Universe was created. This has made a lot of people very angry and has been widely regarded as a bad move.

Douglas Adams


Typeset in Trocchi and Trocchi Bold Sans Serif.