February 05, 2019 - by Mikael Simberg
When I joined CSCS I was given the task to work on HPX, a C++ library that implements many of the C++ standard library features for concurrency and parallelism using an optimized runtime. HPX even extends the C++ standard algorithms to work on multiple nodes. Why are we interested in HPX? We are exploring how scientific applications can benefit from using task-based programming — especially on complex nodes with accelerators such as GPUs — and HPX is an excellent standards-based starting point to do so, with the long-term goal of solving complex scientific problems more efficiently. However, no library is perfect so my main task at CSCS has been to work on stability, usability, a few critical features required for using HPX in an HPC environment, and at the same time try to integrate it into existing applications.
Working on HPX hasn't just been about programming. Being an open-source project — and fairly large at that — means that I have had the opportunity to see all the non-programming tasks that come bundled for free with open-source. This means everything from making sure our documentation is up-to-date and useful for strangers trying out the library for the first time, to helping new contributors find useful issues to work on, to making sure testing, reviewing, and so on goes smoothly. These problems are of course not unique to open-source software. They are, however, right in your face and visible to everyone. Being a publicly funded institution, I'm also very happy to see that CSCS is so dedicated to support and develop open source software.
A bonus of working on HPX has been that the STE||AR group (under which HPX is developed) takes part in Google Summer of Code. As a result I had the chance to act as a mentor last summer for a student who implemented an HPX backend for OpenCV. I hope to repeat my experience in the future. Part of my job is to spread knowledge about HPX within CSCS. Thanks to this I also got to organize a one-day workshop about HPX for our group. Preparing for and teaching the workshop was a very useful exercise in not overwhelming your students, but at the same time going deep enough to keep them interested.
Most recently I was asked to help hire nearly 10 new employees for our group. My initial reaction was "sounds interesting, but isn't that going to take up a lot of my time?" It has indeed taken a lot of my time, but it's not an experience I would give up after the fact. First, it has given me a lot of insight into the selection process which I'm sure will help me in the future if I find myself on the other side of an interview again. Second, I've become better (I still have a long way to go) at asking candidates questions that are specific enough to give useful answers but vague enough to not bias the candidate's answer — to let their own opinions come through. Last, just hearing so many different candidates talk about their projects and solutions is always interesting!
What I've come to appreciate most about CSCS is the people I get to work with. There's always something to discuss and learn from them, whether it's technical or not and whether it's from my colleagues, superiors, collaborators, visitors, or people one meets at a conference. Working at CSCS has been so much more than I expected. I haven't just been coding. Or fixing bugs. Or reviewing. Or testing. Or documenting. I've also been mentoring, teaching, hiring, discussing, traveling, and learning. And I'm enjoying it a lot.