Programming without bothering about data structures

It is sound programming practice to define the data structures to be computed on before the actual programming effort starts. Actually, this step is crucial to obtaining efficient and portable code. Parallel codes, and more specifically computational science and engineering codes, are no exception to this rule. On the other hand, it is also well known that specific data structure selections can prevent compiler analysis and thereby prohibit program optimization. This problem is best illustrated by the representation of a sparse code in either Fortran with indirect addressing, or in another language with pointer structures. In this situation software maintenance and the effort of producing sparse computation codes become complicated, and most compiler optimizations get disabled. The paper considers how these two opposing interests can be expected to increase in importance for computational science and engineering. Especially in CSE, the need for high performance will push programmers to use more advanced data structures, and optimizing compiler technology will also be stressed more and more.