The summer internship at EPFL (École Polytechnique fédérale de Lausanne), Switzerland, has been the biggest opportunity for me to do quality research, learn different skills, come out of my comfort zone, meet new people and develop myself as a better person altogether. During my third year, I had offers from Mitacs GRI, DAAD and summer@epfl programs. I chose EPFL because of the university, professor, and my interest. The journey to it is what I will remember forever. A branch changer, an introverted guy like me, wanted to explore many things in my second year. Many seniors helped me explore various things, including development, machine learning, etc., and I finally settled on computer architecture research. It tells a lot about the senior-junior culture of IITR, where my introverted personality was never a barrier to inheriting the experience and knowledge of great seniors.
At the end of my second year, I got a virtual internship at Georgia Tech. That was the turning point of my career, and I have pursued research in computer architecture ever since. I sent many emails in December but couldn’t get a positive reply. In February, I consulted my other research-oriented friends, who motivated me. At that time, they had already sent around 100 emails; they said I could expect good replies only for a few. The emails should contain specifics about the professor’s work and how your interests align. After around sixty emails spanned over a month-long emailing process, I got good replies and gave some interviews.
My professor, Jim Larus, is a very successful researcher in systems and has been a manager and director at Microsoft Research. Despite my nervousness about working among such a great group of researchers, my internship at the VLSC (Very Large Scale Computing lab) started pretty well. I had to implement AXI BUS protocols on an FPGA. I had good knowledge of Verilog, a hardware description language, which made my start quite smooth. Progressively, it started getting more challenging. I remember there was a day I had to code in five different languages. I worked hard and tried to make the most of this opportunity. I implemented a cache with AXI protocols on an FPGA at a 431 MHz clock frequency. It was the first time I ported something on an FPGA, and in the process, I also learned hardware debugging using ILA (Integrated Logic Analyzer) triggers.
The project I worked on was a hardware-software codesign of a multi-core Verilog simulator, which leverages the parallelism in circuit simulations and is aimed to be faster than most traditional cycle-accurate simulators like verilator. Because of the software part involved, I also learned about compilers and operating systems. I implemented a VCD (Value change dump) engine in hardware. It enables waveform analysis during debugging, just like Vivado or Modelsim. I worked on many RISC V architectures like PicoRV32, Rocket chip, VexRiscv, etc., and analysed their resource utilisation and timing constraints. I also implemented hardware benchmarks that compared our tool with other simulators like verilator. The benchmarks include the Smith-Waterman algorithm and systolic array-based weight stationary matrix multiplication.
Apart from the technical stuff, I had a lot of adventures and memorable experiences. I learned to cook food because the food in Switzerland is not spicy. Despite being my first time, my Indian friends liked my cooking. I also learned a bit of French. I went to Budapest, Evian, Amsterdam, Rome, and Paris, apart from many places within Switzerland, and in the process, made many good friends. Every trip was a different experience and indeed, a lot of fun. The terrific adventures of go-karting and zip lining still give me goosebumps. These have undoubtedly been the best days of my life. Travelling to most of Europe at such a young age, that too at my own expense, while doing the best work I can enjoy is what I am proud of and will never forget.