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

jpsota@gmail.com via cfe-users cfe-users at lists.llvm.org
Fri Mar 18 06:42:18 PDT 2016


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/20160318/6ec32261/attachment.html>


More information about the cfe-users mailing list