Job position(s) in F2003+

Hello everybody,

I have discovered this community only very recently. I am an associate professor at the University of Central Florida (Orlando), and I work with modern fortran as part of my research. I will try to join the next monthly meeting to get an idea of whether there is the opportunity for me to get more involved. That said, I wonder whether it would make sense to advertise here a new postdoctoral position in atomic and molecular physics that I have just opened, supported by DOE funds [University of Central Florida, Argenti Theoretical Attosecond Science Group]. The reason I am asking is that the position entails a considerable amount of code development from someone who should be very proficient in modern fortran, and who would hence have a lot in common with the members of the fortran-lang community. Incidentally, if part of the mandate of this website is to create community, I think it would be appropriate for it to have a job-market section, where competence in modern fortran at a high level, or at least commitment to best code design and construction practices would be a defining feature.
I look forward to your feedback.
Thank you very much for your time and help.
Best wishes,

 Luca

(Luca Argenti)

6 Likes

Hi Luca,

Absolutely, I think job postings are definitely on topic. Milan, if you also agree, would you mind creating an appropriate category?

Ondrej

P.S. My background is in atomic physics and electronic structures also.

1 Like

Hi Ondrej,
Thank you for your prompt reply. Sounds awesome! Btw, NĂ©stor Aguirre, an ex colleague of mine, is also working at LANL. He is a big fan of coding like you. I should visit sometime in the future :wink:
Cheers,
Luca

1 Like

Welcome @argenti, and @certik, I agree, I created the Jobs tag and tagged this topic with it.

Luca, I live in Boca Raton and work at the University of Miami, so we’re Fortran neighbors (relatively speaking). :slight_smile:

1 Like

Hi Milan,

Yes, I noticed that. I browsed through your presentation at the fortran conference, and was hopeful to reach out to you soon. :slight_smile: I think it is great to have a real hard-core expert in the area. I have reinvented my own share of general-purpose wheels (e.g.: for tokenizing strings, for managing command-line parameters, for doing calculations with Bsplines, for general angular algebra) which I imagine may find their way in standard libraries, and which it would be good to have enshrined and maintained for good.

The DOE project is not trivial. I think it would be great not only to find someone directly employed as a postdoc who is in the know, but also external professionals who could revise the code and offer periodic feedback on its general structure, as the code continues cycling into a bigger thing.

Cheers,

Luca
1 Like

@argenti ,

Welcome to this Discourse.

It’s always heartwarming to find Fortran retain its presence among the physics and related domains (electronic structure computations in chemistry and materials science and technology, for example) and to see modern Fortran getting adopted further.

Perhaps you will consider making it a job requirement for the person in this position to make a certain level of actual code contributions each year to the Fortran standard library effort!!! :blush:

3 Likes

Dear FortranFan,

Delighted to be part of the happy crew. While I do not plan to make it a job requirement to produce code for the standard library, I believe that my group should be able to offer some functionality for those libraries anyway.

I have opened an account on Stack Overflow and Code Review, two communities of StackExchange dedicated to discussion of code solutions, and review of working code, respectively. The Fortran tag is languishing at the very bottom of the pile, with only a handful questions made and answered, whereas the more widespread languages range in the tens of thousands.

I do not see it possible to overcome the perception that Fortran is dead and buried, if the community does not occupy those spaces, demonstrating that in modern Fortran it is possible to write code often as concise and expressive as high-level languages’, and much more efficient. Over the weekend, I have already contributed six questions and six answers there. As a result, the question count has increased from 24 to 30, making Fortran jump by several dozen positions. With a periodic and concerted effort, it should be possible to make Fortran count get to the several-hundreds, thus rivaling with languages such as R(359), Golang (524), and Rust (532). Posting each standard library with tests on code review would be a low-hanging fruit to establish a qualified presence. Supporting each other in “liking” community posts would be a way to bubble up the discussion. Contributing with fortran-tagged Fortran solutions in C, C#, python, perl, java, etc. threads related to numerical or physical problems (as opposed to system and web coding) is another way to penetrate the discussion.

The tutorial you set up are very good. Posting solutions is also an opportunity to advertise them with a link, e.g., "For a quick tutorial on the simple and powerful syntax of modern fortran, see ".

Cheers,

Luca

P.S.: I have added a link to the fortran tutorial to each of my posts on code review.

5 Likes

Hi @argenti ,

Welcome. It’s great to see this community is finding its way out to practitioners.

@rouson and I provide training sessions in modern Fortran development, code reviews and contract development. I’m afraid I don’t have a lead for the post-doc position you’re looking for, but if you ever need a little extra help with the code, don’t hesitate to reach out to us.

1 Like

Hello @everythingfunctional, thank you for reaching out. I think it would indeed be good to have some other eyes looking over the architecture of the code. Furthermore, when I find a postdoc, it may be appropriate to have them take some professional development to make sure they are at least aware of the expectations. Normally, I hand my collaborators a copy of “code complete 2”, with the hope they would instantly see the light, but that is not necessarily the case. Graduate students typically have a coding background equivalent to knowing how chess pieces move on a board and nothing more, which means that most of the higher-level best practices fly well above their head and do not stick …
I had a quick look at your websites. I think I will appoint my new graduate students to your course(s) (covid must go away before I take more on board, though. The others are graduating now). The parallel features highlighted in the Sourcery Institute, however, would be good for me as well. In fact, I think it would be great to take that course before converting my code to parallel.
Best wishes,
Luca

I have Code Complete 2 on my shelf. I definitely learned a lot from it, but it is quite a tome to expect someone not thoroughly interested in software for its own sake to get through and “see the light” of their own free will. And yes, your experience with “knowing how chess pieces move on a board and nothing more” comports with my experiences for most scientific and engineering programmers, even in industry. At any rate, let us know if/when you are interested in scheduling something. We’ve gotten some experience teaching remotely in recent months as well, so that could be an option.

Hello everybody,
I have introduced Juan MartĂ­n Randazzo to this mailing list. Juan is a scientist from the Argentinian research council who spent a year as a postdoctoral fellow at my university to work with me on a DOE funded project. Juan should make his appearance here soon. He will be back to Argentina next week, but we plan to continue collaborating and I am sure that our project and the two of us will benefit from the interaction with this community.
Cheers,
Luca

2 Likes

Hi @everythingfunctional, and everybody,

I offer here some parameters to give others the chance of chiming in.

  1. The code we are developing is currently around ~15k lines in a couple dozen files. It is OO, hopefully it has a non-random architecture, it is currently serial, and we are trying to have some sort of smoking test to go with it. None of us has a background in software engineering. It would be good to make sure the fundamentals are covered by profiling, reviewing, and documenting the architecture: domains, classes, use, what to keep and what to change, how to integrate testing, how to integrate database, how to manage possible IPC with sibling legacy programs as servers.

  2. It would also be useful to setup a GUI to configure the input in a guided way, rather than editing a bunch of config files. I have never done that, but I guess there are a bunch of canned templates ready.

  3. It would be good to have some heads-up on parallelization. Many parts of the code are ``embarassingly’’ parallelizable. Other parts, still to be implemented, should be well suited to parallelization, as most algorithms rely on Krylov-space methods to evaluate the action of exponential or inverse of large sparse complex matrices on test vectors, which boil down to matrix-vector multiplication. In other past projects, I have used PETSc as an MPI interface, but that feels like a clunky solution. Indeed, on a single node, our PETSc based propagator runs five-six times slower than the MKL multithreaded BLAS version, which was a disappointment. Maybe co-arrays can do the trick, possibly in tandem with MKL ZGEMV/ZGBMV on each node.

  4. Last but not least, I am about to purchase a GPX XS8-24S1 workstation with an NVIDIA A100 GPU. The hope is that we can use Fortran + OpenACC (?) to have a code that scales well and is fast even on a single node. However, having no experience with this, I wonder if it is possible to use both the CPUs ( 2 x 24 cores ) and the GPU together. Conversely, it would be good to have code that can be used both for distributed and for shared memory without making a full version of each program for every architecture [i.e.: distributed/shared x (n GPUs + m CPUs)]. With just PETSc and MKL, that did not seem like a viable option. It looks like the new oneMKL would be the best option. However, it is not clear to me if, in fortran, it uses both CPUs and GPUs at the same time, as it seems to be the case for DPC++. Maybe I should just write the propagators in C++ … :stuck_out_tongue_winking_eye:

I look forward to your general feedback on the above and, from those who are in these things, a ballpark figure of the cost of code review as outlined in point 1.

Thanks a lot to all for any insight!
Luca

Thanks for the details.

  1. I can work up a more formal estimate for you if you’d like, but I can say it is not something that should be cost prohibitive.
  2. There is an open source Fortran interface to the GTK libraries. I’ve also seen some projects use Python to write their GUI, as it has some decent tooling for interfacing with Fortran. I’ve also seen a project interface with FLTK.
  3. and 4. Parallel code can now be written purely in standards conforming Fortran. And Nvidia recently announced their compiler will be able to automatically offload certain do concurrent blocks to their GPUs automatically. I think standard Fortran is looking very promising for parallel code.

Hi @everythingfunctional,

Thank you for the quick answer. In academia we (or at least I) do not have the same spending ability as private industries, so it is good to hear that the review should not have a prohibitive cost. Shoot me an email (luca.argenti@ucf.edu) if you need more details to prepare an indicative quote. I will see if it is feasible and work on the PO with our admins. Even if the project budget does not have an entry for external software review, I should be able to reroute some of the funds from past-year travel (…).

To summarize, given the 15k lines of OO code, in a couple dozen files, it would be good to

  • profile, review, and document the architecture: domains, classes, use, what to keep and what to change, how to integrate testing, how to integrate database, how to manage possible IPC with sibling legacy programs as servers
  • list suggested improvements to the construction of the code, with isolated segments of codes rewritten to illustrate how the improvements should be implemented throughout the rest of the code.

Regarding GUI, I am not sold on calling it from fortran. As I see it, the task should rather be to convert the GUI input to the original ASCII config file, and launch the program afterwards, which could be done in python. Doing so would decouple the gui from the main program and make it optional (rather than an integral component of the driver code, which in my opinion is not desirable), and it would also allow for more easy extensions later on, to carry out data analysis and visualization at the end.

In the case of GPU, the crucial point is to have blas easily accessible there. From the example that I have seen on their websites, it looks that this is indeed the case, with instructions as simple as

#ifdef CUBLAS
  call cublas_SGEMM ('n','n',m1,m1,m1,alpha,A,m1,B,m1,beta,C,m1)
#else
  call SGEMM ('n','n',m1,m1,m1,alpha,A,m1,B,m1,beta,C,m1)
#endif

Cheers,

 Luca

For the GUI interaction with your Fortran code, consider a HTTP client-server pattern:

  • A lightweight HTTP API server (REST or otherwise) on the backend (where your Fortran code runs). It can be in any language.
  • A HTTP client on the frontend (web or local GUI) which issues HTTP requests to the server.

Once you have a HTTP interface, you absolutely need not worry about any language interop. Plus, you won’t hardwire yourself into a specific technology (GTK, QT, etc.). You could have a client that is a CLI tool, Python library, web-app, mobile-app, or a local GTK GUI, or all of the above if your users want it.

Your UI will be the same whether you’re running the Fortran code on your local workstation, remote HPC system, or the cloud.

This is exactly how we did it with https://cloudrun.co/ which runs a ~1M LOC parallel Fortran code in the backend.

4 Likes

Hi Milan,
thank you for the suggestion: it looks like an awesome large-scale idea.
It seems to require a lot of work to build the HTTP server and client, though. I can imagine it makes sense if you have a dedicated supercomputer online with a bunch of users. However, if someone wants to run the software on their laptop, wouldn’t it be a bit heavy to ask them to configure and run a web server before they are able to actually run the program? I fear many people used to command-line instructions would be put off by that notion. I do not know virtually anything about HTTP servers, so I may just be saying nonsense, but wouldn’t running a server require some privileges? On a national supercomputer, I would need to pass my credentials just to log in. I am inclined to think they would not allow me to open a server and connect to it with a client from the outside.

Yes, it’s more work because it adds a layer between the frontend and backend. So it’d be more of a long-term investment if you foresee your software having more than several users and being used more than several years.

But the HTTP interface itself is not necessarily complicated, far less than a GTK or QT GUI for example. A server could be done with ~50-100 lines of Python if you use one of the popular frameworks. A local install wouldn’t necessarily be much harder than pip install .

Yes, if you want to run it on an HPC systems and you can’t get the administration to open a dedicated port for you, it’s not an ideal solution. I see HPC systems more and more open dedicated ports for user web services, like Jypyter servers, so I don’t think this would be prohibitive.

1 Like

I like this idea because it’s so portable and allows exploitation of the many mature web frontend technologies.

It’s actually surprisingly easy to forward ports from a remote system without needing admin permissions using ssh port forwarding, see for example:

1 Like

ssh port forwarding sounds pretty nifty. I often use sshfs to monitor / transfer remote files, which is really convenient. From what I understand, ssh port forwarding works almost as if you were launching the server on the localhost. Still, I suspect that some centers would not allow tcp forwarding (and in fairness it does look risky)