Pathscale is a complete proprietary solution to use multicore architectures. It comes with a serie of C (pathcc), C++ (pathCC) and Fortran (pathf90, pathf95) compilers as well as other tools, such as debugger (pathdb) and an assembler (pathas). The reference documentation is available on the official website of Pathscale.
Advantages and disadvantages
The officiel website is well documented with compilation examples for many tools. The suite of compilers can be used for Intel, AMD or Nvidia GPGPU architectures. However, since it is a proprietary solution, it requires a license. Moreover, the BLAS version provided by PathScale is that from the ACML, which offers poor performance. It is however easy to compile with the MKL version of BLAS.
Worth of mention is that, contrary to Intel, PathScale ships with its own implementation of the C++ standard library. This implementation is less up-to-date with the new C++11 standard than that of GCC version 4.7.
One main point of interest of PathScale is the performance of the binaries compiled for AMD architecture. We have observed comparisons with PGI and GCC similar to those reported on PathScale's website. However, some codes do not perform better. Moreover, Intel compilers offer similar performances even on AMD architectures.
PathScale compilers use the same generic options, such as -g, -c, -I. See the generic compiling page for those options. We give here a short list of the most useful options
|-help||Displays the list of options|
pathcc -help ...
|-static, -Bstatic||Statically links binaries to the application.|
pathcc -static ...
|-ffast-math||Optimizes floating point operations, neglecting some of the ANSI and IEEE rules for precision.|
pathcc -ffast-math ...
|-msse3, -msse4a||Adds SSE3 and SSE4 instructions to vectorize operations.|
pathcc -msse3 ...
|-ipa||Enables inter-process optimizations.|
pathcc -ipa ...
|-mp||Enables support for OpenMP (standard 2.5 for PathScale version 4)|
pathcc -openmp ...
|-show||Displays each step of the compilation process in details (pre-compiling, compiling, assembly, linking)|
pathcc -show ...
|-v||Same as -show, but also displays the compiler version.|
pathcc -v ...
|-keep||Keeps temporary files after compiling (.i files (precompiled) and .s files (assembled))|
pathcc -keep ...
|-ar||Instead of creating an application, creates an archive with the object files.|
pathcc -ar ...
Options for Fortran
|-fixedform||Enables the fixed form format from Fortran 77, with columns 1 to 6 reserved and 7 to 72 for code||Enabled for .f and .F files|
|-freeform||Enables the free form format from Fortran 90/95.||Enabled for .f90, .f95, .F90 and .F95 files.|
|-cpp||Uses the C pre-processor||Enabled for .F, .F90, .F95 files.|
|-ftpp||Uses the legacy Fortran pre-processor||Never enabled by default|
|-fcoco||Uses the pre-processor ISO/IEC 1539-3||Never enabled by default|
Options for C, C++
|(-no)-pathcc||Define (or not) the __PATHSCALE__ macro||Defined by default|
|-std=valeur||Sets the standard. With version 4 of the compiler, the possible values are: c89, c99, c9x, gnu89, gnu99, gnu9x, iso9899:1990, iso9899:1999, iso9899:199x|
It is recommended to use the options: -O2 -msse3. If your code is not very sensitive to precision, you may replace -O2 with -O3, and if it is really not sensitive to precision, you may add -fast-math.
Compiling with OpenMP
To compile OpenMP code, you need to add the -mp option. The compiling process will display which loop is being parallelized. If a loop does not get parallelized, try writing it in a different way and recompile. For more information, see our page on OpenMP.
[nom@serveur $] pathcc -msse3 -mp f1.c f2.c -o f.out -lpthread