cucapra / undergrad-research

file issues here if you're interested in doing research with us!
https://capra.cs.cornell.edu/ugresearch.html
0 stars 0 forks source link

Parth Sarkar #119

Closed parthsarkar17 closed 7 months ago

parthsarkar17 commented 9 months ago

Note. Before applying, make sure you can receive notifications from Github. Once you apply, make sure you're subsribed to receive emails when someone responds to the issue. We will respond to your application on Github first so it's important that you receive notifications to it and respond quickly.

We are thrilled that you're interested in research in our research group! Please fill out this issue template. When you submit it, we will get a notification in our group chat. Please include any relevant details you can think of! Here are examples of filled out templates for reference.

For active projects in our group, take a look at our group website.

Personal Details

Name: Parth Sarkar

Major: Computer science, Math

Year in Cornell & Expected graduation date: 3rd year, May 2025

Relevant classes: CS 2110, CS 3110, CS 3410, CS 4820 (Intro. Algorithms), CS 4220 (Num. Analysis), CS 4780 (Machine Learning), Math 3110 (Real Analysis), Math 4330 (Hon. Lin Alg), Math 4710 (Basic Probability.)

Interested in continuing research during the summer? Yes

Expertise (languages/frameworks/etc.): Python, OCaml, C, Julia, Java, MATLAB, LaTeX, Bash.

My experience in Python is mainly through my project team work at CUAir, in which I built scripts to generate synthetic data for and train models to help during our competition, along with a larger project to stitch aerial images together and form a cohesive map out of them based on GPS location and plane orientation. My OCaml proficiency is from coursework in CS3110, where my group implemented our version of Shogi. Beyond the classroom, I provided consulting for CS3110 during the fall semester (FA23) and am currently preparing to serve as a TA in the upcoming spring semester (SP24). I've also explored aspects of Real World OCaml in my personal projects. I gained experience in Java through CS2110 and CS4820 coursework. My Julia experience is both from CS4220 and from a personal project, in which I derived backprop rules for a toy neural net and implemented them. My MATLAB experience is from my internship at MathWorks this past summer, where I worked on the optimization toolbox team to set up a testing framework for MATLAB function optimizers. My LaTeX experience is from several classes and a personal project (where I wrote up the derivation that I discussed earlier, along with its explanation for my project team, as a part of a new-recruit onboarding module). Lastly, my C and Bash experience is from CS3410, from a buffer overflow, RISC-V interpreter, and cache simulator projects.

Research

When do you want to do research? (Researchers can get involved during the semester as an "extracurricular", equivalent to a 3-4 credit class, or get more involved over the summer as a full-time job.)

I’d like to do research during the Spring 2024 semester, and I would love to continue through the summer.

What is exciting to you about research? (How did you get interested in it? What are you hoping to get out it?)

I first got involved with research the summer following my freshman year in a bioinformatics group at Hunter College in NYC, where we studied how a new encoding approach for drug-molecule structure and patient profiles correlated with indicators of patient response. I loved my experience because it involved producing solutions to problems that could tangibly benefit people. After choosing an important problem, the process of attempting to solve it includes a combination of understanding the limitations of existing methods and the benefits of improved ways of solving the problem. My project provided an opportunity to apply concepts learned both inside and outside the classroom to a novel and impactful problem.

The full process of considering problems to solve, reasoning about and creating new ways of solving them, and eventually developing a beneficial result is exactly why I’m excited by research. If accepted, I’d love to work closely with compiler algorithms and to understand the ways that the syntax of a language enables interesting and important functionality, particularly in the context of hardware design.

What kind of research do you want to do? (It's OK to say, "I don't know; I'm looking to explore!")

I got introduced to the kinds of work that Capra does through the Filament and Calyx papers, so I’d be really interested in exploring the ways that hardware can be designed to be fast, concise, and correct, based on the tools that one could use along the entire process of generating equivalent low-level descriptions. For example, I’d love to work on Filament, since it’s a higher-level language that created its own notion of type safety and ownership to ensure correctness. Further down the chain, Calyx is compelling because it’s an intermediate language designed in a specific way to not lose out on hardware control flow information (like possible parallel tasks and necessarily sequential tasks) in order to generate faster and smaller hardware. I’ve never worked on compilers or hardware description languages before, so it’s a completely new field that I’d be grateful to have the chance to explore. Both of these areas go much further on topics I’ve enjoyed deeply in class, particularly verification and program analysis in CS3110 and CS4820, processor/hardware design in CS3410, and even the applications of designing such hardware in CS4220 (Numerical Analysis, Linear & Non-Linear eq.).

That said, I’d also be very interested in exploring other new areas of research. While I’m very new to programming languages, computer architecture, and their interactions, I find them incredibly fascinating and would love the opportunity to contribute to these areas in any way.

Background

Note: While these questions are optional for first & second year students, we highly encourage everyone to respond to them. Third & fourth year students are required to respond to all questions.

Was there a paper that particularly excited you? (This doesn't have to be a paper from our group.)

I took this application as an opportunity to read A Compiler Infrastructure for Accelerator Generators, and I was really excited by Calyx! It was incredibly fascinating to read how traditional methods of designing hardware at a higher level (high-level synthesis), rather than register-level languages, is limited by the actual syntax of the programming language used to describe the hardware. The fact that Calyx manages to fix this problem by introducing syntax that allows both the expression of control flow that is native to higher-level languages and the easy instantiation of modules representing hardware components, as expected of an HDL, is really exciting. It’s my first time seeing the way that a language’s syntax may sometimes not be rich enough to fully and easily capture desired semantics; it was even more fascinating to see the ideas behind developing syntax that is expressive enough to encode the desired information. Further, Calyx is an internal representation language, meaning it’s now possible to write hardware with even more abstraction, and, in particular, retain this new language’s semantics of “control flow” over the organization of processes. This lets us do cool things like making languages specific to designing one type of hardware, and making sure that a compiled description of this hardware is as efficient as possible.

Lastly, I was very excited to read how Calyx optimizes hardware descriptions. It was one of the first times that I’d seen applications of the structures and algorithms I had learned in class, specifically the generation of a conflict graph describing which groups of hardware are used in parallel (and hence cannot be reused in the design), which is then fed to a graph-coloring algorithm to find the minimum number of such groups needed. The eventual result of better-designed IR syntax and optimization techniques for hardware description is a set of fast and small hardware, which is precisely the result that users would want! I found the whole pipeline to be incredibly captivating.

Which of the current research projects would you be interested in working on and why?

Filament seems really interesting to me, and I’d love to contribute to it! I’m particularly interested in the novel, time-based type system, and how writing code using such a type system would make it easier to reason about structural hazards, while more broadly creating correct hardware. I’ve recently come to appreciate how language characteristics like type-systems and syntax may directly influence the experience that a programmer might have, with factors like ease of use, program verification, and even performance once executed. I’d be thrilled to learn more about parallels in languages made for hardware design, and perhaps even think of ways that Filament’s type-safety could be expanded to produce more correctness guarantees! However, again, hardware description is just one area I find interesting. I would also love to explore all of the projects at the intersection of programming languages and hardware that Capra has.

Anything else you want to tell us about yourself?

Non-technical: I like to run, cook, and bake! Especially pies :)

Technical: In the past, a good amount of my development and class experience has been focused on machine learning and optimization. They are still areas that I find very interesting, but I’m really looking forward to discovering new fields while at Cornell as an undergrad (or combining them with others!), and programming languages / compilers in particular seem really exciting. As someone who’s also into math, I’m really interested in seeing what’s possible through the intersection of my interests— and it’s even cooler when my work aligns with hardware and computer architecture. Thanks so much for considering!

Attach a CV/Resumé ParthResumeFA23.pdf

rachitnigam commented 9 months ago

Hey @parthsarkar17! Can you email me at rnigam@cs.cornell.edu and we'll set up some time to chat?