########################################### # Modification History of NPB3.x # # ------------------------------ # # NPB development team # # NASA Ames Research Center # # npb@nas.nasa.gov # # http://www.nas.nasa.gov/Software/NPB/ # ########################################### ------------------------------------------------------ Changes in NPB3.2.1 (NPB3.2-SER, NPB3.2-OMP, NPB3.2-MPI ) ------------------------------------------------------ [27-Jul-05] This is a bug fixing release of NPB3.2. 1. MPI version - sys/setparams.c: removed a duplicated statement for writing FT parameters and made invalid SUBTYPE as an error condition. The 'duplicated statement' problem was fixed in NPB3.2 (See the note below). However, during the final updating process, the fix was left out, even though the log file was updated. - BT: included SUBTYPE=EPIO in the I/O verification. - LU: bcast_inputs.f: fixed wrong data type (dp_type) used for communicating integers (nx0,ny0,nz0) with the correct type MPI_INTEGER. - MG: fixed a mis-calculation of parameter "nr" in globals.h that caused run-time failure for NPROCS >= 512 (reported by Donald Ferry of Cray). Expanded to limit to 131072 processes and added an error checking code. The use of MPI_ANY_SOURCE for MPI_Irecv inside subroutine ready() could cause MPI_Wait return a message meant for the wrong k. The problem is fixed with nbr(axis,-dir,k) in place of MPI_ANY_SOURCE in the call to MPI_Irecv (reported and suggested by Hideo Saito). 2. OpenMP version - EP: use THREADPRIVATE for working array storage. It should not change performance but made some compiler happier. - LU: add variable "v" to FLUSH to ensure solution data properly flushed for pipeline. This change is needed according to the OpenMP 2.5 standard. - IS: reorganized working buffers so that the count for key population could be more naturally performed. This version uses much less stack space. - UA: implemented atomic updates with locks in order to achieve better scaling on those systems that have an inefficient (or even buggy) ATOMIC implementation. ------------------------------------------------------ Changes in NPB3.2 (NPB3.2-SER, NPB3.2-OMP, NPB3.2-MPI ) ------------------------------------------------------ [07-Jan-05] 1. DC version in NPB3.2-SER was converted to C from C++ (CLASSES S, W, A, B). sys/setparams.c file was changed appropriately. 2. OpenMP version of DC was added to NPB3.2-OMP. 3. Data Traffic benchmark DT was added to NPB3.2-MPI. [24-May-04] All versions: - use assumed shape "(*)" declaration in CG - fixed the use of an uninitialized variable in EP - avoid using integer array for assumed shape dimensions in FT - fix in UA: * fix the reference to file "inputua.data" * avoid overindexing * avoid reference to out-of-bound array elements * change declaration "real*8" to "double precision" OMP version: - explicitly added "SCHEDULE(STATIC)" to the OMP version - use the "omp_get_wtime()" function for timer if available - removed the call to "getenv" for portability - change in UA: * implemented an alternative approach for atomic update MPI version: - removed a duplicated declaration in FT (from setparams.c) - removed a duplicated declaration in BT/full_mpiio.f - fixed a missing "NPROCS=" in sys/suite.awk ------------------------------------------------------ Changes in NPB3.1 (NPB3.1-MPI, NPB3.1-SER, NPB3.1-OMP) ------------------------------------------------------ [22-Apr-04] NPB3.1-MPI Merged the NPB2.4-MPI branch into NPB3.1 with the following changes. - Optimized the BT memory usage. The new version is about 1/3 of the memory used in NPB2.x. - Fixed a bug in CG for running on a large number of processes - Redefined the Class W size in MG so that the verification value will not be too small. (see below for SER & OMP versions) - Use the relative errors for verification in both CG and MG - Fixed a race in 'make suite' [08-Apr-04] NPB3.1-SER and NPB3.1-OMP The following changes are made in both NPB3.1-SER and NPB3.1-OMP. 1. Added the Class D problem - verification values taken from NPB2.4-MPI - modified variables to fit in large problem 2. Improvements for LU and LU-HP: - reduced the memory usage for the 'tv' variable in LU and LU-HP - a more efficient memory access for variables "a,b,c,d" in LU-HP - a dummy iteration added before the time step loop for consistency with other benchmarks 3. Improvement and fix in MG: - verification in MG now uses the relative error (instead of the absolute error). This will avoid incorrect verification for small reference values. - redefined the class size for Class W so that the verification value will not be too small. In version 3.0 and earlier: 64x64x64, 40 iters New size in version 3.1 : 128x128x128, 4 iters - fixed incorrect verification values for Classes A and C. 4. CG: - use relative error for verification - clean up codes for matrix initialization (makea). The new code uses about 1/2 memory of the previous version. 5. Fixed makefile related issues - fixed dependence on make.def for files in common. - fixed a race in 'make suite' - added 'LU-HP' as a valid benchmark option in makefiles The following changes are made in NPB3.1-OMP. 1. Included a hyper-plane version of the LU benchmark: LU-HP - based on the serial version 2. The dummy 'omp_lib_dum' library is not longer used for compilation without an OpenMP compiler. Conditional compilation is now used. 3. Parallelization of the initialization part of MG. It improves the turn-around time quite a bit for the larger classes, such as class D. 4. Parallelize codes for matrix initialization (makea) in CG. The new code uses about 2/3 memory of the version in NPB3.0-OMP. 5. Code clean up in SP so that the structure is more consistent with the serial version. ------------------------------------------------------ Changes in NPB2.x MPI version ------------------------------------------------------ Changes in 2.4.1 - fixed error in BT/Makefile (replaced "==" with "=") - added stub function accumulate_norms in BT/btio.f - changed type of Class B verification constants in BT/verify.f from single to double precision Changes in 2.4 - Added I/O benchmark (subtype of BT). - Added Class D for all benchmarks except IS. - Reduced size of tabulated exponentials in FT. - Made minor changes to FT to prevent integer overflow for class D on systems with 32-bit integers. FT class D will not run on small numbers of processors anymore. ------------------------------------------------------ Changes in non-MPI versions of NPB (previously PBN3.0) (NPB3.0-SER, NPB3.0-HPF, NPB3.0-OMP, NPB3.0-JAV) ------------------------------------------------------ [01-Mar-99] Initial Beta Release. [06-Apr-99] Based on report from Charles Grassl and Ramesh Menon (SGI). 1. NPB-SER, FT: file auxfnct.f - lines 74 and 75 were interchanged: double complex u0(d1+1,d2,d3), tmp(maxdim) integer d1,d2,d3 2. NPB-OMP: The OpenMP standards requires reduction variable be scalars, thus, changes made to remove the use of array variable for reduction. Relevant modifications in EP, CG, LU, SP, and BT 3. NPB-OMP: Remove compiler warnings of "Referenced scalar variables use defaults" by declaring explicitly as shared. Relevant modifications in FT, LU, and BT 4. NPB-OMP, README.openmp: Explicitly spell out the requirement of the static scheduling (setenv OMP_SCHEDULE "static"). [05-Oct-99] NPB3.0-non-MPI Beta Release (02) General change to all (NPB-SER, NPB-HPF, NPB-OMP) - 1. Update header information for all benchmarks. 2. Allow continuation lines in 'make.def' (modification done in sys/setparams.c). Change made in NPB-OMP - 1. 'print_results' now prints Number-Of-Threads and Mflops/s/thread. The printed number is the activated threads during the run, which may not be the same as what's requested. 2. A initial data touch loop for array A is added in CG. 3. 'CRITICAL' section is used for reduction with array. Relevant changes in EP, CG, LU, SP, and BT. 4. Reconfigure 'make.def' such that 'omp_lib_dum' can be activated from the file for no directive compilation. 5. The "!$OMP END DO" seems needed before "!$OMP MASTER" in rhs.f for both BT and SP for some f90 compilers. 6. "SCHEDULE(STATIC)" are used for the pipeline in LU to ensure compliance with the OMP standard. Change made in NPB-HPF - 1. 'print_results' now prints Number-Of-Processes and Mflops/s/process. 2. Use more consistent output format (via print_results). 3. More consistent makefiles (via config/make.def). [04-Apr-00] NPB3.0-non-MPI Beta Release (03) Change made in NPB-OMP - 1. The OpenMP-C version of IS has been added, including more timers. 2. 'cprint_results' includes Number-Of-Threads and Mflops/s/thread. Change made in NPB-SER - 1. More timers included in IS. NPB-JAV has been included in NPB3.0-non-MPI. [31-May-01] NPB3.0-non-MPI Beta Release (04) Change made in NPB-OMP - 1. NPB-OMP/LU: Failure in verification for number of threads greater than the problem size is now fixed. 2. If OMP_NUM_THREADS is unset, the printout will report as "unset" instead of "1" 3. NPB-OMP/IS: Allocating work_buff on the stack seems to cause problem for large problem size (CLASS C). "work_buff" is now allocated by "malloc" on the heap for CLASS C. 4. NPB-OMP/IS: Reported by - potential synchronization problem could arise due to the use of "static" variables inside "randlc()". Declaration of these static variables are moved out of randlc() and put in the threadprivate directive. General change to all (NPB-SER, NPB-HPF, NPB-OMP) - 1. Cleanup in makefiles [28-Aug-02] The Official NPB3.0 Release Change made in all - 1. Fixed a bogus verification for "NaN". 2. Name change from "PBN3.0" to "NPB3.0". Updated all the banners. 3. NPB-SER/FT: use a derived version from NPB2.3-serial. 4. NPB-HPF/FT: use a consistent printing format.