Vincent Labrecque wrote: > > On Oct 7, 2009, at 7:54 AM, Vincent Labrecque wrote: >> >> And as I'm writing this, with regards to optimization flags, maybe the >> sage build system should provide an abstraction over -On. As I'm >> sure you know, these have widely differing behaviors across compilers. >> Sometimes -O3 will do nothing, sometimes it will break your code. >> ``high'', ``medium'' and ``low'' can be translated by an expert on >> the particular platform (os/compiler/compiler-version). > > This probably should even be per-package. In particular with packages > doing complex operation chains. It could be made easy for a package to > change the optimization level. > > To put what I tried to explain in the last post in practice, here's over > egineering in the form of a helper program, where packages can downgrade > optimization levels if they know better: > > eval `./interpret-optimization -O0 -O2 -O3` > #runs CFLAGS_OPTIMIZATION_LOW=-O0; export CFLAGS_OPTIMIZATION_LOW > # CFLAGS_OPTIMIZATION_MEDIUM=-O2; export > CFLAGS_OPTIMIZATION_MEDIUM > # CFLAGS_OPTIMIZATION_HIGH=-O3; export CFLAGS_OPTIMIZATION_MEDIUM > > # Here's what could happen if another part of the build system decided > that anything over -O3 was unsafe. > CFLAGS_OPTIMIZATION_HIGH=-O2 > eval `./interpret-optimization -O1 -O2 -O4` > # runs CFLAGS_OPTIMIZATION_LOW=-O1; export CFLAGS_OPTIMIZATION_LOW > # CFLAGS_OPTIMIZATION_MEDIUM=-O2; export > CFLAGS_OPTIMIZATION_MEDIUM > > Maybe one would want to also make sure low <= medium <= high at all > times, which would require a few more lines. > Keep in mind that this was only barely tested. Anyway. Here's how you > can unintrusively share environment variables. > > --Vincent > > #!/bin/sh > new_low=${1-"-O0"}; new_medium=${2-"-O2"}; new_high=${3-"-O3"} > current_low=${CFLAGS_OPTIMIZATION_LOW-"-O10"} > current_medium=${CFLAGS_OPTIMIZATION_MEDIUM-"-O10"} > current_high=${CFLAGS_OPTIMIZATION_HIGH-"-O10"} > > new_low_n=`echo $new_low | sed 's/^-O//'` > new_medium_n=`echo $new_medium | sed 's/^-O//'` > new_high_n=`echo $new_high | sed 's/^-O//'` > > current_low_n=`echo $current_low | sed 's/^-O//'`; > current_medium_n=`echo $current_medium | sed 's/^-O//'` > current_high_n=`echo $current_high | sed 's/-O//'` > > [ "$current_low_n" -gt "$new_low_n" ] && echo > 'CFLAGS_OPTIMIZATION_LOW='"$new_low"'; export CFLAGS_OPTIMIZATION_LOW' > [ "$current_medium_n" -gt "$new_medium_n" ] && echo > 'CFLAGS_OPTIMIZATION_MEDIUM='"$new_medium"'; export > CFLAGS_OPTIMIZATION_MEDIUM' > [ "$current_high_n" -gt "$new_high_n" ] && echo > 'CFLAGS_OPTIMIZATION_HIGH='"$new_high"'; export CFLAGS_OPTIMIZATION_HIGH'
The problem is -O4 is not necessarily the best if you want high optimisation. Take for example the Intel compiler for linux and OS X, it has things like -mtune=inanium2-p9000 -axsse2 -axeee3 -axss3_ATOM I believe, if someone wants to optimise the code, then they should set them just an environment variable to exactly what they want. But, in all cases, we have sensible defaults. Dave --~--~---------~--~----~------------~-------~--~----~ To post to this group, send an email to sage-devel@googlegroups.com To unsubscribe from this group, send an email to sage-devel-unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/sage-devel URL: http://www.sagemath.org -~----------~----~----~----~------~----~------~--~---