Go to the previous, next section.

What about Performance?

To achieve network-transparency, the netCDF is implemented on top of a layer of software for external data representation (XDR). XDR, developed by Sun Microsystems, Inc., is a nonproprietary standard for describing and encoding data. It supports encoding arbitrary C data structures into machine-independent sequences of bits. The encoding used for floating-point numbers is the Institute for Electrical and Electronics Engineers (IEEE) standard for normalized floating-point numbers. XDR has been implemented on a wide variety of computers, including Suns, VAXs, Apple Macintoshes, IBM RS 6000s, IBM PS/2s, IBM mainframes, and CRAYs. It assumes only that eight-bit bytes can be encoded and decoded in a consistent way.

Translating data into and out of XDR form adds overhead to data transfers, but for many applications the extra CPU cycles used to convert data to and from a machine-independent representation are not significant. The amount of XDR overhead depends on many factors, including the data type, the type of computer, the granularity of data access, and how well the implementation has been tuned to the computer on which it is run. For a large set of applications, the overhead of the XDR layer is a reasonable price to pay for portable, network-transparent data access.

Often when an abstraction layer is added to hide the details of an underlying implementation, some computations that can be expressed simply in terms of the abstraction may be computationally expensive. Furthermore, it may not be obvious which of several ways of expressing a computation through the abstract interface will make efficient use of computing resources, without understanding something about the implementation. It is certainly possible to use the netCDF interface to access data in inefficient ways: for example, by requesting a slice of variable data that requires a single value out of each record. See section NetCDF File Structure and Performance, for a discussion of performance characteristics of the implementation and how to apply knowledge of the underlying implementation to use the interface effectively when performance is an important concern.

Go to the previous, next section.