#include <cx/PortAccess.h>void cxOutputSendNow( int portIndex )
subroutine cxOutputSendNow( portIndex ) integer portIndex
cxOutputSendNow differs from cxOutputDataFlush and cxOutputDataFlushAll, in that only data from this port is output. Data on other ports is not transmitted downstream. No further action is taken on this port when the module finishes execution or one of the data flush calls is made (since information about its state has already been sent). Also, new data cannot be placed on this port until one of the data flush calls is made. This is so that a module connected to this port later will get the same data that was transmitted to the other modules. New data can be stored in the port after the data is flushed or the module finishes execution.
cxOutputSendNow is provided to allow modules that output several datasets to increase execution parallelism in the map. For example, if a module outputs several datasets, and each dataset takes a long time to assemble (say from disk, or some other slow device) the module can call cxOutputSendNow on each port after its data is computed and stored. If the data is being sent to modules that do not have to wait on other datasets from this module, then those modules can execute in parallel. Although this is is primarily an advantage on multiprocessor systems or when the receiving modules are on remote systems, it can also reduce map computation time if the sending module is slowed by file system accesses.
It is not possible for the sending module to obtain information about the map topology to determine the optimal sequence of data output. Even if modules did know the map topology, it would probably not be worth the effort to figure out an optimal output order. A brute force technique may be of benefit some times, and will be no worse than not using cxOutputSendNow at all.