I am coming from Novi Sad, Serbia, and during my education, I had the opportunity to work on many parts of hardware-software development from writing the code for ASIC design and layout, to developing the tool for running the supercomputer. As you may know, this field is extremely wide, constantly changing and there is no chance one can become an expert in everything. This is, even more, try with the recent development of AI, and ubiquity of computer science in basically all other scientific fields.
During high school, I was interested the most in physics, since that was the most problem-solving course we had. I went on a few national competitions and after finishing the school I was considering applying for a university with a major in physics or something similar. After spending some time asking around about the programs and perspectives, I figured out that for doing physics, one needs to be extremely patient, since the experiments take time to build, and many hypotheses wait years until they finally get validated. Besides that for doing cutting-edge physics, one needs well-equipped laboratories, which my hometown university didn’t really have at the time. Since I wanted to solve all world problems immediately, I started my bachelor in electrical engineering, even more, because my favorite scientists were Nikola Tesla and Mihailo Pupin, who were electrical engineers as well.
During my bachelor, I had a chance to write my first code, assemble my first analog circuit, play with micro-controllers and make some digital designs on FPGA. When I look back, there were many fun projects and in the future posts, I will try to describe each of them. Overall experience was that making circuits is highly rewarding, and getting familiar with the whole procedure from cutting the silicon wafer to making embedded software provides a solid background for future work. For my bachelor thesis, I designed a chess accelerator in FPGA for board evaluation function, which I will describe in a separate post.
During my bachelor, I did 3 summer internships, at the University of Novi Sad as a laboratory assistant, Institute for High-performance Microelectronics in Germany as a hardware engineer, and Rice University as a software engineer. The first internship was about identifying the hardness of different materials with a micro indenter machine. The internship in Germany was the first professional international experience that taught me a lot about communication and the research setup. I was working there on profiling and analysis of FFT implementation on a specialized hardware platform. The third internship was at Rice, where I worked on a framework for performance tuning. This was my first time to work with a new world of parallel, multi-node computing, with the top-down view on the whole system and the question, how do we optimize it? I felt that there are many interesting new areas to be explored there, and therefore I started my master’s in high-performance computing at the University of Novi Sad.
During the master, we touched the base with OpenMP, MPI, Cuda, out-of-order execution, and technologies that would be more considered as distributed and big data architectures than HPC, like Hadoop, Spark, Kafka, Hyperledger, and many more. Besides this, I had my first classes on statistics and artificial intelligence, which I was always curious about but never really had the chance to dive deep into before. All these were pretty new to me, so I had to put in a lot of effort, but it was definitely worth it. For my master thesis I build the framework for finding the shortest path in a dynamic large-scale graph, that I will describe in the future post.
After I finished the master I started my PhD at Rice in the group for HPC with the mentor John Mellor-Crummey. The group is focused on building HPCToolkit, a tool for profiling programs running on a range of architectures from a laptop to the supercomputer with hundreds of nodes and GPUs from different vendors. In the first two years of my studies at Rice, I developed several pieces of HPCToolkit, introducing the new features and analysis techniques. By the end of the second year I finished 9 courses, was two times a teaching assistant, and co-authored three papers. All these courses were amazing hands-on experiences, especially artificial intelligence, parallel computing, and compilers construction, that cleared all doubts about what I want to do in the future. This summer I was doing the internship at Berkeley Lab with the focus on power analysis of GPU accelerated applications, but more about that later. Since I am almost finished with the required courses at this point, I had much more time to burn on research, reading papers, and creating the plan for guiding further research and finishing PhD.
That’s enough about me, let’s check some real projects now!