aboutsummaryrefslogtreecommitdiff
path: root/doc/html/why.html
blob: bccad6d5460d8bf0667cf670cc5c21d082a610eb (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
<html>  
  <head>
    <title>Why IEEEIO</title>
  </head>
  <body bgcolor="#F0F0F0">
    <!-- <img src="Images/ieeeiotitle.gif">-->
      <h1>Why use IEEEIO?</h1>
      <DL>
	<DT><b>Its compact</b>
	<DD>On the SGI Origin 2000, the entire library is 206k.
	  It contains only a little over 2,500 lines of code for
	  the C++, C, and F77 versions combined.<p>
	  
	<DT><b>Its fast</b>
	<DD>Most simulation applications end up writing a lot more
	  data than they read, the I/O interface is optimized for
	  maximum writing speed. No seeking is required during writing
	  and the low-level raw unix I/O interface 
	  is used to maximize performance. 
	Preliminary <a href="Performance.html">performance tests</a>
	 show that it is
	comparable with f77 unformatted IO for writing
	speed.

	Data is translated to the
	  machines native representation <i>(ie. byte-swapping)</i>
	  only during reading. 
	  If speed is required for reading as well, then there is a
	  <a href="Utilities.html#convert2native">'convert2native'</a> 
	utility which will optimize the file
	  for the type of machine that is reading it.<p>
	    
	<DT><b>It interoperates with HDF</b>
	<DD>If you use HDF-SDS, you should have no problem using IEEEIO
	  because they share the same programming interface.  You 
	  indicate the type of file you want to use when you open 
	  the file.  From there on, the same subroutines are used
	  for reading or writing data to the file, whether it be HDF
	  or IEEEIO.  In addition there is an 
	<a href="Utilities.html#ioconvert">'ioconvert'</a> 
	utility that can translate
	either direction between IEEEIO and HDF files and preserve
	all of the HDF annotations and NetCDF attributes.<p>
	    IEEEIO doesn't supercede HDF.  It is designed
	    to be a lightweight IO system which you would use when
	    the broader functionality of HDF is not required.<p>
	    
	<DT><b>It is crash-safe</b>
	<DD>Since no seeking is required to maintain file integrity
	  during writes, you will not lose data if the
	  simulation program exits without having properly
	  closed the file.<p>

	<DT><b>Most machines use IEEE standard floating point number 
	    formats</b>
	<DD>When HDF and XDR were first created, almost every machine
	  architecture had its own native floating point representation.
	  There were VAX floats, Cray floats, and Convex floating point
	  representations... all mutually incompatible.  Now, virtually
	  every major supercomputer architecture supports IEEE standard
	  floating number representations.  The primary differences
	  between number formats now it the byte-order which is trival 
	  to convert.  
	  As a result, the XDR and HDF support for platform neutral 
	  floating point formats is more work than is necessary for
	  most machines.  By depending on 
	  IEEE standard number formats, the data storage can be made
	  much simpler and more efficient. 
	  If
	  the machine you use doesn't support IEEE floating point
	  numbers, then you should continue to use HDF.  Since IEEEIO
	  interoperates with HDF, this does not require significant
	  modifications to your code to switch back and forth between
	  the two.  Currently IEEEIO has been ported to SGI IRIX {5.x,6.x},
	  IRIX64 6.x, HP-UX 9.01, ConvexOS {on SPP-1200 and SPP-2000},
	  DEC Alpha OSF/1, and the Cray T3E.  The only machine that is 
	  not supported is the Cray C90.<p>

      <DT><b>Why not use XDR?</b>
	<DD>
	So if the aim is to create a lightweight portable binary file
	format, this leads to the question of why not use XDR for the
	encoding?  Well the answer is that in early testing it was
	discovered that HDF is significantly faster and more efficient than
	XDR.  So if you really need XDR then you should be asking
	yourself <i>why not use HDF</i>?<p>  

	Again, this file format is
	primarily designed to take advantage of the fact that most of
	the operations that XDR and HDF do to make the data platform
	neutral are not always necessary given current binary formats
	for floating point numbers.  It also leads to a very simple-to-parse
	  file structure which brings us to the next point...
	<p>

	<DT><b>Simple file structure</b>
	<DD>Its extremely simple file structure makes it 
	  easy to build readers in a variety of languages.
	  This is important for interpreted data processing
	  languages like IDL because the reader can be implemented
	  in native IDL instead of writing native methods.
	  The same is true of Java.  Instead of creating native
	  methods that directly call the libieeeio interfaces,
	  the format is simple enough that it can be implemented
	  using java itself.<p>
      </DL>

      <hr>
      <address><a href="mailto:jshalf@suttung.aei-potsdam.mpg.de">John Shalf</a></address>
      <!-- Created: Mon Apr  7 12:52:52 MDT 1997 -->
      <!-- hhmts start -->
Last modified: Tue May 27 18:14:25 CDT 1997
<!-- hhmts end -->
  </body>
</html>