gumby@Gang-of-Four.Stanford.EDU (David Vinayak Wallace) (01/21/90)
Date: 20 Jan 90 21:02:15 GMT From: ruede@boulder.Colorado.EDU (Ulrich Ruede) - Machines with memory hierarchies (virtual memory or Cache) will work more efficiently. When processing the meshes (say for a relaxation pass) I usually access several components of a node at the same time; this data will typically reside on the same (or a few adjacent) memory pages. A straightforward FORTRAN implementation would use separate arrays for each member of the structure, so that several pages must swapped in for accessing one single node. Simulating the C memory structure in FORTRAN would require use of EQUIVALENCE and be difficult to make portable. Rubbish. Depending on the size of your nodes, the number thereof, and how you exampine them, FORTRAN could be more efficient. Consider this limiting case: your structures each take one page's worth of storage. Each bucket is a word long. You only examine two buckets of each structure, in roughly sequential order. In the C case you could conceivably take a fault on every (or every other) structure you look at. For the fortran program, you'll only take a fauly every n (where for my example n happens to be the number of words in a page by coincidence). Obviously there are several dimensions over which the behaviour will vary. But the example illustrates that C structs aren't inherently more efficient in this regard. And in fact this problem comes up often when working with large datasets. I'm no fortran fan, nor a C fan.