|
| 1 | +[PnetCDF](https://parallel-netcdf.github.io) Version 1.12.1 Release Notes (December 9, 2019) |
| 2 | + |
| 3 | +* New/updated utility program |
| 4 | + + A new command-line option `-t` is added to utility program `cdfdiff` to |
| 5 | + compare variable differences within a tolerance. See the man page of |
| 6 | + `cdfdiff` for usage. |
| 7 | + |
| 8 | +* Issues related to MPI library vendors: |
| 9 | + + When using OpenMPI version 4.0.2 to build PnetCDF 1.12.0 and prior |
| 10 | + versions, running 'make' may encounter a problem related to MPI constants |
| 11 | + that have been deprecated in MPI standard 3.0. Error messages similar to |
| 12 | + below may appear. |
| 13 | + ``` |
| 14 | + In file included from src/drivers/common/dtype_decode.c:16: |
| 15 | + src/drivers/common/dtype_decode.c: In function 'ncmpii_dtype_decode': |
| 16 | + /OpenMPI/4.0.2/include/mpi.h:322:57: error: expected expression before '_Static_assert' |
| 17 | + #define THIS_SYMBOL_WAS_REMOVED_IN_MPI30(func, newfunc) _Static_assert(0, #func " was removed in MPI-3.0. Use " #newfunc " instead.") |
| 18 | + ^~~~~~~~~~~~~~ |
| 19 | + /OpenMPI/4.0.2/include/mpi.h:743:46: note: in expansion of macro 'THIS_SYMBOL_WAS_REMOVED_IN_MPI30' |
| 20 | + # define MPI_COMBINER_HVECTOR_INTEGER THIS_SYMBOL_WAS_REMOVED_IN_MPI30(MPI_COMBINER_HVECTOR_INTEGER, MPI_COMBINER_HVECTOR); |
| 21 | + ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
| 22 | + src/drivers/common/dtype_decode.c:390:14: note: in expansion of macro 'MPI_COMBINER_HVECTOR_INTEGER' |
| 23 | + case MPI_COMBINER_HVECTOR_INTEGER: |
| 24 | + ^~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
| 25 | + ``` |
| 26 | + In OpenMPI 4.0.2, the default configuration is not to support MPI constants |
| 27 | + that have been deprecated in MPI 3.0. However, instead of ignoring those |
| 28 | + constants, OpenMPI 4.0.2 still defines them as assertion macros, which can |
| 29 | + cleverly trigger a compile-time error if user programs try to use them. |
| 30 | + This behavior appears when the underlying C compilers supporting 2011 |
| 31 | + revision of the C standard (with `__STDC_VERSION__ >= 201112L`) such as GCC |
| 32 | + version 4.6 and later are used to build OpenMPI. However, when using |
| 33 | + earlier versions of C compilers to build OpenMPI 4.0.2, those deprecated |
| 34 | + MPI constants are not defined at all in mpi.h. See discussion |
| 35 | + [issue 7099](https://github.com/open-mpi/ompi/issues/7099). |
| 36 | +
|
| 37 | + Thanks to Carl Ponder for reporting the error and Nick Papior for providing |
| 38 | + a workaround solution that is to rebuild OpenMPI 4.0.2 with configure |
| 39 | + option "--enable-mpi1-compatibility" and use it to build PnetCDF 1.12.0 and |
| 40 | + earlier versions. Note the latest MPICH 3.3.1 does not have such an issue, |
| 41 | + as all deprecated constants are still defined. This issue is now fixed in |
| 42 | + PnetCDF of release 1.12.1 which no longer requires the workaround build of |
| 43 | + OpenMPI. |
| 44 | +
|
| 45 | +* Bug fixes |
| 46 | + + Fix strict aliasing bug when building PnetCDF with -O3 flag. See |
| 47 | + [a40aa5f](https://github.com/Parallel-NetCDF/PnetCDF/commit/a40aa5f73938ba1298f92ad471b3e3578ef8dbda) |
| 48 | +
|
| 49 | +* New Limitations |
| 50 | + + Configure command now checks whether the supplied MPI C compiler is a |
| 51 | + wrapper of a C++ compiler. If this is detected, the PnetCDF configuration |
| 52 | + will be aborted. This check is enforced because using such an MPI C |
| 53 | + compiler will cause problem for linking Fortran, C and C++ programs, with |
| 54 | + an error message similar to this: |
| 55 | + ``` |
| 56 | + conftestf.o: In function `MAIN_': conftestf.f:4: undefined reference to `sub_' |
| 57 | + configure:33318: error: Could not link conftestf.o and conftest.o |
| 58 | + ``` |
| 59 | +
|
| 60 | +* Build recipes |
| 61 | + + On Theta @ ALCF, when compiling utility programs 'ncoffsets' and 'cdfdiff', |
| 62 | + using Intel-based compilers such as module PrgEnv-intel, one may encounter |
| 63 | + error messages below. |
| 64 | + ``` |
| 65 | + In file included from /usr/include/inttypes.h:27:0, |
| 66 | + /theta-archive/intel/compilers_and_libraries_2019.5.281/linux/compiler/include/stdint.h:43:54: error: missing binary operator before token "(" |
| 67 | + defined(__has_include_next) && __has_include_next(<stdint.h>) |
| 68 | + ^ |
| 69 | + ``` |
| 70 | + This issue is due to the environment variable 'CPATH' is set for Intel C |
| 71 | + compilers which is not compatible with GCC. However, this can be simply |
| 72 | + resolved by adding "SEQ_CC=icc" to your make command line, i.e. |
| 73 | + ``` |
| 74 | + make SEQ_CC=icc |
| 75 | + ``` |
| 76 | +
|
| 77 | +* Other updates: |
| 78 | + + The string length of I/O hint `nc_burst_buf_dirname`, the name of burst |
| 79 | + buffer directory must be less than the value of MPI_MAX_INFO_VAL. This is |
| 80 | + because all PnetCDF I/O hints were handled through MPI info mechanism and |
| 81 | + MPI requires the maximum string length of the value of an MPI info object |
| 82 | + to be MPI_MAX_INFO_VAL. If violated, error MPI_ERR_INFO_VALUE will be |
| 83 | + returned. |
| 84 | +
|
0 commit comments