Version 1 (modified by robl, 4 weeks ago)

some rough documentation about multi-variables

This text is taken mostly from the abstract of Kui's IASDS paper (Kui Gao, Wei-keng Liao, Alok Choudhary, Robert Ross, and Robert Latham. "Combining I/O Operations for Multiple Array Variables in Parallel NetCDF". In the Proceedings of the Workshop on Interfaces and Architectures for Scientific Data Storage, held in conjunction with the the IEEE Cluster Conference, New Orleans, Louisiana, September 2009. )

Array variables comprise the bulk of the data in a netCDF dataset, and for
accesses to large regions of single array variables, PnetCDF attains very high
performance. However, the current PnetCDF interface only allows access to one
array variable per call. If an application instead accesses a large number of
small-sized array variables, this interface limitation can cause significant
performance degradation, because high end network and storage systems deliver
much higher performance with larger request sizes. Moreover, the record
variables data is stored interleaved by record, and the contiguity information
is lost, so the existing MPI-IO collective I/O optimization can not help. This
paper presents a new mechanism for PnetCDF to combine multiple I/O operations
for better I/O performance.  This mechanism can be used in a new function that
takes arguments for reading/writing multiple array variables, allowing
application programmers to explicitly access multiple array variables in a
single call. It can also be used in the implementation of asynchronous I/O
functions, so that the combination is carried out implicitly, without changes
to the application. Our performance results demonstrate significant
improvement using well-known application benchmarks.

There are two ways to use this feature:

Implicit Method: New routines (e.g. ncmpi_mput_vara_all) take a list of variables to access

Explicit Method Several variable accesses can be "scheduled" with the nonblocking routines (e.g. ncmpi_iput_vara_all). Then, when the application waits for completion of those accesses, the library will service them all in a single call.