@Article{kandemir:compiler,
  author = {Mahmut Kandemir},
  title = {Compiler-Directed Collective {I/O}},
  journal = {IEEE Transactions on Parallel and Distributed Systems},
  year = {2001},
  month = {December},
  volume = {12},
  number = {12},
  pages = {1318--1331},
  URL = {http://computer.org/tpds/td2001/l1318abs.htm},
  keywords = {parallel I/O, collective I/O, compiler, pario-bib},
  abstract = {Current approaches to parallel I/O demand extensive user effort
  to obtain acceptable performance. This is in part due to difficulties in
  understanding the characteristics of a wide variety of I/O devices and in
  part due to inherent complexity of I/O software. While parallel I/O systems
  provide users with environments where persistent data sets can be shared
  between parallel processors, the ultimate performance of I/O-intensive codes
  depends largely on the relation between data access patterns exhibited by
  parallel processors and storage patterns of data in files and on disks. In
  cases where access patterns and storage patterns match, we can exploit
  parallel I/O hardware by allowing each processor to perform independent
  parallel I/O. In order to keep performance decent under circumstances in
  which data access patterns and storage patterns do not match, several I/O
  optimization techniques have been developed in recent years. Collective I/O
  is such an optimization technique that enables each processor to do I/O on
  behalf of other processors if doing so improves the overall performance.
  While it is generally accepted that collective I/O and its variants can bring
  impressive improvements as far as the I/O performance is concerned, it is
  difficult for the programmer to use collective I/O in an optimal manner. In
  this paper, we propose and evaluate a compiler-directed collective I/O
  approach which detects the opportunities for collective I/O and inserts the
  necessary I/O calls in the code automatically. An important characteristic of
  the approach is that instead of applying collective I/O indiscriminately, it
  uses collective I/O selectively only in cases where independent parallel I/O
  would not be possible or would lead to an excessive number of I/O calls. The
  approach involves compiler-directed access pattern and storage pattern
  detection schemes that work on a multiple application environment. We have
  implemented the necessary algorithms in a source-to-source translator and
  within a stand-alone tool. Our experimental results on an SGI/Cray Origin
  2000 multiprocessor machine demonstrate that our compiler-directed collective
  I/O scheme performs very well on different setups built using nine
  applications from several scientific benchmarks. We have also observed that
  the I/O performance of our approach is only 5.23 percent worse than an
  optimal scheme.}
}

