Compiling with g++ using multiple cores

后端 未结 8 2361
猫巷女王i
猫巷女王i 2020-11-29 15:47

Quick question: what is the compiler flag to allow g++ to spawn multiple instances of itself in order to compile large projects quicker (for example 4 source files at a time

8条回答
  •  小蘑菇
    小蘑菇 (楼主)
    2020-11-29 16:05

    If using make, issue with -j. From man make:

      -j [jobs], --jobs[=jobs]
           Specifies the number of jobs (commands) to run simultaneously.  
           If there is more than one -j option, the last one is effective.
           If the -j option is given without an argument, make will not limit the
           number of jobs that can run simultaneously.
    

    And most notably, if you want to script or identify the number of cores you have available (depending on your environment, and if you run in many environments, this can change a lot) you may use ubiquitous Python function cpu_count():

    https://docs.python.org/3/library/multiprocessing.html#multiprocessing.cpu_count

    Like this:

    make -j $(python3 -c 'import multiprocessing as mp; print(int(mp.cpu_count() * 1.5))')
    

    If you're asking why 1.5 I'll quote user artless-noise in a comment above:

    The 1.5 number is because of the noted I/O bound problem. It is a rule of thumb. About 1/3 of the jobs will be waiting for I/O, so the remaining jobs will be using the available cores. A number greater than the cores is better and you could even go as high as 2x.

提交回复
热议问题