I work on numerical simulations, where I deal with colossal arrays of floating point numbers on hundreds or thousands of nodes. I want tools that can help with the following:
1. Visualizing code. Rendering C++ and/or Fortran as LaTeX would be very helpful for lines of code like this, where I've spent too much time tracking down misplaced parens:
k1(1,1)=-Im*(Omega_minus_n*(rho13(i,j)+conjg(rho12(i,j)))-Omega_plus_n*(rho12(i,j)+conjg(rho13(i,j))))+gamma1*(rho22(i,j)+rho33(i,j))
2. A better way to debug and test mathematical programs. Debugging is extremely hard when you have thousands of processes doing calculations that aren't reproducible by hand, so it's very difficult or impossible to create test cases for subunits of the program. The only tests are Fermi calculations and comparison of the whole program's output with an analytical solution, which is often not possible, and is not useful for debugging.
3. A language with the following characteristics:
- Within 10% of Intel/PGI Fortran on tight numerical loops
- Array and distributed/concurrent syntax with lightweight threads and syntactical support for GASnet/MPI.
- Parallel load balancing, preferably across nodes. A few of the algorithms I use are adaptive or have parts of the solution domain that require much more work than other parts, leading to situations where naive/maintainable MPI code leaves most processors idle.
- Hindley-Milner type inference, typeclasses/typeclass-like features, operator overloading/syntax extension, and effortless interoperation with C/Fortran. An IDE with syntax rendering like Maple or Mathematica's would be a HUGE plus. I don't know why this doesn't exist for usably fast languages.
- Supports an interactive mode with easy visualization
The closest language I've seen is Cray's Chapel, but there are several things I don't like about it. Its imperative/oo design and lack of first class functions/tco are unacceptable, since the algorithms I use need to use the integer side of the machine as well as the floating point ones. Right now I use either Charm++ (http://charm.cs.uiuc.edu/) with Intel's array syntax, or Fortran 2008 for some inherited code. C++ has non-ideal semantics for numerical code, and doing non-trivial algorithms in Fortran is still a nightmare, especially when using MPI, as communication code quickly becomes the main part of the program. Something like Sisal (http://sourceforge.net/projects/sisal/), if it was modernized and extended to distributed architectures, would be amazing. It used to beat typical Fortran by 20%.
4. I absolutely need to account for cache behavior, otherwise my simulations will take months to run instead of weeks. I would love anyone who wrote a practical tool that automatically tiled loops, since doing this manually turns code into an unmaintainable rat's nest very quickly, or wrote a library of skeletons for tiled loops and cache oblivious algorithms.