[PATCH] D52193: RFC: [clang] Multithreaded compilation support

Alexandre Ganea via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Thu Sep 20 13:28:43 PDT 2018


aganea marked an inline comment as done.
aganea added a comment.

It seems Reid's change has done good: `cmake` is not as significant as before in the build process. See below the improved timings:

The tests consist in a full cleanup (delete build folder), cmake to regenerate, then a full rebuild of LLVM + Clang + LLD (at r342552), Release target, optimized tablegen.
VS2017 15.8.3, Ninja 1.8.2, CMake 3.12.2
For the `clang-cl` tests, I'm not using any official LLVM release, only the binaries I built myself. `lld-link` is used in that case.

//(built with MSVC)// means the LLVM toolchain used to perfom this test was compiled in a previous run with MSVC cl 15.8.3
//(built with Clang)// means the LLVM toolchain used to perform this test was compiled in a previous run with Clang at r342552

I took the best figures from several runs (ran in a random order).

-------

**Config 1 :** Intel Xeon Haswell 6 cores / 12 HW threads, 3.5 GHz, 15M cache, 128 GB RAM, SSD 550 MB/s

__MSBuild :__

| MSVC cl /MP                             | (50min 26sec) | 2 parallel msbuild  |
| MSVC cl /MP                             | (40min 23sec) | 8 parallel msbuild  |
| MSVC cl /MP                             | (40min 5sec)  | 16 parallel msbuild |
| clang-cl //(built with MSVC)//          | (43min 36sec) | 16 parallel msbuild |
| clang-cl //(built with Clang//)         | (43min 42sec) | 16 parallel msbuild |
| clang-cl **/MP** //(built with MSVC)//  | not tested    |                     |
| clang-cl **/MP** //(built with Clang)// | (36min 13sec) | 8 parallel msbuild  |
| clang-cl **/MP** //(built with Clang)// | (34min 57sec) | 16 parallel msbuild |
|

__Ninja:__

| MSVC cl                         | (33min 29sec) |
| clang-cl //(built with MSVC)//  | (30min 2sec)  |
| clang-cl //(built with Clang)// | (28min 29sec) |
|



-----

**Config 2 :** Intel Xeon Skylake 18 cores / 36 HW threads, x2 (Dual CPU), 72 HW threads total, 2.3 GHz, 24.75M cache, 128 GB RAM, NVMe 4.6 GB/s

__MSBuild :__

| MSVC cl /MP                             | (10min 3sec)  | 32 parallel msbuild |
| clang-cl //(built with MSVC)//          | (24min 15sec) | 32 parallel msbuild |
| clang-cl //(built with Clang)//         | (21min 21sec) | 32 parallel msbuild |
| clang-cl **/MP** //(built with MSVC)//  | (7min 52sec)  | 32 parallel msbuild |
| clang-cl **/MP** //(built with Clang)// | (7min 30sec)  | 32 parallel msbuild |
|

__Ninja:__

| MSVC cl                         | (7min 25sec) |
| clang-cl //(built with MSVC)//  | (8min 23sec) |
| clang-cl //(built with Clang)// | (8min)       |
|



================
Comment at: llvm/trunk/lib/Support/Windows/Program.inc:424
 
-ProcessInfo sys::Wait(const ProcessInfo &PI, unsigned SecondsToWait,
-                      bool WaitUntilChildTerminates, std::string *ErrMsg) {
-  assert(PI.Pid && "invalid pid to wait on, process not started?");
-  assert((PI.Process && PI.Process != INVALID_HANDLE_VALUE) &&
-         "invalid process handle to wait on, process not started?");
+bool sys::WaitMany(MutableArrayRef<ProcessInfo *> PIArray, bool WaitOnAll,
+                   unsigned SecondsToWait, bool WaitUntilProcessTerminates) {
----------------
rnk wrote:
> I guess no Posix implementation? It's kind of hard to know if we made the right abstractions without doing it for Windows and *nix.
Yes, I currenly don't have an Unix box at hand. But I will implement it shortly as it needs to be atomically commited with the Windows part.


Repository:
  rC Clang

https://reviews.llvm.org/D52193





More information about the cfe-commits mailing list