OpenMP-Environment

 view release on metacpan or  search on metacpan

benchmarks/NPB3.4.1/NPB3.4-OMP/README.install  view on Meta::CPAN

   details.

   Class D or E for IS (Integer Sort) requires a compiler/system that 
   supports the "long" type in C to be 64-bit.  As examples, the SGI 
   MIPS compiler for the SGI Origin using the "-64" compilation flag and
   the Intel compiler for IA64 are known to work.

   To build a suite of benchmarks, one can create the file 
   "config/suite.def", which contains a list of executables to build.
   Each line in the file contains the name of a benchmark and the class,
   separated by spaces or tabs (see suite.def.template for an example).
   Then

      make suite


   ================================
   
   The "RAND" variable in make.def
   --------------------------------
   
   Most of the NPBs use a random number generator. In two of the NPBs (FT
   and EP) the computation of random numbers is included in the timed
   part of the calculation, and it is important that the random number
   generator be efficient.  The default random number generator package
   provided is called "randi8" and should be used where possible. It has 
   the following requirements:
   
   randi8:
     1. Uses integer(8) arithmetic. Compiler must support integer(8)
     2. Uses the Fortran 90 IAND intrinsic. Compiler must support IAND.
     3. Assumes overflow bits are discarded by the hardware. In particular, 
        that the lowest 46 bits of a*b are always correct, even if the 
        result a*b is larger than 2^64. 
   
   Since randi8 may not work on all machines, we supply the following
   alternatives:
   
   randi8_safe
     1. Uses integer(8) arithmetic
     2. Uses the Fortran 90 IBITS intrinsic. 
     3. Does not make any assumptions about overflow. Should always
        work correctly if compiler supports integer(8) and IBITS. 
   
   randdp
     1. Uses double precision arithmetic (to simulate integer(8) operations). 
        Should work with any system with support for 64-bit floating
        point arithmetic.      
   
   randdpvec
     1. Similar to randdp but written to be easier to vectorize. 
   

2. Execution

   The executable is named <benchmark-name>.<class>.x and is placed
   in the bin subdirectory (or in the directory BINDIR specified in
   make.def, if you've defined it).  Folllowing is an example of running 
   a benchmark in csh:

      setenv OMP_NUM_THREADS 4
      bin/bt.A.x > BT.A_out.4

   It runs BT Class A problem on 4 threads and the output is stored
   in BT.A_out.4.

   Each benchmark includes a set of additional timers for profiling purpose
   (reporting timing for selected code blocks).  By default, these timers
   are disabled.  To enable the timers, set the environment variable
   NPB_TIMER_FLAG to one of:

      1, on, yes, true

   before running a benchmark.  The previous method of creating a dummy 
   file 'timer.flag' in the current working directory is still supported,
   but not recommended.

   The printed number of threads is the activated threads during the run,
   which may not be the same as what is requested.

3. Known issues

   Many of the 3.4 versions of the benchmarks use the OpenMP "COLLAPSE" 
   clause for better parallelism.  This feature is available since
   OpenMP 3.0.  Thus, the 3.4 version requires a compiler that supports
   OpenMP 3.0.

   NPB-OMP assumes 'deterministic' static scheduling at run-time to 
   ensure the correctness of the results.  Verification in some
   benchmarks might fail if this condition is not met. 

   For larger problem sizes, the default stack size for slave threads
   may need to be increased on certain platforms.  For OpenMP 3.0-compliant
   compilers, use the runtime environment variable:
      setenv OMP_STACKSIZE 50m  (for 50MB)

   In order to build the class E version of CG, the integer type
   needs to be promoted to 64-bit, which is usually done through 
   compilation flag (such as "-i8" for FFLAGS in config/make.def).

4. Notes on the implementation

   - Based on NPB3.0-SER, except that FT was kept closer to
     the original version in NPB2.3-serial.

   - OpenMP directives were added to the outer-most parallel loops. 
     No nested parallelism was considered.  The 3.4 version includes
     the use of COLLAPSE clause for two loop nests.

   - Extra loops were added in the beginning of most of the benchmarks
     to touch data pages.  This is to set up a data layout based on the
     'first touch' policy.

   - Since there is no standard way of performing vectorization, the 
     mileage you get from the vector version depends very much on 
     the compiler used.  Often additional compiler directives (or flags) 
     may be necessary for optimal results.  The "blocking" versions 
     of BT and SP have shown better performance on some systems.
     The proper blocking factor is system-dependent.

   - For LU, the pipelined algorithm outperforms the hyperplane algorithm
     consistently on many cache-based platforms.  So, the pipelined
     implementation is compiled as the default.  See LU/README for
     additional information.

   - The IS OpenMP benchmark enables bucket sort by default.  To disable
     bucket sort, comment out the line in IS/is.c:
     #define USE_BUCKETS
     See IS/README.carefully for additional information.

   - For Unstructured Adaptive (UA) and DC benchmarks, please see 
     UA/README or DC/README for additional instruction.



( run in 0.966 second using v1.01-cache-2.11-cpan-6aa56a78535 )