<div dir="ltr"><div dir="ltr"><div dir="ltr">On Thu, Apr 25, 2019 at 10:35 AM Alexandre Ganea via cfe-dev <<a href="mailto:cfe-dev@lists.llvm.org">cfe-dev@lists.llvm.org</a>> wrote:<br></div><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">





<div lang="FR-CA">
<div class="gmail-m_-6712434436199843167WordSection1">
<p class="MsoNormal"><span lang="EN-CA">Hi folks,<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-CA"><u></u> <u></u></span></p>
<p class="MsoNormal"><span lang="EN-CA">With the recent support for Clang in Visual Studio 2019 [1], I thought we should revive and eventually land the /MP proposal I made a while ago [2].<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-CA"><u></u> <u></u></span></p>
<p class="MsoNormal"><span lang="EN-CA">As it stands now, building with clang-cl is much slower than MSVC when used along MSBuild, see timings in summary [2].<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-CA">With this patch, the situation is greatly improved, clang-cl /MP performance is better in all cases [5].<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-CA"><u></u> <u></u></span></p>
<p class="MsoNormal"><span lang="EN-CA">----<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-CA"><u></u> <u></u></span></p>
<p class="MsoNormal"><span lang="EN-CA">When the MP option is active (default behavior) in a Visual Studio Project [3], MSBuild issues commands such as:<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-CA"><u></u> <u></u></span></p>
<p class="MsoNormal" style="text-indent:35.4pt"><span lang="EN-CA">clang-cl /MP file-A.cpp file-B.cpp file-C.cpp<u></u><u></u></span></p>
<p class="MsoNormal" style="text-indent:35.4pt"><span lang="EN-CA"><u></u> <u></u></span></p>
<p class="MsoNormal"><span lang="EN-CA">This creates a root clang-cl process, and then *<b>sequentially</b>* a cc1 sub-process for each CPP file in the list. Evidently this is slow and doesn’t use the full potential on modern multi-cores machines.<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-CA">A workaround is to increase the number of parallel builds [4], but that is sub-optimal and is still slower than MSVC.<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-CA"><u></u> <u></u></span></p>
<p class="MsoNormal"><span lang="EN-CA">The /MP proposal I made in [2] simply maintains a list of cc1 sub-processes for each hardware core (or for the number of cores provided as an option to /MP).<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-CA">Waiting for termination in the root clang-cl process is done through a single OS primitive (see sys::WaitMany), which temporarily suspends the root process until at least one cc1 sub-process finishes. This ensure no cycles
 are wasted waiting, and avoids useless context-switches to the root process.<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-CA"><u></u> <u></u></span></p>
<p class="MsoNormal"><span lang="EN-CA">----<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-CA"><u></u> <u></u></span></p>
<p class="MsoNormal"><span lang="EN-CA">Most of the changes in the demo patch in [2] are: modernization of the process launching API (ProcessInfo), and support for sys::WaitMany, which I’d like to commit separately and incrementally.<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-CA">Support for /MP is very small and mostly located in clang/trunk/lib/Driver/Compilation.cpp in the demo patch.<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-CA"><u></u> <u></u></span></p>
<p class="MsoNormal"><span lang="EN-CA">We could subsequently add a new flag –j to the regular clang driver, which mimics /MP. Further down the road, I’d like to discuss optional support for concrt multithreading which, from some preliminary testing, would
 be much faster than the current cc1 sub-process invocation, at least on Windows 10 1703+.</span></p></div></div></blockquote><div><br></div><div>(Folks working on Microsoft's standard library said they've moved off concrt, and the one use of it in LLVM is incorrect according to them, see <a href="https://bugs.llvm.org/show_bug.cgi?id=41198">https://bugs.llvm.org/show_bug.cgi?id=41198</a>)</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div lang="FR-CA"><div class="gmail-m_-6712434436199843167WordSection1"><p class="MsoNormal"><span lang="EN-CA"><u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-CA"><u></u> <u></u></span></p>
<p class="MsoNormal"><span lang="EN-CA">Feel free to comment here or in the demo patch.<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-CA"><u></u> <u></u></span></p>
<p class="MsoNormal"><span lang="EN-CA">Thanks,<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-CA">Alex.<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-CA"><u></u> <u></u></span></p>
<p class="MsoNormal"><span lang="EN-CA">[1] </span><a href="https://devblogs.microsoft.com/cppblog/clang-llvm-support-in-visual-studio/" target="_blank"><span lang="EN-CA">https://devblogs.microsoft.com/cppblog/clang-llvm-support-in-visual-studio/</span></a><u></u><u></u></p>
<p class="MsoNormal">[2] <a href="https://reviews.llvm.org/D52193" target="_blank">https://reviews.llvm.org/D52193</a><u></u><u></u></p>
<p class="MsoNormal">[3] <a href="https://docs.microsoft.com/en-us/previous-versions/bb385193(v=vs.140)" target="_blank">
https://docs.microsoft.com/en-us/previous-versions/bb385193(v=vs.140)</a><u></u><u></u></p>
<p class="MsoNormal">[4] <a href="https://docs.microsoft.com/en-us/visualstudio/ide/reference/options-dialog-box-projects-and-solutions-build-and-run?view=vs-2019" target="_blank">
https://docs.microsoft.com/en-us/visualstudio/ide/reference/options-dialog-box-projects-and-solutions-build-and-run?view=vs-2019</a><u></u><u></u></p>
<p class="MsoNormal">[5] <a href="https://reviews.llvm.org/D52193#1241023" target="_blank">https://reviews.llvm.org/D52193#1241023</a><u></u><u></u></p>
</div>
</div>

_______________________________________________<br>
cfe-dev mailing list<br>
<a href="mailto:cfe-dev@lists.llvm.org" target="_blank">cfe-dev@lists.llvm.org</a><br>
<a href="https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev" rel="noreferrer" target="_blank">https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev</a><br>
</blockquote></div></div></div>