How can a large, Fortran-based number crunching codebase be modernized?
- by Dave Mateer
A friend in academia asked me for advice (I'm a C# business application developer).
He has a legacy codebase which he wrote in Fortran in the medical imaging field. It does a huge amount of number crunching using vectors. He uses a cluster (30ish cores) and has now gone towards a single workstation with 500ish GPUS in it.
However where to go next with the codebase so:
Other people can maintain it over next 10 year cycle
Get faster at tweaking the software
Can run on different infrastructures without recompiles
After some research from me (this is a super interesting area) some options are:
Use Python and CUDA from Nvidia
Rewrite in a functional language. For example, F# or Haskell
Go cloud based and use something like Hadoop and Java
Learn C
What has been your experience with this? What should my friend be looking at to modernize his codebase?
UPDATE: Thanks @Mark and everyone who has answered. The reasons my friend is asking this question is that it's a perfect time in the projects lifecycle to do a review. Bringing research assistants up to speed in Fortran takes time (I like C#, and especially the tooling and can't imagine going back to older languages!!)
I liked the suggestion of keeping the pure number crunching in Fortran, but wrapping it in something newer. Perhaps Python as that seems to be getting a stronghold in academia as a general-purpose programming language that is fairly easy to pick up.
See Medical Imaging and a guy who has written a Fortran wrapper for CUDA, Can I legally publish my Fortran 90 wrappers to Nvidias' CUFFT library (from the CUDA SDK)?.