Beruflich Dokumente
Kultur Dokumente
Introduction
This paper details what's new in the IBM XL C/C++ compiler family. IBM XL C/C++ for AIX, XL C/C++ for Linux, and XL C/C++ for Blue Gene/Q compiler products are the successor to IBM's VisualAge C++ compiler. Compiler features vary slightly by operating system platform, and platform-specific features are described in the appropriate sections. The IBM XL C/C++ compilers share the common features described below unless otherwise noted. IBM XL C for AIX, V12.1, XL C/C++ for AIX, V12.1, XL C/C++ for Linux, V12.1, and IBM XL C/C++ for Blue Gene/Q, V12.1 are part of a multi-platform XL compiler family derived from a common code base optimized to run on IBM Power Architecture. IBM XL C for AIX , XL C/C++ for AIX, XL C/C++ for Linux, and XL C/C++ for Blue Gene/Q are industry leading optimizing compiler products that support IBM Power systems. IBM XL C/C++ fully exploits POWER6 and POWER7 architectures including the Power 970 as used in the IBM BladeCenter systems. The POWER7 processor is the very latest member of the IBM Power family, announced February 2010. IBM XL C/C++ for AIX and XL C/C++ for Linux support all new features and enhancements for the POWER7 processors, including the Vector Scalar eXtension (VSX) instruction set and the prefetch instructions. IBM XL C/C++ for Blue Gene/Q supports all new features and enhancements for the PowerPC processor, including the Quad Processing eXtension (QPX) instruction set. Note: For more information about the benchmarks for IBM Power Systems, see: v www.ibm.com/systems/power (IBM Power Systems) v www.spec.org/ v www.tpc.org/tpcc/ New features and enhancements in IBM XL C/C++ for AIX, V12.1, XL C/C++ for Linux, V12.1, and XL C/C++ for Blue Gene/Q, V12.1: v New C++11 features v New C11 features v OpenMP 3.1 support v Performance and optimization enhancements v New diagnostic reports v New built-in functions IBM XL C/C++ for AIX, V12.1 supports IBM Power Systems capable of running IBM AIX V5.3, AIX V6.1, AIX V7.1, PASE for i 6.1, and PASE for i 7.1. For more information, see: www.ibm.com/software/ awdtools/xlcpp/aix/ . IBM XL C/C++ for Linux, V12.1 is available on selected Linux distributions running on IBM Power Systems servers. You can run the compiler on Red Hat Enterprise Linux 5.7 (RHEL5.7), Red Hat Enterprise Linux 6.2 (RHEL6.2), SUSE Linux Enterprise Server 10 Service Pack 4 (SLES 10 SP4) and SUSE Linux Enterprise Server 11 Service Pack 2 (SLES 11 SP2). For more information, see: www.ibm.com/ software/awdtools/xlcpp/linux/. IBM XL C/C++ for Blue Gene/Q, along with the compiler related tools, supports the Red Hat Enterprise Linux 6.2 (RHEL 6.2) operating system on Blue Gene/Q Front End nodes. The generated object programs and runtime libraries are run on Blue Gene/Q compute nodes with the required software and disk space.
Blue Gene/Q compute nodes support the Blue Gene Compute Node Kernel (CNK) operating system. For more information, see: http://www-01.ibm.com/software/awdtools/xlcpp/features/bg/index.html. Other members of the IBM XL C/C++ compiler family include: v z/OS XL C/C++ (an optional priced feature of the z/OS operating system) The XL C/C++ compiler feature for z/OS is a comprehensive and powerful development package for creating optimized high-performance z/OS-based XL C/C++ business software solutions. z/OS XL C/C++ includes the latest compiler features and optimization technologies available with the IBM XL C/C++ compiler family, including support for selected features of the new C++ standard, ISO/IEC 14882:2011 (C++11). For more information, see: www.ibm.com/software/awdtools/czos/. v XL C/C++ for z/VM IBM XL C/C++ for z/VM is an advanced optimizing compiler for the z/VM platform. XL C/C++ is a standards-based professional programming tool that can be used for developing large, complex, and computationally intensive applications. XL C/C++ for z/VM provides you with the flexibility to write C and C++ applications, and to extend existing C applications using C++. XL C/C++ supports the ISO/IEC 9899:1999 international standard (C99), ISO/IEC 14882: 2003 (ISO C++ 2003), and selected features for the new C++ standard, ISO/IEC 14882:2011 (C++11). For more information, see: www.ibm.com/software/awdtools/czvm/. IBM XL C/C++ compilers comply with the latest C and C++ international standards and industry specifications, facilitating application portability across hardware platforms and operating systems. The compilers support a large array of common language features. The increased compatibility with GNU C/C++ gives you the versatility to build different parts of your application with either the IBM or GNU compiler, and still bind the parts together into a single application. One common use of this functionality is to build an application with IBM XL C/C++ that interacts with the GNU-built dynamic libraries, without recompiling the library source code. Applications built with this functionality can integrate with GNU assembler, and also provide full support for debugging through gdb, the GNU debugger. IBM XL C/C++ compilers on AIX and Linux also offer support for the IBM XL Fortran compiler on AIX and Linux through interlanguage calls. IBM XL C/C++ offers developers the opportunity to create and optimize 32-bit and 64-bit applications for the AIX and Linux platforms, and 64-bit applications for the Blue Gene/Q platform. On operating systems and architectures supporting the VMX instruction set, the IBM XL C/C++ compilers allow you to take advantage of the AltiVec programming model and APIs. They also allow you to improve the performance of your data and CPU intensive applications by exploiting the cutting edge IBM XL C/C++ automatic SIMD vectorization technology. Information on IBM XL C and XL C/C++ compilers is available at: https://www.ibm.com/developerworks/rational/community/cafe/ccpp.html
Standards conformance
IBM compilers strive to maximize the performance of scientific, technical, and commercial applications on server platforms. Multiple operating system availability ensures cross-platform portability, augmented by standards compliance. IBM XL C and XL C++ compilers conform to the following language standards and industry specifications: v C89, C99, and selected features of C11 standard
Note: C11 is a new version of the C programming language standard, published as ISO/IEC 9899:2011. IBM continues to develop and implement the features of the new standard. The implementation of the language level is based on IBM's interpretation of the standard. Until IBM's implementation of all the features of the C11 standard is complete, including the support of a new C standard library, the implementation may change from release to release. IBM makes no attempt to maintain compatibility, in source, binary, or listings and other compiler interfaces, with earlier releases of IBM's implementation of the new features of the standard and therefore they should not be relied on as a stable programming interface. v C++98, C++03, and selected features of C++11 standard Note: C++11 is a new version of the C++ programming language standard, published as ISO/IEC14882:2011. IBM continues to develop and implement the features of the new standard. The implementation of the language level is based on IBM's interpretation of the standard. Until IBM's implementation of all the features of the C++11 standard is complete, including the support of a new C++ standard library, the implementation may change from release to release. IBM makes no attempt to maintain compatibility, in source, binary, or listings and other compiler interfaces, with earlier releases of IBM's implementation of the new features of the C++11 standard and therefore they should not be relied on as a stable programming interface. v OpenMP V3.1 (excluding z/OS XL C/C++ and XL C/C++ for z/VM) v AltiVec (excluding z/OS XL C/C++, XL C/C++ for z/VM, and XL C/C++ for Blue Gene/Q) v IEEE POSIX 1003.2
Key features
Optimization capabilities
One of the key strengths of IBM XL C/C++ is optimization. These compilers offer the benefit of optimization technology that has been evolving at IBM since the late 1980s, combining extensive hardware knowledge with a comprehensive understanding of compiler technology and what users look for in a compiler when building end-user applications. The optimizations can decrease execution time and make your applications run faster, producing code that is highly tuned for execution on Power Architecture platforms. Improving optimization is a key goal of the IBM compiler team, and one that will continue to be a major focus with each iteration of the IBM XL C/C++ compilers. The optimizer includes five base optimization levels: -O0, -O2, -O3, -O4, and -O5. These levels allow you to choose from minimal optimization to intense program analysis that provides benefits even across programming languages. Optimization analyses range from local basic block to subprogram to file-level to whole-program analysis. The higher the optimization level, the more intense the program analysis becomes as increasingly sophisticated optimization techniques are applied to your code. At any optimization level, the optimizer performs transformations that result in performance improvements, while still executing your code the way it was written. At higher levels, the optimizer can trade numeric precision for execution speed. If this effect is not desired, you can specify compiler options such as -qstrict to prevent such trade-offs. Other options such as -qsmallstack or -qcompact allow you to bias optimization decisions in favor of smaller stack space or program size. The IBM XL C/C++ compilers do not limit your optimization choices unnecessarily. All of the optimization capabilities, including those discussed above, can be combined. You choose the levels and types of optimizations best suited to your application and build constraints, putting ultimate control of how your application builds and runs firmly in your hands. For more information on optimization, see the Code optimization with the IBM XL Compilers whitepaper at www.ibm.com/support/docview.wss?uid=swg27005174 and the IBM XL C/C++ Optimization and Programming Guide.
v built-in functions for POWER7 processors v compiler options for POWER7 processors Vector scalar extension data types and intrinsic functions IBM XL C and XL C/C++ compilers, V11.1 compilers and later support the Vector Scalar eXtension (VSX) instruction set in the POWER7 processors. New data types and intrinsic functions are introduced to support the VSX instructions. With the VSX intrinsic functions and the original Vector Multimedia eXtension (VMX) intrinsic functions, you can efficiently manipulate vector operations in your application. For more information about the VSX data types and intrinsic functions, see Vector types in the XL C/C++ Language Reference and Vector built-in functions in the XL C/C++ Compiler Reference. Mathematical Acceleration Subsystem (MASS) libraries for POWER7 processors Vector libraries The vector MASS library libmassvp7.a contains vector functions that have been tuned for the POWER7 architecture. The functions can be used in either 32-bit mode or 64-bit mode. SIMD libraries The MASS SIMD library libmass_simdp7.a contains an accelerated set of frequently used math intrinsic functions that provide improved performance over the corresponding standard system library functions. Built-in functions for POWER7 processors IBM XL C/C++ compilers provide a number of built-in functions that map directly to POWER hardware instructions. These functions provide access to powerful hardware operations at a source level such as cache prefetching and direct insertion of arithmetic hardware operations. Built-in functions can be used in all the IBM XL C/C++ compilers allowing you to port your code between AIX and Linux, and still exploit the hardware. Compiler options for POWER7 processors The POWER7 processor has cache control and stream prefetch extensions that support store stream prefetch and prefetch depth control. IBM XL C/C++ provides several built-in functions to provide you direct access to these instructions.
The vector MASS library libmass.a contains vector functions that have been tuned for the Blue Gene/Q architecture. The functions is used in 64-bit mode. SIMD libraries The MASS SIMD library libmass_simd.a contains an accelerated set of frequently used math intrinsic functions that provide improved performance over the corresponding standard system library functions.
Note: v Compiler support for decimal floating-point operations requires AIX 5L for POWER V5.3 with the 5300-06 Technology Level or later. For more information, see Extension for the programming language C to support decimal floating-point arithmetic: TR 24732 and Decimal Types for C++: Draft 4. v Compiler support for decimal floating-point operations on Linux requires Advanced Tool Chain 4.0.
Diagnostic listings
The compiler output listing can provide important information to help you develop and debug your applications more efficiently. Listing information is organized into optional sections that you can include or omit. For more information about the applicable compiler options and the listing itself, refer to Compiler messages and listings in the XL C/C++ Compiler Reference.
Parallel programming
IBM provides parallel programming through AltiVec/VMX (on AIX and Linux), OpenMP, and internal automatic parallelization and autosimdization.
POSIX functions are slow and not useful for converting single-threaded applications to multi-threaded applications. This feature allows thread-local storage using a new storage that indicates a variable has thread storage duration. Thread-local storage (TLS) is enabled by the __thread storage class specifier, or the threadprivate directive in OpenMP. -qtls enables recognition of the __thread storage class specifier. Thread-local variables are global-lifetime memory locations (variables with linkage) that are replicated one per thread. At runtime, a copy of the variable is created for each thread that accesses it. Use of thread-local storage prevents race conditions to global data, without the need for low-level synchronization of threads. A simple example demonstrating a practical use of thread-local storage is the C error code variable errno. The thread-local storage support has been enhanced to include __attribute__((tls-model("string"))), where string is one of local-exec, initial-exec, local-dynamic, or global-dynamic.
AltiVec support
IBM XL C/C++ for AIX and Linux supports the AltiVec programming model through non-orthogonal language extensions. These language extensions can be used on operating systems and hardware supporting the VMX instruction set. The IBM implementation of the AltiVec Programming Interface specification is an extended syntax that allows type qualifiers and storage class specifiers to precede the keyword vector (or alternately, __vector) in a declaration. Although not strictly required by the AltiVec Programming Interface specification, the vector keyword is recognized in a declaration context only when used as a type specifier (and when you compile the application with -qaltivec). The other AltiVec keywords, pixel and bool (for C), are recognized as valid type specifiers only when used in a vector declaration context. This approach has an important advantage: it allows your application to continue to use vector and pixel as variables and function names. To ensure maximum portability, use the underscore versions of the specifiers vector and pixel (__vector and __pixel) in declarations. VMX support is available on V12.1 AIX compilers where the target environment is running AIX V5.3, AIX V6.1, and AIX 7.1 on architectures that support the Single Instruction Multiple Data (SIMD) instruction set.
OpenMP support
IBM XL C for AIX, V12.1, XL C/C++ for AIX, V12.1, XL C/C++ for Linux, V12.1, and XL C/C++ for Blue Gene/Q, V12.1 include support for the OpenMP API V3.1 specification for shared memory parallel programming. OpenMP provides a simple and flexible interface for parallel application development. OpenMP is comprised of three components: compiler directives, runtime library functions, and environment variables. Applications that conform to the OpenMP specification are easily ported to other platforms from desktop to super computer that support the specification. OpenMP supports applications that run both as parallel programs (multiple threads of execution and a full OpenMP support library) and as sequential programs (directives are ignored and a stub library is linked). For a more in-depth discussion of application parallelization using OpenMP, see the following IBM Redbooks, Developing and Porting C and C++ Applications on AIX: v www.redbooks.ibm.com/abstracts/SG245674.html?Open For more information on OpenMP, see: v www.openmp.org
Table 2. IBM XL C++ compiler and Boost version supported (continued) 10.1 1.34.1
A patch file is available that modifies the Boost 1.47.0 C++ libraries so that they can be built and used with XL C/C++ applications. The patch or modification file does not extend or otherwise provide additional functionality to the Boost C++ libraries. To download the patch file and for more information on support for these libraries, see the relevant links on the XL C/C++ Library page. Check the IBM XL C/C++ web pages for information regarding modifications that apply to the supported version of Boost. For a summary of the results of regression tests, see (Boost Library Regression Test Summaries): v www.ibm.com/support/docview.wss?uid=swg27006911 For more information on portable C++ source libraries from Boost, see: v www.boost.org
The MASS scalar library, libmass.a, contains an accelerated set of frequently used math intrinsic functions in the AIX system library libm.a. The vector MASS library libmassvp7.a contains vector functions that have been tuned for the POWER7 architecture. The functions can be used in either 32-bit mode or 64-bit mode.
C++ Templates
Templates are an area of the C++ language that provides a great deal of flexibility for developers. The ISO C++ standard defines the language facilities and features for templates. The IBM XL C++ compiler provides several methods to compile templates: v Simple layout method. This results in code bloat and longer compile time, but it is easy to use and requires no specific structuring by programmers. v Automatic instantiation using -qtempinc. This requires user code structuring but it addresses the long compile time problem inherent in the simple layout method. v Automatic instantiation using -qtemplateregistry. This requires no user code restructuring and addresses both the long compile time and code bloat issues. The instantiation mechanisms are the external mechanisms that allow C++ implementations to create instantiations correctly. These mechanisms may be constrained by requirements of the linker and other software building tools. IBM XL C++ compilers have two queried instantiation mechanisms, -qtempinc available before V7.0 and -qtemplateregistry available since V7.0. One of the differences between -qtempinc and -qtemplateregistry is that -qtempinc delays the instantiation until link time, and the -qtemplateregistry does the instantiation in the first compilation unit that uses it. -qtempinc and -qtemplateregistry compiler options are mutually exclusive. Here is how you get the various instantiation models on our compiler: Greedy instantiation default is -qtmplinst=auto -qnotemplateregistry -qnotempinc or -qtmplinst=always Queried instantiation -qtemplateregistry or -qtempinc (for example -qtmplinst=auto) Manual instantiation -qtmplinst=none with explicit instantiations in your code.
10
The utilization tracking and reporting feature is easy to set up and manage, and utilization tracking does not impact the usage or performance of the compiler. For detailed information about the utilization tracking and reporting feature, see Tracking and reporting compiler usage in the XL C/C++ Compiler Reference.
What's new in XL C for AIX, V12.1, XL C/C++ for AIX, V12.1, XL C/C++ for Linux, V12.1, and XL C/C++ for Blue Gene/Q, V12.1
New features of C++11
The following features are introduced in IBM XL C/C++ for AIX, V12.1, XL C/C++ for Linux, V12.1, and XL C/C++ for Blue Gene/Q, V12.1: v Explicit conversion operators v Generalized constant expressions v Reference collapsing v Right angle brackets v Rvalue references v Scoped enumerations v Trailing return type You can use the -qlanglvl=extended0x option to enable most of the C++ features and all the currently-supported C++11 features. For details, see -qlanglvl in the XL C/C++ Compiler Reference. Explicit conversion operators The explicit conversion operators feature supports the explicit function specifier being applied to the definition of a user-defined conversion function. You can use this feature to inhibit implicit conversions from being applied where they might be unintended, and thus program more robust classes with fewer ambiguity errors. You can use the -qlanglvl=explicitconversionoperators option to enable this feature. Generalized constant expressions The generalized constant expressions feature extends the expressions permitted within constant expressions. A constant expression is one that can be evaluated at compile time. You can use the -qlanglvl=constexpr option to enable this feature. Note: In XL C/C++ V12.1, this feature is a partial implementation of what is defined in the C++11 standard. Reference collapsing With the reference collapsing feature, you can form a reference to a reference type using one of the following contexts: v A decltype specifier v A typedef name v A template type parameter You can use the -qlanglvl=referencecollapsing option to enable this feature. Right angle brackets
11
In the C++ language, two consecutive closing angle brackets (>) must be separated with a white space, because they are otherwise parsed as the bitwise right-shift operator (>>). The right angle bracket feature removes the white space requirement for consecutive right angle brackets, thus making programming more convenient. You can use the -qlanglvl=rightanglebracket option to enable this feature. Rvalue references With the rvalue references feature, you can overload functions based on the value categories of arguments and similarly have lvalueness detected by template argument deduction. You can also have an rvalue bound to an rvalue reference and modify the rvalue through the reference. This enables a programming technique with which you can reuse the resources of expiring objects and therefore improve the performance of your libraries, especially if you use generic code with class types, for example, template data structures. Additionally, the value category can be considered when writing a forwarding function. You can use the -qlanglvl=rvaluereferences option to enable this feature. Scoped enumerations With the scoped enumeration feature, you can get the following benefits: v The ability to declare a scoped enumeration type, whose enumerators are declared in the scope of the enumeration. v The ability to declare an enumeration without providing the enumerators. The declaration of an enumeration without providing the enumerators is referred to as forward declaration. v The ability to specify explicitly the underlying type of an enumeration. v Improved type safety with no conversions from the value of an enumerator (or an object of an enumeration type) to an integer. You can use the -qlanglvl=scopedenum option to enable this feature. Trailing return type The trailing return type feature is useful when declaring the following types of templates and functions: v Function templates or member functions of class templates with return types that depend on the types of the function arguments v Functions or member functions of classes with complicated return types v Perfect forwarding functions You can use the -qlanglvl=autotypededuction option to enable this feature.
12
Anonymous structures This feature enables the declaration of anonymous structures under the extc1x language level. Complex type initialization This feature enables the initialization of the C99 style complex types. The _Noreturn function specifier The _Noreturn function specifier declares that a function does not return to its caller. You can define your own functions that do not return using this function specifier. The compiler can produce better code by ignoring what would happen if the function returns. Static assertions The addition of static assertions to the C language has the following benefits: v Libraries can detect common usage errors at compile time. v Implementations of the C Standard Library can detect and diagnose common usage errors, improving usability. You can declare static assertions to check important program invariants at compile time.
13
Small String Optimized string class If you have programs that produce large amounts of small strings, that is, strings smaller than 32 bytes, consider using the new ssostring.h header file supplied by IBM to reduce runtime overhead and improve runtime performance.
14
15
Table 4. New or changed compiler options (continued) Option -qlanglvl Description New suboptions have been added or updated to -qlanglvl: v -qlanglvl=autotypededuction: This suboption can now enable the trailing return type feature in addition to the auto type deduction feature. v qlanglvl=c1xnoreturn: This suboption enables support for the _Noreturn function specifier. v -qlanglvl=complexinit: This suboption controls whether to enable the initialization of complex types. v -qlanglvl=compatrvaluebinding: This suboption instructs the compiler to allow a non-const lvalue reference to bind to an rvalue of a user-defined type where an initializer is not required. v -qlanglvl=constexpr: This suboption enables the generalized constant expressions feature, which extends the expressions permitted within constant expressions. v -qlanglvl=explicitconversionoperators: This suboption enables the explicit conversion operators feature, which allows you to inhibit unintended implicit conversions through the user-defined conversion function. v -qlanglvl=extc1x: This suboption enables all the currently supported C11 features and other implementation-specific language extensions. v -qlanglvl=referencecollapsing: This suboption enables the reference collapsing feature, with which you can form a reference to a reference type using a decltype specifier, a typedef name, or a template type parameter. v -qlanglvl=rightanglebracket: This suboption enables the right angle bracket feature, which removes the white space requirement for consecutive right angle brackets. v -qlanglvl=rvaluereferences: This suboption enables the rvalue references feature. v -qlanglvl=scopedenum: This suboption enables the scoped enumeration feature, with which you can declare a scoped enumeration type or an enumeration without providing the enumerators. v -qlanglvl=tempsaslocals: This suboption extends the lifetime of temporaries to reduce migration difficulty. v -qlanglvl=textafterendif: This suboption suppresses the warning message that is emitted when you are porting code from a compiler that allows extra text after #endif or #else to IBM XL C/C++ compiler. -qlistfmt The -qlistfmt option is enhanced to generate HTML reports as well as XML reports, containing information about optimizations performed by the compiler and missed optimization opportunities. The default behavior of -qlistfmt has changed. In this release, if you do not specify a particular type of content, the option generates all the available content, rather than generating none.
16
Table 4. New or changed compiler options (continued) Option -qnamemangling -qoptfile Description The v12 namemangling scheme is added to preserves the cv-qualifiers nested within template argument lists. The new option -qoptfile specifies a file containing a list of additional command line options to be used for the compilation. -qpic=large now enables large Table of Contents (TOC) access and prevents TOC overflow conditions when the TOC is larger than 64 Kb. The default value is changed from -qnoshowpdf to -qshowpdf.
-qpic
Table 5. New or changed compiler directives Directive #pragma ibm independent_loop Description The independent_loop pragma is added. It explicitly states that the iterations of the chosen loop are independent, and that the iterations can be executed in parallel. The iterations pragma is added. It specifies the approximate number of loop iterations for the chosen loop. The max_iterations pragma is added. It specifies the approximate maximum number of loop iterations for the chosen loop. The min_iterations pragma is added. It specifies the approximate minimum number of loop iterations for the chosen loop. The simd_level pragma is added. It controls the compiler code generation of vector instructions for individual loops.
#pragma simd_level
17
XL C/C++ supports a subset of the GNU compiler command options to facilitate porting applications developed with gcc and g++ compilers. This support is available when the gxlc or gxlc++ invocation command is used together with select GNU compiler options. Where possible, the XL C/C++ compiler maps GNU options to their XL C/C++ compiler option counterparts before invoking the XL C/C++ compiler. These invocation commands use a plain text configuration file to control GNU-to-XL C/C++ option mappings and defaults. You can customize this configuration file to better meet the needs of any unique compilation requirements you may have. See "Reusing GNU C /C++ compiler options with gxlc and gxlc++" for more information.
libCcore.a libC128core.a
18
Table 6. Core Language libraries (continued) libhCcore.a The language core version of libhC.a.
Invocation commands have been added to facilitate using these libraries: v xlc++core v xlCcore Equivalent special invocations: v xlc++core_r, xlc++core_r7, xlc++core128, xlc++core128_r, xlc++core128_r7 v xlCcore_r, xlCcore_r7, xlC128core, xlC128core_r, xlC128core_r7 Explanation of suffixes for special invocations: v 128-suffixed invocations - All 128-suffixed invocation commands are functionally similar to their corresponding base compiler invocations. They specify the -qldbl128 option, which increases the length of long double types in your program from 64 to 128 bits. They also link with the 128-bit versions of the C and C++ runtime libraries. v _r suffixed invocations - All _r suffixed invocations allow for threadsafe compilation and you can use them to link the programs that use multithreading. Use these commands if you want to create threaded applications. The _r7 invocations are provided to help migrate programs based on POSIX Draft 7 to POSIX Draft 10.
19
Additionally, the compilers offer the SNAPSHOT directive and the -qoptdebug and -qkeepparm options to assist you in debugging optimized code.
Rational PurifyPlus
IBM Rational PurifyPlus is a dynamic software analysis solution designed to help developers write faster, more reliable code. It includes the following capabilities packaged into a single product: Memory debugging Pinpoints memory errors that are hard to find, such as uninitialized memory access, buffer overflow, and improper freeing of memory. Memory leak detection Identifies memory blocks that no longer have a valid pointer. Performance profiling Highlights application performance bottlenecks and improves application understanding with a graphical representation of function calls. Code coverage Identifies untested code with line-level precision. Rational PurifyPlus is supported on Windows, Linux, Solaris, and AIX. Rational PurifyPlus for Linux and UNIX supports AIX, Linux, and Sun Solaris. For more information, see: www.ibm.com/software/awdtools/purifyplus/
Summary
20
IBM XL C/C++ compilers are stable and flexible, providing industry leading optimization techniques that can address your compiler needs for everything from small applications, to large, computationally intensive programs. The extensive cross-platform availability of the IBM XL C/C++ compilers eases the porting process between AIX, z/OS, z/VM, Linux, and Blue Gene. Standards conformance and GNU compatibility improve portability of source code from GNU compilers to IBM compilers. The binary compatibility feature allows direct linkage with objects, shared libraries, and archives built by either the GNU or IBM compilers. This allows you to take advantage of the features offered by both suites of compiler products. IBM is also deeply involved in the High Performance Computing effort. Many of the TOP500 supercomputers are from IBM using IBM XL C/C++ compiler optimizations. The IBM XL C/C++ compiler team is deeply involved in parallel computing and supporting different parallel memory models. Other new features support customer requests and enable middleware applications. Finally, optimization through chip-specific instruction generation and tuning, parallelization, vectorization, interprocedural analysis, and profile-directed feedback, offers an increase in performance without sacrificing stability or flexibility. Coupled with IBM's excellent service and support, IBM XL C/C++ compilers are robust, versatile, and capable of delivering mission critical applications.
Support information
Documentation
IBM XL C/C++ compiler product documentation is available in a fully searchable HTML-based information centers. PDF versions of the documentation are available with the installation media (either product CD or electronic package) and can be accessed online from the product library page. For XL C for AIX, XL C/C++ for AIX, and XL C/C++ for Linux compilers, you can also download a version of the information center containing the product documentation from the library pages. The AIX information center can be installed on any AIX 7.1, AIX 6.1 or AIX 5.3 system running on a 64-bit capable processor, and the Linux information center can be installed on any RHEL 5.7, RHEL 6.2, SLES 10 SP4, or SLES 11 SP2 system. The IBM XL C/C++ compilers also include man pages for all utilities and compiler invocation commands. An extensive collection of technical material, trials and demos, support information, and features and benefits of IBM XL C/C++ can be found at the following URL: www.ibm.com/software/awdtools/xlcpp/ You can access the information centers for XL C/C++ compilers from the following library page links: v v v v IBM XL C for AIX: http://www.ibm.com/software/awdtools/xlc/aix/library/ IBM XL C/C++ for AIX: http://www.ibm.com/software/awdtools/xlcpp/aix/library/ IBM XL C/C++ for Linux: http://www.ibm.com/software/awdtools/xlcpp/linux/library/ IBM XL C/C++ for Blue Gene/Q: http://www.ibm.com/software/awdtools/xlcpp/features/bg/ library/
v IBM XL C/C++ for z/OS: http://www.ibm.com/software/awdtools/czos/library/ v IBM XL C/C++ for z/VM: http://www.ibm.com/software/awdtools/czvm/library/
21
Contacting IBM
IBM welcomes your comments. You can send them to compinfo@ca.ibm.com.
June 2012 References in this document to IBM products, programs, or services do not imply that IBM intends to make these available in all countries in which IBM operates. Any reference to an IBM program product in this publication is not intended to state or imply that only IBM's program product may be used. Any functionally equivalent program may be used instead. IBM, the IBM logo, ibm.com, AIX, AIX 5L, BladeCenter, Blue Gene, Blue Gene/P, Blue Gene/Q, POWER, POWER6, POWER7, Power Architecture, Power Systems, PowerPC, PurifyPlus, Rational, Redbooks, VisualAge, z/OS, and z/VM are trademarks of International Business Machines Corp., registered in many jurisdictions worldwide. Other product and service names might be trademarks of IBM or other companies. A current list of IBM trademarks is available on the Web at Copyright and trademark information at www.ibm.com/legal/copytrade.shtml. Linux is a trademark of Linus Torvalds in the United States, other countries, or both. UNIX is a registered trademark of The Open Group in the United States and other countries. Copyright IBM Corporation 1999, 2012. US Government Users Restricted Rights Use, duplication or disclosure restricted by GSA ADP Schedule Contract with IBM Corp.