Compilers |
Oracle Solaris Studio 12.2
GCC for SPARC Systems V4.2 (gccfss).
Note: these compilers are described together because gccfss uses the same optimizing code generator as Studio 12. |
---|---|
Operating systems: | Solaris 10 |
Copyright: |
The text for many of the descriptions below was excerpted from the Solaris Studio Compiler Documentation, which is copyright © 2010 Oracle Corporation. The original documentation can be found at docs.sun.com. Some material below is quoted from the gccfss website, http://cooltools.sunsource.net/gcc/. Additional information about GCC options may be found at the The GNU C documentation website. |
Updated: 28-Sep-2010 jh |
Selecting one of the following will take you directly to that section:
[optimizer flag]
Increase the probability that the compiler will perform memcpy/memset transformations.
[optimizer]
Ignore parallelization factors in loop interchange heuristics.
[optimizer]
When considering whether to interchange loops, set memory store operation weight to n. A higher value of n indicates a greater performance cost for stores.
[optimizer flag]
Control the optimizer's loop inliner; set the minimum call site frequency counter in order to consider a routine for inlining.
[optimizer flag]
Control the optimizer's loop inliner; Set inline callee size limit to n. The unit roughly corresponds to the number of instructions.
[optimizer flag]
Control the optimizer's loop inliner; The inliner is allowed to increase the size of the program by up to n%.
[optimizer flag]
Control the optimizer's loop inliner; Allow routines to increase by up to n. The unit roughly corresponds to the number of instructions.
[optimizer flag]
Control the optimizer's loop inliner; Perform maximum inlining (without considering code size increase).
[optimizer flag]
Control the optimizer's loop inliner; Allow routines that are called recursively to still be eligible for inlining.
[optimizer flag]
Inliner only considers routines smaller than n pseudo instructions as possible inline candidates.
[optimizer flag]
Increase the probability that loop induction variables will replaced, so that some extraneous code can be eliminated from loops.
[optimizer flag]
Ignore parallelization factors in loop distribution heuristics.
[optimizer flag]
Reconstruct array subscripts during memory allocation merging and data layout program transformation.
The option instructs the compiler on the number of threads to use for automatically parallelized regions. The nthreads value is only applicable for parallelized regions in the modules that are compiled with this option. The value specified by this option will override any values previously set by the OMP_NUM_THREADS or PARALLEL environment variable. The runtime library may choose to alter the number of threads unless the environment variable OMP_DYNAMIC is set to false.
Note that this is a flag to the "iropt" component of the compilation system. In general, flags may be sent to iropt using "Qoption iropt" from the "f90" and "CC" commands; or using "-W2," from the "cc" command.
[optimizer flag]
Do speculative prefetching for link-list data structures; perform prefetching n iterations ahead.
[optimizer flag]
Do speculative prefetching for link-list data structures; do not attempt prefetching for innermost loops.
[optimizer flag]
Allow prefetching through up to n levels of indirect memory references.
Enable padding of arrays by n.
[optimizer flag]
Convert multiple short memory operations into single long memory operations.
[optimizer flag]
Perform loop tiling which is enabled by loop skewing. Loop skewing is a transformation that transforms a non-fully interchangeable loop nest to a fully interchangeable loop nest. The optional b<n> sets the tiling block size to n.
[optimizer flag]
Increase the probability that small-trip-count inner loops will be fully unrolled.
[optimizer flag]
Enable optimization of critical control paths
Assume data is naturally aligned.
Used for 403.gcc: allow use of compiler's internal builtin alloca.
Allows the compiler to assume that your code does not rely on setting of the errno variable.
A convenience option, this switch selects several other options that are described in this file.
A convenience option, this switch selects several other options that are described in this file.
A convenience option, this switch selects several other options that are described in this file.
A convenience option, this switch selects the following switches that are described in this file:
Allow faster math operations:
Programs that depend upon strict IEEE 754 conformance should not use this option.
Enables the use of the fused multiply-add instruction. For the production release of Sun Studio 12, the recommended spelling of this switch is "-fma=fused". For pre-release versions, the same effect can be achieved via the spelling "-Wc,-fma=fused" (C) or "-Qoption cg -fma=fused" (C++, Fortran).
Enables the use of the fused multiply-add instruction.
Selects faster (but nonstandard) handling of floating point arithmetic exceptions and gradual underflow.
Controls simplifying assumptions for floating point arithmetic:
Evaluate float expressions as single precision.
Sets the IEEE 754 trapping mode to common exceptions (invalid, division by zero, and overflow).
Turns off all IEEE 754 trapping modes.
Includes symbols in the executable. If the optimization level is -xO3 or lower, some optimizations may be disabled when -g is present. At -xO4 or higher, full optimization is performed, even when -g is present.
Includes symbols in the executable. If the optimization level is -xO3 or lower, some optimizations may be disabled when -g0 is present. At -xO4 or higher, full optimization is performed, even when -g0 is present.
Links in a library of general purpose memory allocation routines which can be faster than those found in libc, at the expense of more virtual memory consumed.
This library provides faster versions of some common functions, such as malloc/free and bcopy.
Disables use of the compiler-provided Cstd header files.
Include a library containing chip-specific memory routines.
Include the optimized math library. This option usually generates faster code, but may produce slightly different results. Usually these results will differ only in the last bit.
Include a library with vectorized versions of some elementary mathematical functions.
Link with the Apache C++ Standard Library ("stdcxx"). The conventions for naming libraries are described in the README that comes with stdcxx; for example, "std8D" indicates a 64-bit shared library with optimization enabled; "std8d" is a 32-bit shared library with optimization enabled.
Adds the directory for the Apache C++ Standard Library include files to the search path at compile time.
Adds the directory for the Apache C++ Standard Library to the search path at link time
Specifies library search directory for the Apache C++ Standard Library for use by the runtime linker. The information is recorded in the object file and passed to the runtime linker.
Use STLport's Standard Library implementation instead of the default libCstd.
The libsunmath math library contains functions that are not specified by any standard but are useful in numerical software. It also contains many of the functions that are in libm.so.2 but not in libm.so.1.
Links in a linker mapfile that enables the creation of a 'bss' segment, and aligns the segment at 4MB. This effectively provides an appropriate alignment for large page mapping of the heap.
Links in a library of "object caching" memory allocation routines which can be faster than those found in libc.
Specifies the ILP32 model: 32-bit ints, longs, and pointer types.
Specifies the LP64 model: 32-bit ints, 64-bit longs and pointers types.
Do not allow C++ exceptions. A throw specification on a function is accepted but ignored; the compiler does not generate exception code.
With -O1, also spelled "-O", optimizations include: basic local and global optimizations, such as induction variable elimination, common subexpression elimination, constant propogation, register allocation, and basic block merging.
In addition to the optimizations at -O2: add automatic inlining of functions in the same file, and use optmization algorithms that may take significantly more compilation time or that do not have as high a probability of improving execution time, such as speculative code motion.
[code generator flag]
There are several scheduling passes in the compiler. This option allows early passes to move instructions across call instructions.
[code generator flag]
Allow the enhanced pipeline scheduler (EPS) to use speculative (non-faulting) loads.
[code generator flag]
Use enhanced pipeline scheduling (EPS) and selective scheduling algorithms for instruction scheduling.
[code generator flag]
The number of live variables allowed at any given point is n more than the number of physical registers. Setting n to a significantly large number (e.g., 100) will disable register pressure heuristics in EPS.
[code generator flag]
Set the EPS window size, that is, the number of instructions it will consider across all paths when trying to find independent instructions to schedule a parallel group. Larger values may result in better run time, at the cost of increased compile time.
[code generator flag]
Sets the aggressiveness of the trace formation, where n is 4, 5, or 6. The higher the value of n, the lower the branch probability needed to include a basic block in a trace.
[code generator flag]
Turn on optimization to reduce branch after branch penalty: nops will be inserted to prevent one branch from occupying the delay slot of another branch.
[code generator flag]
Use profile feedback data to predict values and attempt to generate faster code along these control paths, even at the expense of possibly slower code along paths leading to different values. Correct code is generated for all paths.
[code generator flag]
Do function entry alignment at n-byte boundaries.
[code generator flag]
Peels the most frequent test branches/cases off a switch until the branch probability reaches less than 1/n. This is effective only when profile feedback is used
[code generator flag]
Control irregular loop prefetching; turns the module on (1) or off (0) (default is on for F90/F95; for C/C++ the default is off unless -xprefetch=auto or -xprefetch_level=[2|3] is present, in which case the default is on)
[code generator flag]
Control irregular loop prefetching; sets the prefetch look ahead distance, in bytes. The default is 256.
[code generator flag]
Control irregular loop prefetching; a setting of "1" means force user settings to override internally computed values.
[code generator flag]
Control irregular loop prefetching; a setting of "1" means force the optimization to be turned on for all languages.
[code generator flag]
Insert indirect prefetches when the indirect access chain spans across basic blocks.
[code generator flag]
Indicates to the compiler to insert n extra prefetches for each indirect access in outer loops
[code generator flag]
Turns on prefetching for outer loops
[code generator flag]
Use prefetch with function code 1 (prefetch for one read) for memory accesses which are read only.
[code generator flag]
Use prefetch with function code 3 (prefetch for one write) for memory accesses which are read and then written.
[code generator flag]
Control irregular loop prefetching; use weak prefetches in the general loop prefetch.
[code generator flag]
Use prefetch with function code 3 (prefetch for one write) for memory accesses which are written only.
[code generator flag]
Control irregular loop prefetching; sets the number of attempts at prefetching. If not specified, t=2 if -xprefetch_level=3 has been set; otherwise, defaults to t=1.
[code generator flag]
Specifies that all loops can be pipelined without needing to be concerned about loop-carried dependencies.
[code generator flag]
In pipelined loops, use floating point divide instructions for signed integer division.
[code generator flag]
Set number of outstanding prefetches in pipelined loops to <n>
[code generator flag]
Turn off prefetching in the prolog of modulo scheduled loops.
[code generator flag]
Turn off prefetching for stores in the pipeliner.
[code generator flag]
Turn off the use of strong prefetches in modulo scheduled loops.
[code generator flag]
Assert (to the pipeliner) that unsigned int computations will not overflow.
[code generator flag]
Reduce the probability that the compiler will hoist sethi insructions out of loops.
Allocate routine local variables on the stack.
Specifies the degree of conformance with the ISO C standard: -Xc indicates strict conformance, whereas -Xa indicates ISO C plus some K&R compatibility extensions.
Allows the compiler to perform type-based alias analysis at the specified alias level:
Allows the compiler to perform type-based alias analysis:
Specifies which instructions can be used. Among the choices are:
Turn on automatic parallelization for multiple processors.
Substitute intrinsic functions or inline system functions where profitable for performance.
xcache defines the cache properties for use by the optimizer. It can specify use of default assumptions ("generic"); use of whatever the compiler can assume about the current platform ("native"); or an explicit description of up to three levels of cache, using colon-separated specifiers of the form si/li/ai, where:
xchip determines timing properties that are assumed by the compiler. It does not limit which instructions are allowed (see xtarget for that). Among the choices are:
Analyze loops for inter-iteration data dependencies, and do loop restructuring. Loop restructuring includes loop interchange, loop fusion, scalar replacement, and elimination of "dead" array assignments.
Turn off inlining.
Perform optimizations across all object files in the link step:
At -xipo=2, the compiler performs inter-procedural aliasing analysis as well as optimization of memory allocation and layout to improve cache performance.
Use inline expansion for math library, libm.
Select the optimized math library.
Link with Sun supplied licensed sunperf library.
Perform link-time optimizations on the resulting executable over and above any optimizations in the object files. These optimizations are performed at link time by analyzing the object binary code. The meanings of the options are:
0. The link optimizer is disabled. (This is the default.)
1. Perform optimizations based on control flow analysis, including instruction cache coloring and branch optimizations, at link time.
2. Perform additional data flow analysis, including dead-code elimination and address computation simplification, at link time.
Set maximum assumed data alignment to be at a 4 byte boundary and raise signal SIGBUS in the case of misaligned data accesses.
Set maximum assumed data alignment to be at an 8 byte boundary and raise signal SIGBUS in the case of misaligned data accesses.
Sets the maximum assumed data alignment:
Specify optimization level n:
If multiple arrays are placed in common, insert padding between them for better use of cache. n specifies the amount of padding to apply, in units that are the same size as the array elements. If no parameter is specified then the compiler selects one automatically.
Pad local variables, for better use of cache.
Set the preferred page size for running the program.
Set the preferred heap page size for running the program.
Set the preferred stack page size for running the program.
Control generation of prefetch instructions.
(Explicit prefetch macros are not used in the source code of the SPEC CPU2006 benchmarks; therefore, in the context of CPU2006, -xprefetch=yes is effectively a synonym for -xprefetch=auto.)
Generate indirect prefetches for data arrays accessed indirectly.
Adjust the compiler's assumptions about prefetch latency by the specified factor. Typically values in the range of 0.5 to 2.0 will be useful. A lower number might indicate that data will usually be cache resident; a higher number might indicate a relatively larger gap between the processor speed and the memory speed (compared to the assumptions built into the compiler).
Control the level of searching that the compiler does for prefetch opportunities by setting n to 1, 2, or 3, where higher numbers mean to do more searching. The default for Oracle Solaris Studio C and Oracle Solaris Studio C++ is 1. The default for Oracle Solaris Studio Fortran and for gccfss is 2.
Collect profile data for feedback-directed optimization. If an option directory is named, the feedback will be stored there.
When FDO is used, the training run gathers information regarding execution paths and data values. Hardware performance counters are not used. FDO improves existing optimizations but does not introduce new classes of optimization.
For gccfss, profile collection works the same as Oracle Solaris Studio on SPARC.
Collect basic block coverage profile data for feedback-directed optimization. If an option directory is named, the feedback will be stored there.
When FDO is used, the training run gathers information regarding execution paths and data values. Hardware performance counters are not used. FDO improves existing optimizations but does not introduce new classes of optimization.
The ability to use tcov for feedback-directed optimization is new with release 12.2.
Use data collected for profile feedback. If an option directory is named, look for the feedback data there.
Analyze loops for reductions such as dot products, maximum and minimum finding.
Treat pointer-valued function parameters as restricted pointers.
Enables the use of non-faulting loads when used in conjunction with -xarch=v8plus. Assumes that no memory based traps will occur.
Selects options for architecture, chip timing, and cache sizes. These can also be controlled separately, via -xarch, -xchip, and -xcache, respectively. A wide variety of targets can be selected, including ultra3, ultra3cu, ultra3i, ultra3iplus, ultra4, ultra4plus, ultraT1, ultraT2, sparc64vi. In each case, appropriate options are selected for architecture, chip timing, and cache size to match that target.
If -xtarget=native is selected, options that are appropriate for the system where the compile is being done.
The default is -xtarget=generic, which sets the parameters for the best performance over most 32-bit platform architectures.
On Solaris SPARC systems, the default pointer size with -xtarget=native is 32-bit.
Enable unrolling loops n times where possible.
Allow the compiler to transform math library calls within loops into calls to the vector math library. Specifying -xvector is equivalent to -xvector=lib.
This library is necessary to get full implementation of _Complex data types on Solaris 8 and Solaris 9. It is not necessary (and should not be used) on Solaris 10.
This flag is just to trim the path from the compiler line.
Invoke the Oracle Solaris Studio C++ Compiler
Invoke the Oracle Solaris Studio C Compiler.
Invoke the Oracle Solaris Studio Fortran 90 Compiler
Invoke GCC for SPARC Systems, targetting C++ programs, and automatically adding the C++ library. See http://cooltools.sunsource.net/gcc/ for more information.
Note: this compiler is sometimes referenced below as "g-plus-plus" due to a limitation in how SPEC reports flags (it uses the XML name, and under the XML specification, such names are not allowed to use plus signs). The actual spelling used on the command line is "g++".
Turns on verbose mode, showing how command options expand. Shows each component as it is invoked.
Controls compiler verbosity. There are several values that can be used with this flag:
The default is -verbose=%none.
Same as -verbose=diags.
This flag will cause the Oracle Solaris Studio Fortran compiler to emit verbose messages.
Shows each component as it is invoked.
Directs the compiler to print the name and version ID of each component as the compiler executes.
Same as -verbose=version.
Specify the -xjobs option to set how many processes the compiler creates to complete its work. Currently, -xjobs works only with the -xipo option. When you specify -xjobs=n, the interprocedural optimizer uses n as the maximum number of code generator instances it can invoke to compile different files.
This library is necessary to get functions used for accessing name services. As there are no network-enabled CPU2006 benchmarks, this flag should not be used.
Platform settings
One or more of the following settings may have been applied to the testbed. If so, the "Platform Notes" section of the report will say so; and you can read below to find out more about what these settings mean.
autoup=<n> (Unix /etc/system)
When the file system flush daemon fsflush runs, it writes to disk all modified file buffers that are more
than n seconds old.
bufhwm=<n> (Unix /etc/system)
Sets the upper limit of the file system buffer cache. The units for bufhwm are in kilobytes.
cpu_bringup_set=<n> (Unix /etc/system)
Specifies which processors are enabled at boot time. <n> represents a bitmap of the
processors to be brought online.
disablecomponent (System Management Services)
This command can be used prior to booting the system for a 1-cpu test. The tester uses disablecomponent to
add all other CPUs to the "blacklist", which is a list of components that cannot be used at boot time.
LD_LIBRARY_PATH=<directories> (linker)
LD_LIBRARY_PATH controls the search order for both the compile-time and run-time linkers. Usually, it can be
defaulted; but testers may sometimes choose to explicitly set it (as documented in the notes in the submission), in order to
ensure that the correct versions of libraries are picked up.
LD_PRELOAD=<shared object> (Unix environment variable)
Adds the named shared object to the runtime environment.
MADV=access_lwp and LD_PRELOAD=madv.so.1 (Unix environment variables)
When the madv.so.1 shared object is present in the LD_PRELOAD list, it is possible to provide advice to the system
about how memory is likely to be accessed. The advice present in MADV applies to all processes and their descendants. A
commonly used value is access_lwp, which means that when memory is allocated, the next process to touch it will be
the primary user. Examples of other possible values include sequential, for memory that is used only once and
then no longer needed and acces_many when many processes will be sharing data.
MPSSHEAP=<size>, MPSSSTACK=<size>, and
LD_PRELOAD=mpss.so.1 (Unix environment variables)
When these variables are set, the mpss.so.1 shared object will set the preferred page size for new processes, and their
descendants, to the requested sizes for the heap and stack.
PARALLEL=<n> (Unix environment variable)
If programs have been compiled with -xautopar, this environment variable can be set to the number of
processors that programs should use.
segmap_percent=<n> (Unix /etc/system)
This value controls the size of the segmap cache as a percent of total memory. Set this value to help keep the file system cache from consuming memory unnecessarily.
STACKSIZE=<n> (Unix environment variable)
Set the size of the stack (temporary storage area) for each slave thread of a multithreaded program.
submit=echo 'pbind -b...' > dobmk; sh dobmk (SPEC tools, Unix shell)
When running multiple copies of benchmarks, the SPEC config file feature submit is sometimes used to
cause individual jobs to be bound to specific processors. If so, the specific command may be found in the config file; here
is a brief guide to understanding that command:
psrset -c <n> (Unix, superuser commands)
Creates a new processor set and displays the new processor set ID.
psrset -e <n> (Unix, superuser commands)
Executes a command (with optional arguments) in the specified processor set.
The command process and any child processes are executed only by processors in the processor set.
svcadm disable webconsole (Unix, superuser commands)
Turns off the Sun Web Console, a browser-based interface that performs systems management.
If it is enabled, system administrators can manage systems, devices and services from remote systems.
ts_dispatch_extended=<n> (Unix /etc/system)
Controls which dispatch table is loaded upon boot. A value of 1 loads the large system table, a value of 0 loads the regular system table.
tune_t_fsflushr=<n> (Unix /etc/system)
Controls the number of seconds between runs of the file system flush daemon, fsflush.
ulimit -s <n> (Unix shell)
Sets the stack size to n kbytes, or "unlimited" to allow the stack size to grow without limit.
Note that the "heap" and the "stack" share space; if your application allocates large amounts of memory on the heap,
then you may find that the stack limit should not be set to "unlimited". A commonly used setting for SPEC CPU2006 purposes
is a stack size of 128MB (131072K).