[cfe-dev] clang-cl.exe (32bit) dog slow, capping at ~16.5% CPU

Yaron Keren via cfe-dev cfe-dev at lists.llvm.org
Fri Jun 9 10:00:51 PDT 2017


Debug configuration with Visual C++ enables expensive iterator checks
(_ITERATOR_DEBUG_LEVEL). They do catch bugs sometime.
For example, vector::operator * is:

reference operator*() const
{ // return designated object
 #if _ITERATOR_DEBUG_LEVEL == 2
const auto _Mycont = static_cast<const _Myvec *>(this->_Getcont());
if (_Mycont == 0
|| _Ptr == _Tptr()
|| _Ptr < _Mycont->_Myfirst
|| _Mycont->_Mylast <= _Ptr)
{ // report error
_DEBUG_ERROR("vector iterator not dereferencable");
_SCL_SECURE_OUT_OF_RANGE;
}

 #elif _ITERATOR_DEBUG_LEVEL == 1
_SCL_SECURE_VALIDATE(_Ptr != _Tptr());
const auto _Mycont = static_cast<const _Myvec *>(this->_Getcont());
_SCL_SECURE_VALIDATE(_Mycont != 0);
_SCL_SECURE_VALIDATE_RANGE(_Mycont->_Myfirst <= _Ptr && _Ptr <
_Mycont->_Mylast);
 #endif /* _ITERATOR_DEBUG_LEVEL */

_Analysis_assume_(_Ptr != _Tptr());

return (*_Ptr);
}


‫בתאריך יום ו׳, 9 ביוני 2017 ב-1:52 מאת ‪NAKAMURA Takumi via cfe-dev‬‏ <‪
cfe-dev at lists.llvm.org‬‏>:‬

> I recommend ninja.exe if you will not use IDE.
> https://ninja-build.org/
>
> On Fri, Jun 9, 2017 at 7:32 AM Nikodemus Siivola <
> nikodemus at random-state.net> wrote:
>
>> Thank you for assistance!
>>
>> I can confirm that
>>
>>     cmake --build . --config Release
>>
>> works. :)
>>
>> Both Release and RelWithDebInfo builds work at reasonable speeds, even
>> with assertions enabled, so I'm a happy camper.
>>
>> Cheers,
>>
>>   -- nikodemus
>>
>>
>> On Thu, Jun 8, 2017 at 11:07 AM, Nikodemus Siivola <
>> nikodemus at random-state.net> wrote:
>>
>>> cmake --build
>>>
>>> On 8 Jun 2017 11.05, "NAKAMURA Takumi" <geek4civic at gmail.com> wrote:
>>>
>>>> Which tool are you using? msbuild.exe, devenv.exe, or cmake.exe --build
>>>> ?
>>>>
>>>> With cmake.exe, "cmake --config Release" would be available. (I haven't
>>>> tried)
>>>>
>>>> See also;
>>>> http://bb.pgr.jp/builders/msbuild-llvmclang-x64-msc19-DA/builds/2179/steps/build_llvm_tblgen/logs/stdio
>>>>
>>>> On Thu, Jun 8, 2017 at 4:56 PM Nikodemus Siivola <
>>>> nikodemus at random-state.net> wrote:
>>>>
>>>>> I've been building from the command line, the IDE is a foreign land to
>>>>> me, but I'll give it a try. :)
>>>>>
>>>>> Thanks!
>>>>>
>>>>> On 8 Jun 2017 10.53, "NAKAMURA Takumi" <geek4civic at gmail.com> wrote:
>>>>>
>>>>>> Assuming you are using Visual Studio IDE, choose build configuration
>>>>>> in toolbar and build again. Debug by default.
>>>>>> CMAKE_BUILD_TYPE should not be set for Visual Studio Generator.
>>>>>>
>>>>>> On Thu, Jun 8, 2017 at 4:50 PM Nikodemus Siivola <
>>>>>> nikodemus at random-state.net> wrote:
>>>>>>
>>>>>>> Aha! Release/bin has just llvm-lit.py in it, whereas Debug/bin has
>>>>>>> everything. So not a release build after all.
>>>>>>>
>>>>>>> $ grep CMAKE_BUILD_TYPE CMakeCache.txt
>>>>>>> CMAKE_BUILD_TYPE:UNINITIALIZED=Release
>>>>>>>
>>>>>>> ...which seems odd both for claiming to be uninitialized and not
>>>>>>> matching the binaries.
>>>>>>>
>>>>>>> So I should delete that line and rebuild with
>>>>>>>
>>>>>>> cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo
>>>>>>>
>>>>>>> ?
>>>>>>>
>>>>>>> Cheers,
>>>>>>>
>>>>>>>  -- nikodemus
>>>>>>>
>>>>>>>
>>>>>>> On Thu, Jun 8, 2017 at 8:36 AM, NAKAMURA Takumi <
>>>>>>> geek4civic at gmail.com> wrote:
>>>>>>>
>>>>>>>> I wonder you specified -DCMAKE_BUILD_TYPE=Release to Visual Studio
>>>>>>>> Generator.
>>>>>>>>
>>>>>>>> Make sure;
>>>>>>>> - Delete CMAKE_BUILD_TYPE
>>>>>>>> - clang-cl.exe is generated as Release\bin\clang-cl.exe in your
>>>>>>>> build tree.
>>>>>>>>   Visual Studio (and msbuild.exe) has multiple configurations.
>>>>>>>>
>>>>>>>>
>>>>>>>> On Thu, Jun 8, 2017 at 1:57 AM Nikodemus Siivola via cfe-dev <
>>>>>>>> cfe-dev at lists.llvm.org> wrote:
>>>>>>>>
>>>>>>>>> One core out of eight sounds plausible indeed! Never thought of
>>>>>>>>> that, more used to *nix style usage numbers where 1.0 = one core. :)
>>>>>>>>>
>>>>>>>>> Did a release build:
>>>>>>>>>
>>>>>>>>>     cmake -G "Visual Studio 14 2015" \
>>>>>>>>>       -DCMAKE_INSTALL_PREFIX=C:\LLVM \
>>>>>>>>>       -DCMAKE_BUILD_TYPE=Release \
>>>>>>>>>       -DLLVM_TARGETS_TO_BUILD=X86 \
>>>>>>>>>       -DLLVM_ENABLE_CXX1Y=On \
>>>>>>>>>       ../
>>>>>>>>>
>>>>>>>>> That clang still takes >10s to build a hello-world.
>>>>>>>>>
>>>>>>>>> Any suggestions?
>>>>>>>>>
>>>>>>>>> Cheers,
>>>>>>>>>
>>>>>>>>>  -- nikodemus
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> On Thu, Jun 1, 2017 at 6:11 PM, David Blaikie <dblaikie at gmail.com>
>>>>>>>>> wrote:
>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> On Thu, Jun 1, 2017 at 12:48 AM Hahnfeld, Jonas via cfe-dev <
>>>>>>>>>> cfe-dev at lists.llvm.org> wrote:
>>>>>>>>>>
>>>>>>>>>>> > cmake -G "MinGW Makefiles" \
>>>>>>>>>>>
>>>>>>>>>>>   -DCMAKE_INSTALL_PREFIX=C:\LLVM \
>>>>>>>>>>>
>>>>>>>>>>>   -DCMAKE_BUILD_TYPE=Debug \
>>>>>>>>>>>
>>>>>>>>>>>   -DLLVM_ENABLE_ASSERTIONS=On \
>>>>>>>>>>>
>>>>>>>>>>>   -DLLVM_TARGETS_TO_BUILD=X86 \
>>>>>>>>>>>
>>>>>>>>>>>   -DLLVM_ENABLE_CXX1Y=On \
>>>>>>>>>>>
>>>>>>>>>>>   ../
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> CMAKE_BUILD_TYPE=Debug will result in a non-optimized compiler.
>>>>>>>>>>> Although I don’t have numbers at hand, you might want to set
>>>>>>>>>>> CMAKE_BUILD_TYPE=Release.
>>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> Also  -DLLVM_ENABLE_ASSERTIONS=On
>>>>>>>>>>
>>>>>>>>>> The build system at some point had a warning informing users that
>>>>>>>>>> this might produce an order of magnitude (or more) slower compiler.
>>>>>>>>>>
>>>>>>>>>> I'd suggest you keep an optimized and unoptimized compiler
>>>>>>>>>> around. Though even then, Hello World doesn't take me 10 seconds to
>>>>>>>>>> compile... so maybe there's other things going on. Sounds like you'd want
>>>>>>>>>> one set of LLVM stuff with all the debugging knobs turned on (exactly as
>>>>>>>>>> you've built) & use that with your frontend, and another, release build,
>>>>>>>>>> for running clang, etc for practical porpoises.
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> Regards,
>>>>>>>>>>>
>>>>>>>>>>> Jonas
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> *From:* cfe-dev [mailto:cfe-dev-bounces at lists.llvm.org] *On
>>>>>>>>>>> Behalf Of *Nikodemus Siivola via cfe-dev
>>>>>>>>>>> *Sent:* Thursday, June 1, 2017 9:43 AM
>>>>>>>>>>> *To:* cfe-dev at lists.llvm.org
>>>>>>>>>>> *Subject:* [cfe-dev] clang-cl.exe (32bit) dog slow, capping at
>>>>>>>>>>> ~16.5% CPU
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> I was wondering why compiles were so slow and noticed that
>>>>>>>>>>> clang-cl.exe is never consuming more than ~16.5% CPU on my laptop. This is
>>>>>>>>>>> an i7-7700HQ, 32GB memory, running Windows 10 Pro.
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> Memory and disk use appear trivial as well, and the computer was
>>>>>>>>>>> otherwise mostly idle at the time.
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> Compiling a trivial hello-world takes 11 seconds:
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> $ clang --version
>>>>>>>>>>>
>>>>>>>>>>> clang version 4.0.1
>>>>>>>>>>>
>>>>>>>>>>> Target: i686-pc-windows-msvc
>>>>>>>>>>>
>>>>>>>>>>> Thread model: posix
>>>>>>>>>>>
>>>>>>>>>>> InstalledDir: C:\LLVM\bin
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> $ cat foo.cpp
>>>>>>>>>>>
>>>>>>>>>>> #include <iostream>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> int main()
>>>>>>>>>>>
>>>>>>>>>>> {
>>>>>>>>>>>
>>>>>>>>>>>     std::cout << "Yo" << std::endl;
>>>>>>>>>>>
>>>>>>>>>>>     return 0;
>>>>>>>>>>>
>>>>>>>>>>> }
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> $ time clang-cl foo.cpp
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> real    0m11.886s
>>>>>>>>>>>
>>>>>>>>>>> user    0m0.015s
>>>>>>>>>>>
>>>>>>>>>>> sys     0m0.015s
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> Compiling the same program under the Linux subsystem and
>>>>>>>>>>> clang-3.5 takes 0.16seconds. The Visual Studio commandline compiler is
>>>>>>>>>>> likewise almost instant.
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> This is release_40 from one of the git mirrors, build built as
>>>>>>>>>>> part of the LLVM tree using Visual Studio 2015 command prompt, with (I
>>>>>>>>>>> think, not 100% sure, don't know cmake well enough to figure out after the
>>>>>>>>>>> fact) the following cmake invovations:
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> cmake -G "MinGW Makefiles" \
>>>>>>>>>>>
>>>>>>>>>>>   -DCMAKE_INSTALL_PREFIX=C:\LLVM \
>>>>>>>>>>>
>>>>>>>>>>>   -DCMAKE_BUILD_TYPE=Debug \
>>>>>>>>>>>
>>>>>>>>>>>   -DLLVM_ENABLE_ASSERTIONS=On \
>>>>>>>>>>>
>>>>>>>>>>>   -DLLVM_TARGETS_TO_BUILD=X86 \
>>>>>>>>>>>
>>>>>>>>>>>   -DLLVM_ENABLE_CXX1Y=On \
>>>>>>>>>>>
>>>>>>>>>>>   ../
>>>>>>>>>>>
>>>>>>>>>>> cmake --build .
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> Did I pick spectacularly stupid build options or something?
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> Any suggestions for figuring out what is going on? (Windows is
>>>>>>>>>>> not my regular platform so I'm a bit out of depth here.)
>>>>>>>>>>>
>>>>>>>>>>> Cheers,
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>  -- nikodemus
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> _______________________________________________
>>>>>>>>>>> cfe-dev mailing list
>>>>>>>>>>> cfe-dev at lists.llvm.org
>>>>>>>>>>> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev
>>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>> _______________________________________________
>>>>>>>>> cfe-dev mailing list
>>>>>>>>> cfe-dev at lists.llvm.org
>>>>>>>>> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev
>>>>>>>>>
>>>>>>>>
>>>>>>>
>> _______________________________________________
> cfe-dev mailing list
> cfe-dev at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20170609/a0102dd9/attachment.html>


More information about the cfe-dev mailing list