[CMake] How to determine the number of processors available from CMake code

David Cole david.cole at kitware.com
Thu Oct 7 18:41:28 EDT 2010


Thanks!

On Thu, Oct 7, 2010 at 6:08 PM, Mark Moll <mmoll at rice.edu> wrote:

> On OS X, this command might be easier / faster:
>
> sysctl -n hw.ncpu
>
> On Oct 7, 2010, at 3:50 PM, David Cole wrote:
>
> > I just posted a short blog article demonstrating how to figure out the
> number of processors available for a "make -j" or a scripted ctest_build
> call (with the "Unix Makefiles" generator) on Linux, Mac and Windows. Please
> let me know if you have any ideas for how it might be improved or extended.
> >
> > http://www.kitware.com/blog/home/post/63
> >
> >
> > Cheers,
> > David
> >
> >
> > Blog text copied here, too, for search-ability on the mailing list
> archives:
> >
> ==============================================================================
> > At the end of this script snippet, the CMake variable PROCESSOR_COUNT has
> a value appropriate for passing to make's -j for parallel builds.
> >
> > When used in a ctest -S script, you can call...
> >
> > if(PROCESSOR_COUNT)
> >   set(CTEST_BUILD_FLAGS "-j${PROCESSOR_COUNT}")
> > endif()
> >
> > ...to enable parallel builds with "Unix Makefiles" and the ctest_build
> command.
> >
> >
> > Here's the snippet:
> > if(NOT DEFINED PROCESSOR_COUNT)
> >   # Unknown:
> >   set(PROCESSOR_COUNT 0)
> >
> >   # Linux:
> >   set(cpuinfo_file "/proc/cpuinfo")
> >   if(EXISTS "${cpuinfo_file}")
> >     file(STRINGS "${cpuinfo_file}" procs REGEX "^processor.: [0-9]+$")
> >     list(LENGTH procs PROCESSOR_COUNT)
> >   endif()
> >
> >   # Mac:
> >   if(APPLE)
> >     find_program(cmd_sys_pro "system_profiler")
> >     if(cmd_sys_pro)
> >       execute_process(COMMAND ${cmd_sys_pro} OUTPUT_VARIABLE info)
> >       string(REGEX REPLACE "^.*Total Number Of Cores: ([0-9]+).*$" "\\1"
> >         PROCESSOR_COUNT "${info}")
> >     endif()
> >   endif()
> >
> >   # Windows:
> >   if(WIN32)
> >     set(PROCESSOR_COUNT "$ENV{NUMBER_OF_PROCESSORS}")
> >   endif()
> > endif()
> >
> > _______________________________________________
> > Powered by www.kitware.com
> >
> > Visit other Kitware open-source projects at
> http://www.kitware.com/opensource/opensource.html
> >
> > Please keep messages on-topic and check the CMake FAQ at:
> http://www.cmake.org/Wiki/CMake_FAQ
> >
> > Follow this link to subscribe/unsubscribe:
> > http://www.cmake.org/mailman/listinfo/cmake
>
> --
> Mark Moll
>
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.cmake.org/pipermail/cmake/attachments/20101007/defc4ba3/attachment.htm>


More information about the CMake mailing list