Building FreeFEM++ with Intel® Software Tools for Developers

By Dmitry Sivkov, Published: 02/26/2018, Last Updated: 02/26/2018

FreeFEM++ is a package that targeted for researchers who needs a powerful tool for solving partial differential equations.

It can be found at http://www.freefem.org/

By default build instructions for FreeFEM++ uses open-source products http://www.freefem.org/ff++/linux.php .

Intel provides for software developers a wonderful product Intel® Parallel Studio XE. It can be used to get additional optimizations and performance of FreeFEM++ on Intel platforms.

Prework

Let's download Intel Parallel Studio XE and install it to <IPSXE_install_dir>.

Currently version 2018 Update 1 is released and will be used.

Prepare build directories structure:

	$ mkdir FreeFEM++
	$ cd FreeFEM++

Download FreeFED++:

	$ wget http://www.freefem.org/ff++/ftp/freefem++-3.59.tar.gz 

And unzip it

	$ tar -xzvf ./freefem++-3.59.tar.gz
	$ cd freefem++-3.59/ 

Building

We will use Intel(R) Composer, Intel(R) Math Kernel Library(Intel(R) MKL) and Intel(R) MPI Library (Intel(R) MPI):

$ source <IPSXE_install_dir>/bin/psxevars.sh intel64

FreeFEM++ for building uses traditional autotools way: configure - make. So let's setup it with Intel tools (single line will be given below):

$ export OPTF=-xCOMMON-AVX512 
$ export CC=icc 
$ export CFLAGS=$OPTF 
$ export CXX=icpc 
$ export CXXFLAGS=$OPTF 
$ export FC=ifort 
$ export FCFLAGS=$OPTF 
$ export F77=ifort 
$ export FFLAGS=$OPTF 
$ ./configure --enable-download --with-mpiinc=-I${I_MPI_ROOT}/intel64/include --with-mpilibs="-L${I_MPI_ROOT}/intel64/lib/release_mt -L${I_MPI_ROOT}/intel64/lib -lmpicxx -lmpifort -lmpi -lmpigi -ldl -lrt -lpthread" --with-mpilibsc="-L${I_MPI_ROOT}/intel64/lib/release_mt -L${I_MPI_ROOT}/intel64/lib -lmpicxx -lmpifort -lmpi -lmpigi -ldl -lrt -lpthread"

Where icc is Intel® C compiler, icpc - Intel® C++ compiler, ifort - Intel® Fortran Compiler.

We are using --with-mpiinc and --with-mpilbs to notify FreeFEM++ how to build packages with Intel® MPI Library. Unfortunately traditional mpiicc, mpiicpc and mpiifort cause compatibility issues.

The same with single line is:

	$ CC=icc CFLAGS=-axCOMMON-AVX512 CXX=icpc CXXFLAGS=-axCOMMON-AVX512 FC=ifort FCFLAGS=-axCOMMON-AVX512 F77=ifort FFLAGS=-axCOMMON-AVX512 ./configure --enable-download --with-mpiinc=-I${I_MPI_ROOT}/intel64/include --with-mpilibs="-L${I_MPI_ROOT}/intel64/lib/release_mt -L${I_MPI_ROOT}/intel64/lib -lmpicxx -lmpifort -lmpi -lmpigi -ldl -lrt -lpthread" --with-mpilibsc="-L${I_MPI_ROOT}/intel64/lib/release_mt -L${I_MPI_ROOT}/intel64/lib -lmpicxx -lmpifort -lmpi -lmpigi -ldl -lrt -lpthread"

Also as we are using -xCOMMON-AVX512, so we need to set system default compiler to icc:

	$ alias cpp=icpc

And now we can build it all

	$ make

Unfortunately parallel build (-j<n>) is not supported, so it will take some time.

Conclusion

Enjoy your FreeFEM++ with Intel® Software Tools for developers!

Product and Performance Information

1

Intel's compilers may or may not optimize to the same degree for non-Intel microprocessors for optimizations that are not unique to Intel microprocessors. These optimizations include SSE2, SSE3, and SSSE3 instruction sets and other optimizations. Intel does not guarantee the availability, functionality, or effectiveness of any optimization on microprocessors not manufactured by Intel. Microprocessor-dependent optimizations in this product are intended for use with Intel microprocessors. Certain optimizations not specific to Intel microarchitecture are reserved for Intel microprocessors. Please refer to the applicable product User and Reference Guides for more information regarding the specific instruction sets covered by this notice.

Notice revision #20110804