Skip to main content
Post Made Community Wiki by S. Carnahan
Source Link
Neel Krishnaswami
  • 9.2k
  • 1
  • 30
  • 54

This is still something of an open problem. The reason is that achieving high performance on numerical codes takes fairly close attention to things like data locality and the details of the cache hierarchy -- failing to do so can easily cost a factor of 10 or 20 in performance. So compiling high-performance numerical code from high-level programs requires fairly sophisticated language and compiler technology.

  • The state of the art at the moment for high-level numerical programming is probably something like SAC, which is a purely functional language which uses ideas from functional programming, linear types, and nested data parallelism to efficiently parallelize and SIMD-ize high level specifications of array processing programs. This builds on ideas from older research languages like Sisal and NESL.

  • Another example is the ATS project, which is a functional language which uses dependent type theory and linear types to support generating very efficient code. I don't think they have explicitly focused on numerical codes, though they have investigated high-performance systems programming more generally.

  • Another commonly-used approach is to write a high-level program which generates the low-level code, rather than writing it by hand. This is used by the FFTW package ("Fastest Fourier Transform in the West"), which is an Ocaml program (written in a very higher-order functional style) which generates the C code in the FFTW package.