Development

Oh No!

Do you really need to develop it? I can assure you that most of the codes you may think of have already been written by somebody. And even more importantly, these codes were debugged.

Still, if you think that you really must do it, then - welcome. Let's start with some tips:

Do not invent any linear algebra routines, FFT, or equation solvers. Most of these exist in the math libraries that are installed on our cluster. Your first choice should be Intel Math Kernel Libraries (MKL).

If you need something fast and simple, consider Intel Python distributions that include a NumPy module built with Intel MKL. Using these, the calculations will be fast, and the development will be easy.

Do not use complicated languages like C or C++. You are going to do math, not real-time production management. Fortran or Python with the proper math library is a good choice (except Fortran 77, of course).

Now to the practice!

First of all, pick your compilers and libraries. We have a TACC modules system installed. The command:

module list

will show the default environment. To add to it, use:

module load <module name>

You don’t know which modules exist?

module av

or

module spider

will help you. The great advantage of TACC modules is enforcing dependencies. You won't be able to use libraries that are incompatible with the compiler of choice. More about modules can be found here: http://cf-wiki.weizmann.ac.il/en/Tools/Lmod.

By default, we use Intel compilers, but AMD, GNU, old PGI (new Nvidia), and CUDA are available via the corresponding modules.

As you start writing your code, you will soon find that one source file is not enough. Moreover, different versions or miscellaneous physical parameters will complicate the situation. My advice is to learn the miracle of the "make" command and use it. Google is full of makefile tutorials. Here is an example: https://letmegooglethat.com/?q=makefile+tutorial. By the way, the "make" utility has already been installed.

If you develop in Python, you can create a variety of environments for various projects using Conda. Guides for using Conda are on our Wiki: http://cf-wiki.weizmann.ac.il/en/Tools/Conda. Note that you can use Intel Python as a module.

Run:

module spider python

for more information. However, if you need a complete Python environment based on Intel Python, you can create it with Conda.

An additional excellent tool for Python development and debugging is Jupyter Notebook. You can use Jupyter on the login nodes for development, but you need to start a job for debugging and calculations. More about Jupyter here: http://cf-wiki.weizmann.ac.il/en/Tools/Jupyter-hub.

For somebody who is a real adventurer and wishes to write efficient parallel code, here are some guides on MP and MPI programming:

https://hpc-tutorials.llnl.gov/openmp/

https://hpc-tutorials.llnl.gov/mpi/

Good luck!