Compiling ParaView3 for Cray supercomputers: Difference between revisions

From KitwarePublic
Jump to navigationJump to search
No edit summary
Line 38: Line 38:
During the ParaView build process helper binaries are compiled and executed to generate source files for future build targets.  When you cross compile ParaView the helper binaries cannot execute since they are non-native to the front end node you are working on.  The solution is to build a native version of ParaView first, and then tell CMake to use the native helper binaries while cross compiling.
During the ParaView build process helper binaries are compiled and executed to generate source files for future build targets.  When you cross compile ParaView the helper binaries cannot execute since they are non-native to the front end node you are working on.  The solution is to build a native version of ParaView first, and then tell CMake to use the native helper binaries while cross compiling.


===Useful links===
===Additional information===


Some of these links may have restricted read permissions:
The instructions on this wiki page detail the steps required to build the software but do not provide additional information.  Some concepts used but not explained on this wiki page are TryRunResults and Toolchain files.  You may find these pages very helpful:


* [http://www.cmake.org/Wiki/CmakeCrayXt3 CMake/CrayXT3]
* [http://www.cmake.org/Wiki/CmakeCrayXt3 CMake/CrayXT3]
Line 66: Line 66:
==Directory structure==
==Directory structure==


Setup your directories however you'd like.  Instructions on this wiki are usually given in two forms, a general form and an example form:
Setup your directories however you'd like.  Path names on this wiki page are usually given in two forms, a general form and an example form, where "~/" is your home directory:


<pre>
<pre>
General form                      Example form


##
General form                      Example form
------------                    -------------
<install-dir>                    ~/install
<install-dir>                    ~/install
<catamount-install-dir>          ~/install-catamount
<catamount-install-dir>          ~/install-catamount
<toolchain-dir>                  ~/toolchains
<toolchain-dir>                  ~/toolchains
<paraview-source-dir>            ~/projects/paraview/ParaView3
<paraview-source-dir>            ~/projects/paraview/ParaView3
<paraview-native-build-dir>      ~/projects/paraview/build-native
<paraview-native-build-dir>      ~/projects/paraview/build-native
...                              ...
...                              ...
</pre>
</pre>
Line 152: Line 152:
<pre>
<pre>
cd ~/projects/cmake/build
cd ~/projects/cmake/build
../CMake/bootstrap --prefix=~/projects/install
../CMake/bootstrap --prefix=~/install
make
make
make install
make install
</pre>
</pre>
You should now have the executable: <native-install-dir>/bin/ccmake.


==Compiling OSMesa==
==Compiling OSMesa==
Line 220: Line 217:


CMake files for building Python can be checked out from the ParaView repository.  The native python build is only required if your system doesn't already have python libraries and binaries installed.  On Bigben, python was located at /usr/lib64/libpython2.3.so and /usr/bin/python2.3.
CMake files for building Python can be checked out from the ParaView repository.  The native python build is only required if your system doesn't already have python libraries and binaries installed.  On Bigben, python was located at /usr/lib64/libpython2.3.so and /usr/bin/python2.3.
Use the GNU compiler, switch from PGI if you need to:
<pre>
module switch PrgEnv-pgi PrgEnv-gnu
</pre>


===Getting the source===
===Getting the source===
Line 236: Line 239:
===Native build===
===Native build===


Use the GNU compiler.
General command:
 
Example command:


<pre>
<pre>
cd ~/projects/python
cd <python-build-native-dir>
mkdir build-native
<native-install-dir>/bin/ccmake <python-source-dir> -DCMAKE_INSTALL_PREFIX=<native-install-dir>
~/install/bin/ccmake ../python-with-cmake -DCMAKE_INSTALL_PREFIX=~/install


## configure with ccmake
## configure with ccmake
Line 251: Line 251:
</pre>
</pre>


General command:
Example command:


<pre>
<pre>
cd <python-build-native-dir>
mkdir ~/projects/python/build-native
<native-install-dir>/bin/ccmake <python-source-dir> -DCMAKE_INSTALL_PREFIX=<native-install-dir>
cd ~/projects/python/build-native
~/install/bin/ccmake ~/projects/python/python-with-cmake -DCMAKE_INSTALL_PREFIX=~/install


## configure with ccmake
## configure with ccmake
Line 262: Line 263:
make install
make install
</pre>
</pre>




===Catamount build===
===Catamount build===


Use the GNU compiler.  When configuring with CMake:
When configuring with CMake:


* Confirm all MODULE__*_SHARED options are off
* Confirm all MODULE__*_SHARED options are off
Line 290: Line 292:


<pre>
<pre>
cd ~/projects/python
mkdir ~/projects/python/build-catamount
mkdir build-catamount
cd ~/projects/python/build-catamount


~/install/bin/ccmake -DCMAKE_TOOLCHAIN_FILE=~/toolchains/Toolchain-Catamount-gcc.cmake -DCMAKE_INSTALL_PREFIX=~/install-catamount -C ../python-with-cmake/CMake/TryRunResults-Python-catamount-gcc.cmake ../python-with-cmake/
~/install/bin/ccmake -DCMAKE_TOOLCHAIN_FILE=~/toolchains/Toolchain-Catamount-gcc.cmake -DCMAKE_INSTALL_PREFIX=~/install-catamount -C ~/projects/python/python-with-cmake/CMake/TryRunResults-Python-catamount-gcc.cmake ~/projects/python/python-with-cmake/


## configure with ccmake
## configure with ccmake
Line 304: Line 306:


==Compiling ParaView3==
==Compiling ParaView3==


===Getting the source===
===Getting the source===
<pre>
cd ~/projects/paraview
cvs -d :pserver:anoncvs@www.paraview.org:/cvsroot/ParaView3 login
## respond with empty password
cvs -d :pserver:anoncvs@www.paraview.org:/cvsroot/ParaView3 co ParaView3
</pre>
===Native build===
===Native build===
You will build a native version of ParaView but do not need to install it.  Use the PGI compiler, switch from GNU if you need to:
<pre>
module switch PrgEnv-gnu PrgEnv-pgi
</pre>
Next run CMake.  When configuring ccmake:
* Turn on BUILD_SHARED_LIBS
* Turn on PARAVIEW_ENABLE_PYTHON
The native operating system may or may not have Xlib installed.  If Xlib is not found, you need to compile ParaView with OSMesa support.  To enable OSMesa:
* erase the contents of OPENGL_gl_LIBRARY, make it an empty string
* confirm OSMESA_LIBRARY is found
* confirm OSMESA_INCLUDE_DIR is found
General command:
<pre>
cd <paraview-native-build-dir>
<native-install-dir>/bin/ccmake -DPARAVIEW_BUILD_QT_GUI=0 <paraview-source-dir>
## configure with ccmake
make
</pre>
Example command:
<pre>
mkdir ~/projects/paraview/build-native
cd ~/projects/paraview/build-native
~/install/bin/ccmake -DPARAVIEW_BUILD_QT_GUI=0 ~/projects/paraview/ParaView3
## configure with ccmake
make
</pre>
===Catamount build===
===Catamount build===
When configuring with CMake:
* turn on PARAVIEW_ENABLE_PYTHON
* turn on PARAVIEW_USE_MPI
* turn OFF VTK_USE_METAIO
* confirm VTK_OPENGL_HAS_OSMESA: ON
* confirm VTK_NO_PYTHON_THREADS: ON
* confirm BUILD_SHARED_LIBS: OFF
* confirm OSMESA_LIBRARY is the one you cross compiled and installed locally.
* confirm PYTHON_LIBRARY is the one you cross compiled and installed locally.
* set PYTHON_EXECUTABLE to a native python binary, NOT a cross compiled python binary
General command:
<pre>
cd <paraview-catamount-build-dir>
<native-install-dir>/bin/ccmake -DCMAKE_TOOLCHAIN_FILE=<toolchain-dir>/Toolchain-Catamount-pgi.cmake -DParaView3CompileTools_DIR=<paraview-native-build-dir> -DPARAVIEW_BUILD_QT_GUI=0 -C <paraview-source-dir>/CMake/TryRunResults-ParaView3-catamount-gcc.cmake <paraview-source-dir>
## configure with ccmake
make
</pre>
Example command:
<pre>
mkdir ~/projects/paraview/build-catamount
cd ~/projects/paraview/build-catamount
~/install/bin/ccmake -DCMAKE_TOOLCHAIN_FILE=~/toolchains/Toolchain-Catamount-pgi.cmake -DParaView3CompileTools_DIR=~/projects/paraview/build-native -DPARAVIEW_BUILD_QT_GUI=0 -C ~/projects/paraview/ParaView3/CMake/TryRunResults-ParaView3-catamount-gcc.cmake ~/projects/paraview/ParaView3
## configure with ccmake
make
</pre>


==Testing==
==Testing==

Revision as of 22:05, 17 December 2007

This wiki page is currently a work in progress.

Objectives and Overview

Our goal is to run pvbatch on Cray massively parallel processor systems. Pvbatch is ParaView's MPI-enabled batch application. It reads batch scripts written in python and distributes the work across many processors. Pvbatch will be built when you compile ParaView 3. Before you can compile ParaView 3 you must compile three support packages- CMake, OSMesa, Python. The entire process will take about three hours to complete and you should have at least one gigabyte of workspace.

These instructions are intended for Cray MPP systems running the Catamount operating system. Specifically, these instructions have been tested on the Bigben XT3 supercomputer at Pittsburgh Supercomputing Center.

Terminology

These terms are probably self explanatory, but just to clarify...

  • front end node - the computer/shell you log into and work on.
  • native operating system - the operating system that runs on the front end node (at PSC the OS is SuSE linux)
  • native build - software that executes on the front end nodes
  • compute node - the computers/processors running scientific computation
  • catamount - the operating system that runs on the compute nodes
  • catamount build - software that has been cross compiled to execute on the compute node

Build steps

You will log into a shell on a front end node. You will download the source code and then compile CMake, OSMesa, Python, and ParaView3. Some of these packages must be compiled twice- one native version and one cross compiled version. The steps are:

  1. Compile a CMake native build.
  2. Compile an OSMesa native build.
  3. Compile an OSMesa catamount build.
  4. Compile a Python native build.
  5. Compile a Python catamount build.
  6. Compile a ParaView 3 native build.
  7. Compile a ParaView 3 catamount build.
  • Step 2 is optional if your front end system already has OSMesa installed.
  • Step 4 is optional if your front end system already has Python installed.

Why are the native builds required?

During the ParaView build process helper binaries are compiled and executed to generate source files for future build targets. When you cross compile ParaView the helper binaries cannot execute since they are non-native to the front end node you are working on. The solution is to build a native version of ParaView first, and then tell CMake to use the native helper binaries while cross compiling.

Additional information

The instructions on this wiki page detail the steps required to build the software but do not provide additional information. Some concepts used but not explained on this wiki page are TryRunResults and Toolchain files. You may find these pages very helpful:

Compilers

The front end nodes have more than one compiler installed. We will use the PGI and GNU compilers. At Bigben, the PGI compiler is the default compiler when you log in. You can switch compilers like this:

## switch from PGI to GNU compiler
module switch PrgEnv-pgi PrgEnv-gnu

## switch from GNU to PGI compiler
module switch PrgEnv-gnu PrgEnv-pgi

Toolchains

When you cross compile with CMake you will input a toolchain file. You will use one toolchain file when you use the PGI compiler, and a different toolchain file when you use GNU.

For more information see the CMake/CrayXT3 page.

Directory structure

Setup your directories however you'd like. Path names on this wiki page are usually given in two forms, a general form and an example form, where "~/" is your home directory:

General form                      Example form

<install-dir>                     ~/install
<catamount-install-dir>           ~/install-catamount
<toolchain-dir>                   ~/toolchains

<paraview-source-dir>             ~/projects/paraview/ParaView3
<paraview-native-build-dir>       ~/projects/paraview/build-native

...                               ...

Here is how my directory tree looks:

~/
  install/
    bin/
    include/
    lib/

  install-catamount/
    bin/
    include/
    lib/

  toolchains/

  projects/
    cmake/
      CMake/
      build-native/

    mesa/
      mesa-native/
      mesa-catamount/

    python/
      python-for-cmake/
      build-native/
      build-catamount/

    paraview/
      ParaView3/
      build-native/
      build-catamount/

Note, some of these directories will be created automatically when you extract archives or checkout code from cvs/svn. The install directories and subdirectories are created automatically when you run "make install" commands. Here is a command you could use to set up the directory tree:

cd ~/
mkdir toolchains projects projects/cmake projects/mesa projects/python projects/paraview 

Compiling CMake

CMake home page

Getting the source

You will need the latest version of CMake from CVS.

cd ~/projects/cmake
cvs -d :pserver:anonymous@www.cmake.org:/cvsroot/CMake login
## respond with password: cmake
cvs -d :pserver:anonymous@www.cmake.org:/cvsroot/CMake co CMake

Native build

It shouldn't matter which compiler you use to build CMake. I used the default PGI compiler.

General command:

cd <cmake-build-dir>
<cmake-src-dir>/bootstrap --prefix=<native-install-dir>
make
make install

Example command:

cd ~/projects/cmake/build
../CMake/bootstrap --prefix=~/install
make
make install

Compiling OSMesa

You will download the Mesa source code and compile the OSMesa target. OSMesa (off screen mesa) allows rendering with the OpenGL API directly into main memory instead of using system display memory. The native build is only required if your native system does not have OSMesa already installed. At Bigben, OSMesa was found at /usr/lib64/libOSMesa.so with headers in /usr/include.

Mesa home page.

Getting the source

You can download the Mesa source directly using wget. In case the url changes, here is the Mesa download page

cd ~/projects/mesa
wget http://easynews.dl.sourceforge.net/sourceforge/mesa3d/MesaLib-7.0.2.tar.gz
tar -zxf MesaLib-7.0.2.tar.gz

Native build

Use the PGI compiler. Since Mesa uses an in-source build you might want to copy the source dir before you start.

cd ~/projects/mesa
cp -r Mesa-7.0.2 mesa-native

## edit mesa-native/configs/default
##
## replace line:   INSTALL_DIR = /usr/local
## with:           INSTALL_DIR = ~/install
## or:             INSTALL_DIR = <native-install-dir>

cd mesa-native
make linux-osmesa
make install


Catamount build

Use the PGI compiler. Since Mesa uses an in-source build you might want to copy the source dir before you start.

cd ~/projects/mesa
cp -r Mesa-7.0.2 mesa-catamount

## edit mesa-catamount/configs/default
##
## replace line:   INSTALL_DIR = /usr/local
## with:           INSTALL_DIR = ~/install-catamount
## or:             INSTALL_DIR = <catamount-install-dir>

cd mesa-catamount
make catamount-osmesa-pgi
make install


Compiling Python

CMake files for building Python can be checked out from the ParaView repository. The native python build is only required if your system doesn't already have python libraries and binaries installed. On Bigben, python was located at /usr/lib64/libpython2.3.so and /usr/bin/python2.3.

Use the GNU compiler, switch from PGI if you need to:

module switch PrgEnv-pgi PrgEnv-gnu

Getting the source

These instructions use Python from the subversion repository. It is possible to use Python release 2.5.1 and apply a patch, more details are here.

cd ~/projects/python
svn co http://svn.python.org/projects/python/trunk python-with-cmake

cvs -d :pserver:anoncvs@www.paraview.org:/cvsroot/ParaView3 login
## respond with empty password
cvs -d :pserver:anoncvs@www.paraview.org:/cvsroot/ParaView3 co -d python-with-cmake ParaView3/Utilities/CMakeBuildForPython

Native build

General command:

cd <python-build-native-dir>
<native-install-dir>/bin/ccmake <python-source-dir> -DCMAKE_INSTALL_PREFIX=<native-install-dir>

## configure with ccmake

make
make install

Example command:

mkdir ~/projects/python/build-native
cd ~/projects/python/build-native
~/install/bin/ccmake ~/projects/python/python-with-cmake -DCMAKE_INSTALL_PREFIX=~/install

## configure with ccmake

make
make install


Catamount build

When configuring with CMake:

  • Confirm all MODULE__*_SHARED options are off
  • Turn off MODULE__pwd_ENABLE
  • Turn off ENABLE_IPV6
  • Turn off WITH_THREAD

General command:


cd <python-build-catamount-dir>
<native-install-dir>/bin/ccmake -DCMAKE_TOOLCHAIN_FILE=~<toolchain-dir>/Toolchain-Catamount-gcc.cmake -DCMAKE_INSTALL_PREFIX=<catamount-install-dir> -C <python-source-dir>/CMake/TryRunResults-Python-catamount-gcc.cmake <python-source-dir>

## configure with ccmake

make
make install

Example command:

mkdir ~/projects/python/build-catamount
cd ~/projects/python/build-catamount

~/install/bin/ccmake -DCMAKE_TOOLCHAIN_FILE=~/toolchains/Toolchain-Catamount-gcc.cmake -DCMAKE_INSTALL_PREFIX=~/install-catamount -C ~/projects/python/python-with-cmake/CMake/TryRunResults-Python-catamount-gcc.cmake ~/projects/python/python-with-cmake/

## configure with ccmake

make
make install


Compiling ParaView3

Getting the source

cd ~/projects/paraview
cvs -d :pserver:anoncvs@www.paraview.org:/cvsroot/ParaView3 login
## respond with empty password
cvs -d :pserver:anoncvs@www.paraview.org:/cvsroot/ParaView3 co ParaView3

Native build

You will build a native version of ParaView but do not need to install it. Use the PGI compiler, switch from GNU if you need to:

module switch PrgEnv-gnu PrgEnv-pgi

Next run CMake. When configuring ccmake:

  • Turn on BUILD_SHARED_LIBS
  • Turn on PARAVIEW_ENABLE_PYTHON

The native operating system may or may not have Xlib installed. If Xlib is not found, you need to compile ParaView with OSMesa support. To enable OSMesa:

  • erase the contents of OPENGL_gl_LIBRARY, make it an empty string
  • confirm OSMESA_LIBRARY is found
  • confirm OSMESA_INCLUDE_DIR is found

General command:

cd <paraview-native-build-dir>
<native-install-dir>/bin/ccmake -DPARAVIEW_BUILD_QT_GUI=0 <paraview-source-dir>

## configure with ccmake

make

Example command:

mkdir ~/projects/paraview/build-native
cd ~/projects/paraview/build-native

~/install/bin/ccmake -DPARAVIEW_BUILD_QT_GUI=0 ~/projects/paraview/ParaView3

## configure with ccmake

make


Catamount build

When configuring with CMake:

  • turn on PARAVIEW_ENABLE_PYTHON
  • turn on PARAVIEW_USE_MPI
  • turn OFF VTK_USE_METAIO
  • confirm VTK_OPENGL_HAS_OSMESA: ON
  • confirm VTK_NO_PYTHON_THREADS: ON
  • confirm BUILD_SHARED_LIBS: OFF
  • confirm OSMESA_LIBRARY is the one you cross compiled and installed locally.
  • confirm PYTHON_LIBRARY is the one you cross compiled and installed locally.
  • set PYTHON_EXECUTABLE to a native python binary, NOT a cross compiled python binary

General command:

cd <paraview-catamount-build-dir>
<native-install-dir>/bin/ccmake -DCMAKE_TOOLCHAIN_FILE=<toolchain-dir>/Toolchain-Catamount-pgi.cmake -DParaView3CompileTools_DIR=<paraview-native-build-dir> -DPARAVIEW_BUILD_QT_GUI=0 -C <paraview-source-dir>/CMake/TryRunResults-ParaView3-catamount-gcc.cmake <paraview-source-dir>

## configure with ccmake

make

Example command:

mkdir ~/projects/paraview/build-catamount
cd ~/projects/paraview/build-catamount
~/install/bin/ccmake -DCMAKE_TOOLCHAIN_FILE=~/toolchains/Toolchain-Catamount-pgi.cmake -DParaView3CompileTools_DIR=~/projects/paraview/build-native -DPARAVIEW_BUILD_QT_GUI=0 -C ~/projects/paraview/ParaView3/CMake/TryRunResults-ParaView3-catamount-gcc.cmake ~/projects/paraview/ParaView3

## configure with ccmake

make

Testing