User Tools

Site Tools


howto:compiling_tips_n_tricks

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
howto:compiling_tips_n_tricks [2013/07/19 09:51]
kevin
howto:compiling_tips_n_tricks [2021/12/09 16:42] (current)
Line 9: Line 9:
 > Many people write the first and last as C/C++.  That's misleading.  C and C++ are separate languages.  Confusing them is responsible for many problems. > Many people write the first and last as C/C++.  That's misleading.  C and C++ are separate languages.  Confusing them is responsible for many problems.
  
-The compilers found at the CHPC fall into three families: GCC, Intel and Sun Studio.+The compilers found at the CHPC fall into three families: GCC, Intel and [[guide:m9000|Sun Studio]].
  
 > 'GCC' stands for GNU Compiler Collection; 'gcc' stands for GNU C Compiler; try not to confuse them 8-) > 'GCC' stands for GNU Compiler Collection; 'gcc' stands for GNU C Compiler; try not to confuse them 8-)
  
->> There's a fourth family, IBM XL, but we won't worry about it since the P690s are gone and BG/P is DOA.+>> There's a fourth family, IBM XL, but we won't worry about it since the P690s are gone and BG/P is in hibernation.
  
 ====Table of Compilers and their Command Names==== ====Table of Compilers and their Command Names====
Line 25: Line 25:
  
 <code bash> <code bash>
-you@login01:~$ gcc -o hello hello.c+gcc -o hello hello.c
 </code> </code>
  
Line 31: Line 31:
  
 <code bash> <code bash>
-you@login01:~$ ifort -o hello hello.f90+ifort -o hello hello.f90
 </code> </code>
  
Line 51: Line 51:
 ====Example==== ====Example====
  
-When building an MPI library --- for example, OpenMPI --- one should specify all four since MPI provides MPI compilers for:+When building an MPI library --- for example, OpenMPI --- one should set all four variables since MPI provides MPI compilers for:
  
 | ''mpicc'' | MPI C compiler ^ | ''mpicc'' | MPI C compiler ^
Line 58: Line 58:
 | ''mpif90'' | MPI Fortran 90 compiler | | ''mpif90'' | MPI Fortran 90 compiler |
  
-When building OpenMPOI then, before the usual ''make; make install'' command, tell ''configure'' which compilers to use:+When building OpenMPI then, before the usual ''make; make install'' command, tell ''configure'' which compilers to use:
  
-<code>+<code bash>
 ./configure --prefix=$HOME/mpi/intel/ ./configure --prefix=$HOME/mpi/intel/
 CC=icc CXX=icpc F77=ifort FC=ifort \ CC=icc CXX=icpc F77=ifort FC=ifort \
Line 68: Line 68:
  
 > The above example uses Intel compilers and also builds in InfiniBand support. > The above example uses Intel compilers and also builds in InfiniBand support.
 +
 +
 +=====Which Compilers am I Using?=====
 +
 +That's a very good question.
 +
 +====Table of Compiler Commands for Version====
 +
 +| Language ^  GCC          Intel     |
 +^ C        | ''%%gcc --version%%''      | ''icc -v''    |
 +^ Fortran  | ''%%gfortran --version%%'' | ''ifort -v''  |
 +^ C++      | ''%%g++ --version%%''      | ''icpc -v''   |
 +
 +The ''-v'' options stands for 'verbose' and it produces additional messages when used with any compiler command.  For the Intel compilers, ''-v'' by itself just produces the version:
 +
 +<code bash>
 +login01:~$ icc -v
 +Version 12.0.0
 +</code>
 +
 +For the GCC compilers, ''-v'' produces a lot more information:
 +
 +<code>
 +login01:~$ gfortran -v
 +Using built-in specs.
 +Target: x86_64-redhat-linux
 +Configured with: ../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info 
 +--enable-shared --enable-threads=posix --enable-checking=release --with-system-zlib 
 +--enable-__cxa_atexit --disable-libunwind-exceptions --enable-libgcj-multifile --enable-
 +languages=c,c++,objc,obj-c++,java,fortran,ada --enable-java-awt=gtk --disable-dssi 
 +--disable-plugin --with-java-home=/usr/lib/jvm/java-1.4.2-gcj-1.4.2.0/jre --with-cpu=generic 
 +--host=x86_64-redhat-linux
 +Thread model: posix
 +gcc version 4.1.2 20080704 (Red Hat 4.1.2-52)
 +</code>
 +
 +Which is why GCC compilers provide the long option ''%%--version%%'' to just obtain the version:
 +
 +<code>
 +login01:~$ gfortran --version
 +GNU Fortran (GCC) 4.1.2 20080704 (Red Hat 4.1.2-52)
 +Copyright (C) 2007 Free Software Foundation, Inc.
 +
 +GNU Fortran comes with NO WARRANTY, to the extent permitted by law.
 +You may redistribute copies of GNU Fortran
 +under the terms of the GNU General Public License.
 +For more information about these matters, see the file named COPYING
 +
 +</code>
 +
 +> You also get a copyright message but the version is in the first line.
 +> <code>login01:~$ gfortran --version | head -1
 +GNU Fortran (GCC) 4.1.2 20080704 (Red Hat 4.1.2-52)</code>
 +
 +Using a different, newer, version of GCC is easy through the use of GNU [[guide:compiling|modules]]:
 +
 +<code bash>
 +login01:~$ module load gcc
 +login01:~$ gfortran --version | head -1
 +GNU Fortran (GCC) 4.7.2
 +</code>
 +
  
/app/dokuwiki/data/attic/howto/compiling_tips_n_tricks.1374220301.txt.gz · Last modified: 2021/12/09 16:42 (external edit)