[cfe-users] Clang 3.9 running 50% slower than 3.7

David Blaikie via cfe-users cfe-users at lists.llvm.org
Wed Mar 23 09:19:39 PDT 2016


Yeah, not sure, sorry - I don't often do performance measurements of Clang.

Don's advice is probably about right.

On Wed, Mar 23, 2016 at 5:29 AM, jpsota at gmail.com <jpsota at gmail.com> wrote:

> Hi Don and David, just wanted to see if you guys had any quick thoughts on
> any of this before I just resign to live with a 35% slower clang than I'm
> used to (it's possible that the previous version from Xcode is much slimmed
> down or otherwise very carefully tuned in some way).
>
> Thank you,
> Jim
>
> On Fri, Mar 18, 2016 at 9:42 AM, jpsota at gmail.com <jpsota at gmail.com>
> wrote:
>
>> David and Don, thanks for your tips. We're making progress as the new
>> clang is only about 35% slower instead of 50% slower, but not quite at
>> parity yet. Here's what I did:
>>
>> 1. deleted everything and started over, as Don suggested (I just checked
>> out the source code from scratch again)
>>
>> 2. configured with cmake -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=Release
>> -DLLVM_ENABLE_ASSERTIONS=OFF ../llvm
>>
>> 3. built
>>
>> Now I'm seeing that clang-tidy --verbose correctly says this new version
>> doesn't have assertions enabled, and is optimized (for some reason
>> clang-tidy shows more details than clang when passing --verbose):
>>
>> clang-tidy --version
>> LLVM (http://llvm.org/):
>>   LLVM version 3.9.0svn
>>   Optimized build.
>>   Built Mar 17 2016 (16:05:27).
>>   Default target: x86_64-apple-darwin15.0.0
>>   Host CPU: westmere
>>
>> However, when doing my benchmarking with the xcode version of clang
>> (3.7), it's still about 35% faster than my newly compiled version:
>>
>> Benchmarking compiling about 20 C++ files:
>> Original from xcode (3.7): 27s
>>
>> New from svn (3.9): 37s
>>
>>
>> I also noticed that the new clang binary is significantly larger than the
>> original one. I'm sharing this as it may provide some clues to what's going
>> on. I'm happy to grep for symbols if that would also be helpful.
>>
>> ORIGINAL FROM XCODE (3.7):
>> ls -ltah
>> /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang
>> -rwxr-xr-x  1 root  wheel    42M Sep 22 19:25
>> /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang
>>
>> NEW FROM SVN (3.9):
>> ls -ltah /Users/jim/toolchains/llvm/bin/clang-3.9
>> -rwxr-xr-x  1 jim  staff    54M Mar 17 17:00
>> /Users/jim/toolchains/llvm/bin/clang-3.9
>>
>>
>> Anyone have any ideas on anything else to try to get my newly compiled
>> clang-3.9 as fast as my system-installed clang-3.7? Are there additional
>> options I should be passing to configure the cmake files, other than
>> Release and turning off LLVM assertions?
>>
>> Thanks very much.
>>
>> Jim
>>
>>
>>
>>
>>
>>
>>
>> On Thu, Mar 17, 2016 at 12:19 PM, don hinton <hintonda at gmail.com> wrote:
>>
>>> It looks like you are rerunning cmake without first removing the cache,
>>> CMakeCache.txt.  Since the option () command that sets
>>> LLVM_ENABLE_ASSERTIONS didn't include FORCE, the previous cached value is
>>> preserved.
>>>
>>> Therefore, I'd recommend always removing the cache -- I actually blow
>>> away the entire directory tree -- and starting from scratch.
>>>
>>> To ensure (re)builds don't take too long, I also use ccache.  Although
>>> it works great for llvm, clang, etc..., it does break the libcxx and
>>> libcxxabi tests under check-all, but I've submitted a couple trivial
>>> patches that fix that problem.
>>>
>>> hth...
>>> don
>>> On Mar 17, 2016 11:26 AM, "David Blaikie via cfe-users" <
>>> cfe-users at lists.llvm.org> wrote:
>>>
>>>>
>>>>
>>>> On Wed, Mar 16, 2016 at 3:36 PM, jpsota at gmail.com <jpsota at gmail.com>
>>>> wrote:
>>>>
>>>>>
>>>>>
>>>>> On Wed, Mar 16, 2016 at 5:55 PM, David Blaikie <dblaikie at gmail.com>
>>>>> wrote:
>>>>>
>>>>>>
>>>>>>
>>>>>> On Wed, Mar 16, 2016 at 2:12 PM, jpsota at gmail.com <jpsota at gmail.com>
>>>>>> wrote:
>>>>>>
>>>>>>> David and all, a couple more questions.  I stumbled upon
>>>>>>> http://llvm.org/docs/Packaging.html and see a few other options.
>>>>>>> For a typical clang build where I am not hacking on clang, but I do want
>>>>>>> good error messages for debugging my programs,
>>>>>>>
>>>>>>
>>>>>> Define "my programs" - are you using LLVM as a library? If so, you
>>>>>> probably want a with-asserts build for development so you get better
>>>>>> failures when you use LLVM incorrectly. If you're just using Clang as a
>>>>>> normal compiler - a build without assertions should be just fine. If you
>>>>>> hit a crash in the compiler you can still file it, and we'll run in with an
>>>>>> assertions-enabled build to investigate further, generally.
>>>>>>
>>>>>
>>>>> Just using clang (and clang tools) -- not using LLVM as a library. So,
>>>>> running without assertions seems right for my needs.
>>>>>
>>>>>
>>>>>>
>>>>>>
>>>>>>> which options are recommended [1]? It seems like I should use
>>>>>>> --disable-assertions, but I'm not sure about enable-debug-symbols and
>>>>>>> enable-optimized (which seem at odds with each other?).
>>>>>>>
>>>>>>
>>>>>> If you're using LLVM as a library, but not expecting to be able to
>>>>>> fix any bugs in it yourself, probably optimized with assertiotns and
>>>>>> without debug info should be fine.
>>>>>>
>>>>>> If you're just using clang as a compiler, release (optimized), no
>>>>>> assertions, no debug info.
>>>>>>
>>>>>>
>>>>>
>>>>> It seems that just enabling -DCMAKE_BUILD_TYPE=Release is not
>>>>> sufficient to turn off assertions as I tried that and when I run clang-tidy
>>>>> --version it says " LLVM version 3.9.0svn; Optimized build with
>>>>> assertions." So, I'm going to try --disable-assertions
>>>>> --enable-optimized --disable-debug-symbols (or the environment
>>>>> variable equivalents).
>>>>>
>>>>> That seem right to you?
>>>>>
>>>>
>>>> Yeah, sounds about right.
>>>>
>>>>
>>>>> It's still confusing to me that there's no CMAKE_BUILD_TYPE that
>>>>> enables these sorts of options as a bundle, but I guess that's what I get
>>>>> from compiling from source.
>>>>>
>>>>
>>>> Yeah - not sure what the right recipe is for building things the same
>>>> as the official releases. No doubt it's written down somewhere...
>>>>
>>>>
>>>>>
>>>>> Thanks
>>>>> Jim
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>> [1]
>>>>>>
>>>>>>> --disable-assertions--enable-debug-symbols--enable-optimized
>>>>>>> [2]
>>>>>>>
>>>>>>> $ clang --version
>>>>>>>
>>>>>>> clang version 3.9.0 (trunk 263648)
>>>>>>>
>>>>>>> Target: x86_64-apple-darwin15.0.0
>>>>>>>
>>>>>>> Thread model: posix
>>>>>>>
>>>>>>> InstalledDir: /Users/jim/toolchains/llvm/bin
>>>>>>>
>>>>>>> On Wed, Mar 16, 2016 at 2:05 PM, jpsota at gmail.com <jpsota at gmail.com>
>>>>>>> wrote:
>>>>>>>
>>>>>>>> Got it -- thanks!
>>>>>>>>
>>>>>>>>
>>>>>>>> On Wednesday, March 16, 2016, David Blaikie <dblaikie at gmail.com>
>>>>>>>> wrote:
>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> On Wed, Mar 16, 2016 at 7:25 AM, jpsota at gmail.com via cfe-users <
>>>>>>>>> cfe-users at lists.llvm.org> wrote:
>>>>>>>>>
>>>>>>>>>> Hi, I recently installed "Release" clang (svn r263305) from
>>>>>>>>>> source on my OSX machine, and it's compiling a 20 file C++ program about
>>>>>>>>>> 50% slower than the natively installed clang 3.7 (that came with xcode, I
>>>>>>>>>> believe, although I don't use xcode). I currently have both sets of tools
>>>>>>>>>> installed and am able to switch back and forth and verify using time that
>>>>>>>>>> clang 3.7 takes about 30 seconds and clang 3.9 takes about 45 seconds, on
>>>>>>>>>> average (all flags, settings, etc. are the same for both). I did build with
>>>>>>>>>> "Release" as the build type, although I also did set
>>>>>>>>>> DLLVM_ENABLE_ASSERTIONS=ON (could this be the problem?).
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>> Yes, the build system should print a warning telling you that an
>>>>>>>>> assertions enabled build can be up to ten times slower. Performance
>>>>>>>>> comparisons/measurements of an assertions enabled compiler aren't something
>>>>>>>>> we really do/tune for.
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>> More details below. Please let me know if you have any ideas
>>>>>>>>>> about why this newer clang would be noticable slower.
>>>>>>>>>>
>>>>>>>>>> Generally, I'm just trying to use clang as a user, not a clang
>>>>>>>>>> developer, so if you have general recommendations for how to configure
>>>>>>>>>> this, please let me know.
>>>>>>>>>>
>>>>>>>>>> Thank you,
>>>>>>>>>> Jim
>>>>>>>>>>
>>>>>>>>>> How I configured and installed:
>>>>>>>>>>
>>>>>>>>>> cmake -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=Release
>>>>>>>>>> -DLLVM_ENABLE_ASSERTIONS=ON ../llvm
>>>>>>>>>> make
>>>>>>>>>> cmake -DCMAKE_INSTALL_PREFIX=$CLANG_PREFIX -P cmake_install.cmake
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> Here are some specifics:
>>>>>>>>>>
>>>>>>>>>> $ uname -a
>>>>>>>>>> Darwin localhost 15.0.0 Darwin Kernel Version 15.0.0: Wed Aug 26
>>>>>>>>>> 16:57:32 PDT 2015; root:xnu-3247.1.106~1/RELEASE_X86_64 x86_64
>>>>>>>>>>
>>>>>>>>>> $ clang --version
>>>>>>>>>> clang version 3.9.0 (trunk 263305)
>>>>>>>>>> Target: x86_64-apple-darwin15.0.0
>>>>>>>>>> Thread model: posix
>>>>>>>>>> InstalledDir: /Users/jim/toolchains/llvm/bin
>>>>>>>>>>
>>>>>>>>>> _______________________________________________
>>>>>>>>>> cfe-users mailing list
>>>>>>>>>> cfe-users at lists.llvm.org
>>>>>>>>>> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-users
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>
>>>>>>>
>>>>>>
>>>>>
>>>>
>>>> _______________________________________________
>>>> cfe-users mailing list
>>>> cfe-users at lists.llvm.org
>>>> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-users
>>>>
>>>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-users/attachments/20160323/c6036107/attachment.html>


More information about the cfe-users mailing list