On Wed, 14 Jun 2017 11:25:35 -0400 Kyle Rose <kr...@krose.org> wrote:
> The right answer is always to write your makefiles so the rules execute > in the required order whether run in parallel or not. Relying on > whichever arbitrary ordering GNU make employs, even if that behavior is > stable(either historically or by design), is likely to result in sadness > at some point, such as when someone calls into your makefile recursively > from their own -j build. Sometimes I write Makefiles considering the performance at parallel builds and those Makefiles get their prerequisites ordered by approximately how much time each prerequisite needs to be built. Let me give you an example of such a rule: final_target: 3_hour_prerequisite 2_hour_prerequisite 1_hour_prerequisite do_something_quickly With the above example calling make without -j will take about 6 hours for all prerequisites to build. On a machine with 3 or more cores calling make with "-j 3" all prerequisites will be finished in 3 hours when also the most time consuming one is done. But what if we have a build machine with only 2 CPU cores? If so, calling make with "-j 2" will be the fastest way to compile, it will still be done in 3 hours. First the 3 hour job and the 2 hour job will be started in parallell, then after 2 hours one job will be finished and the remaining 1 hour job will be started. After a total of 3 hours the 3 hour job and 1 hour job will finish about at the same time. What would happen with "-j 2" if GNU Make changed the order of how prerequisites where compiled? Then it might start with the 1 hour job and the 2 hour job. Not until the 1 hour job where finished the 3 hour job would start and the total build time would be 4 hours instead. Even though the compile would complete successfully I think that not being able to depend on job start order would give a significant lack of performance. I can also come to think of examples when non parallel builds would benefit from a deterministic build order of prerequisites even though none of the prerequisites depend on each other. regards Henrik _______________________________________________ Bug-make mailing list Bug-make@gnu.org https://lists.gnu.org/mailman/listinfo/bug-make