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

jpsota@gmail.com via cfe-users cfe-users at lists.llvm.org
Wed Mar 23 05:29:42 PDT 2016


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/313d5c3a/attachment.html>


More information about the cfe-users mailing list