[CMake] default release build flags
Robert Maynard
robert.maynard at kitware.com
Mon May 9 10:58:25 EDT 2016
I think that changing the Release mode to generate non portable code
is very nasty side-effect that would bite numerous projects down the
road. I think a better avenue would be to think about adding another
build configuration called ReleaseNative which would produce highly
optimized non portable code. ( Name would need iteration ).
Are you encountering this issue mainly when building locally or for
HPC machines? I ask because maybe expanding the cross compilation
infrastructure to set native flags would be a better avenue.
On Thu, Apr 28, 2016 at 2:21 PM, Burlen Loring <burlen.loring at gmail.com> wrote:
> Hi Guys,
>
> I'd like to discuss changing the defaults of CMAKE_C/CXX_FLAGS_RELEASE on
> gcc, and potentially gcc like compilers such as clang and intel.
>
> Currently the default is "-O3 -DNDEBUG". I would like to discuss changing
> this to "-O3 -march=native -mtune=native -DNDEBUG". This change will enable
> numerous optimizations and produce faster code targeted for the cpu in use
> during the compilation.
>
> The majority of people want cpu specific optimization enabled when compiling
> code for use on their system. however many folks (specifically users of
> scientific codes who are often not computer scientists) don't realize
> requirement of passing march and mtune flags to enable cpu specific
> instruction sets. Of course there are a small number of developers making
> binaries for distribution who do not want to use cpu specific instructions,
> but the number of developers make binaries for distribution is small
> compared to folks who just need to compile code for their own use, and the
> folks making binaries are well aware of the issues and can be expected to
> know to disable such features.
>
> on my system here is the difference
>
> -03:
>
> $gcc -O3 -Q --help=target | grep enabled
> -m64 [enabled]
> -m80387 [enabled]
> -m96bit-long-double [enabled]
> -malign-stringops [enabled]
> -mfancy-math-387 [enabled]
> -mfentry [enabled]
> -mfp-ret-in-387 [enabled]
> -mglibc [enabled]
> -mhard-float [enabled]
> -mieee-fp [enabled]
> -mlong-double-80 [enabled]
> -mno-sse4 [enabled]
> -mpush-args [enabled]
> -mred-zone [enabled]
> -mstackrealign [enabled]
> -mtls-direct-seg-refs [enabled]
>
> -O3 -march=native -mtune=native
>
> $gcc -O3 -march=native -mtune=native -Q --help=target | grep enabled
> -m64 [enabled]
> -m80387 [enabled]
> -m96bit-long-double [enabled]
> -maes [enabled]
> -malign-stringops [enabled]
> -mavx [enabled]
> -mcx16 [enabled]
> -mf16c [enabled]
> -mfancy-math-387 [enabled]
> -mfentry [enabled]
> -mfp-ret-in-387 [enabled]
> -mfsgsbase [enabled]
> -mfxsr [enabled]
> -mglibc [enabled]
> -mhard-float [enabled]
> -mieee-fp [enabled]
> -mlong-double-80 [enabled]
> -mmmx [enabled]
> -mpclmul [enabled]
> -mpopcnt [enabled]
> -mpush-args [enabled]
> -mrdrnd [enabled]
> -mred-zone [enabled]
> -msahf [enabled]
> -msse [enabled]
> -msse2 [enabled]
> -msse3 [enabled]
> -msse4 [enabled]
> -msse4.1 [enabled]
> -msse4.2 [enabled]
> -mssse3 [enabled]
> -mstackrealign [enabled]
> -mtls-direct-seg-refs [enabled]
> -mxsave [enabled]
> -mxsaveopt [enabled]
>
> notice specifically the lack of sse and avx in -O3! these instruction sets
> play a major role in providing computational performance in modern cpus, and
> that's why I think they should be enable by default in cmake Release builds.
> clang and intel also support these flags, although there may be better
> alternatives.
>
> What do you think?
>
> Burlen
>
> --
>
> Powered by www.kitware.com
>
> Please keep messages on-topic and check the CMake FAQ at:
> http://www.cmake.org/Wiki/CMake_FAQ
>
> Kitware offers various services to support the CMake community. For more
> information on each offering, please visit:
>
> CMake Support: http://cmake.org/cmake/help/support.html
> CMake Consulting: http://cmake.org/cmake/help/consulting.html
> CMake Training Courses: http://cmake.org/cmake/help/training.html
>
> Visit other Kitware open-source projects at
> http://www.kitware.com/opensource/opensource.html
>
> Follow this link to subscribe/unsubscribe:
> http://public.kitware.com/mailman/listinfo/cmake
More information about the CMake
mailing list