|LMAX||the maximal number of levels for univariate and multivariate codes.|
|Since several vectors of size 1«LMAX are allocated, you should|
|set LMAX to a rather moderate value, e.g. 20|
|DMAX||the maximal dimension of the computational domain [0,1]^D|
|You should set DMAX as small as possible to improve code efficiency.|
|SMPPROCS||the number of available processors on your SMP machine. SMPPROCS = 1 means|
|you have a singleprocessor mainboard, values greater than 1 will produce special threaded smp code.|
|ROOT||the AWFD root directory|
Attention: If _SMP_PROC_ is larger than 1 special threaded code is generated. In this case
you must disable any compile flags which cause interprocedural optimization! Read the man pages of
your compiler if you are not sure.
However, if you don't want to waive this aggressive optimization to achieve a maximum performance,
the following trick will do:
This should work. At least on our IRIX machines it does.
Typically more than 80% of the computing times are spent on functions compiled with optimal settings. Therefore,
you will almost get the maximum performance.
The reason for all the trouble is the polling loop, in which the main program waits for some flags to be set by the other threads. This inelegant mechanism to exchange status information between threads and the main program was necessary, as the standard way via semaphores and mutexes had the tendency to crash when called billions of times as it may happen in our examples.