If ROMIO doesn't understand a hint, or if the value is invalid, the hint will be ignored. The values of hints being used by ROMIO for a file can be obtained at any time via MPI_File_get_info.

The following hints control the data sieving optimization and are applicable to all file system types:

The following hints control the two-phase (collective buffering) optimization and are applicable to all file system types:

For some systems configurations, more control is needed to specify which hardware resources (processors or nodes in an SMP) are preferred for collective I/O, either for performance reasons or because only certain resources have access to storage. The additional MPI_Info key name cb_config_list specifies a comma-separated list of strings, each string specifying a particular node and an optional limit on the number of processes to be used for collective buffering on this node.

This refers to the same processes that cb_nodes refers to, but specifies the available nodes more precisely.

The format of the value of cb_config_list is given by the following BNF:

cb_config_list => hostspec [ ',' cb_config_list ]
hostspec => hostname [ ':' maxprocesses ]
hostname => <alphanumeric string>
         |  '*' 
maxprocesses => <digits>
         |  '*'

The value hostname identifies a processor. This name must match the name returned by MPI_Get_processor_name 2for the specified hardware. The value * as a hostname matches all processors. The value of maxprocesses may be any nonnegative integer (zero is allowed).

The value maxprocesses specifies the maximum number of processes that may be used for collective buffering on the specified host. If no value is specified, the value one is assumed. If * is specified for the number of processes, then all MPI processes with this same hostname will be used..

Leftmost components of the info value take precedence.

Note: Matching of processor names to cb_config_list entries is performed with string matching functions and is independent of the listing of machines that the user provides to mpirun/mpiexec. In other words, listing the same machine multiple times in the list of hosts to run on will not cause a *:1 to assign the same host four aggregators, because the matching code will see that the processor name is the same for all four and will assign exactly one aggregator to the processor.

The value of this info key must be the same for all processes (i.e., the call is collective and each process must receive the same hint value for these collective buffering hints). Further, in the ROMIO implementation the hint is only recognized at MPI_File_open time.

The set of hints used with a file is available through the routine MPI_File_get_info, as documented in the MPI standard. As an additional feature in the ROMIO implementation, wildcards will be expanded to indicate the precise configuration used with the file, with the hostnames in the rank order used for the collective buffering algorithm (this is not implemented at this time).

Here are some examples of how this hint might be used:

When the values specified by cb_config_list conflict with other hints (e.g., the number of collective buffering nodes specified by cb_nodes), the implementation is encouraged to take the minimum of the two values. In other words, if cb_config_list specifies ten processors on which I/O should be performed, but cb_nodes specifies a smaller number, then an implementation is encouraged to use only cb_nodes total aggregators. If cb_config_list specifies fewer processes than cb_nodes, no more than the number in cb_config_list should be used.

The implementation is also encouraged to assign processes in the order that they are listed in cb_config_list.

The following hint controls the deferred open feature of romio and are also applicable to all file system types:

For PVFS2:

Rob Latham 2016-08-01