Undergraduate Research Initiative (ITCS 3050) - Spring 2023

Undergraduate Course, UNC-Charlotte, Computer Science Department., 2023

General Information

0. Lastest Status of 2023-Spring Cohort

In 2023 Spring, we received over 60 applicants and accepted 14 students. After a semester's work, we have achieved a lot:

  • 5 of our students are selected into OUR Summer Research Scholar Program during 2023 Summer.
  • One student is selected as SC23 student volunteer.
  • One student is accepted into SC23 immersion program.
  • One student submitted one poster to SC’23 Student Research Competition (SRC) and a SC'23 workshop paper (PMBS’23).
  • Four students were hired as Research Assistant (RA) during 2023 Summer.
  • Three students will be returned as Research Assistant (RA) in 2023 Fall.
  • Two students continue their research vis ITCS4990 independent study or capstone course.

1. Why are we doing this?

We want to encourage our Undergraduate Students to participate in research as early as possible. So, we are looking for Sophomore and Junior students.

To you, this could be your first exposure to research! You can learn interesting techniques and get to know another career/education path!

2. Who is doing this?

Faculty members in the Parallel High-Performance Computing Lab (PHPC) are doing this.

We are Tyler Allen, Dong Dai, Erik Saule, and Yonghong Yan. Our Ph.D. students and we will be mentoring your research.

In addition, Md. Hasanur Rashid (mrashid2@uncc.edu) will be our TA to interact with you during the semester.

3. How can I participate?

  1. Spend 2-mins to fill this Google Form to register: Registration Form (Deadline Dec. 15th).
  2. We will contact you In December to learn more about your background and interests.
  3. We will register you in Course ITCS 3050 in Spring 2023 for this course.

4. How will the class go?

  1. You will be matched to a research project.
  2. You will work with specific faculty and group.
  3. You will talk with Md. Hasanur Rashid (TA) biweekly to sync and complain.
  4. We will host occasional seminar talks.
  5. Flexible class time and location.
  6. The class may lead to Summer/Fall RA positions!
  7. Outcome of these projects include software artifacts and potential publications, which can be listed in your CV.

5. What are the Research Projects?

Our mentors are currently working on the list of research projects listed below. You will have the choice to pick the projects you are interested in and participate in. You can also propose your projects as long as your mentors agree.

Project 1: Fast GPU Programming!

Applications requiring large amounts of computational resources, such as climate modeling or deep learning, often turn to General-Purpose Graphics Processing Units (GPUs) to accelerate their algorithms. These applications frequently use out-of-the-box computational libraries, such as Basic Linear Algebra Subprograms (BLAS), often lose efficiency due to the loss of information between calls to library routines. The long-term goal of this project is to develop automated techniques to “unfold” these library calls and merge them, automatically applying significant optimization and performance gains. This has the potential benefit of speeding up scientific and deep learning applications across the world automatically!

Students working on this project will learn about performance benchmarking and optimization, GPU programming, GPU architecture, and compiler optimization.

Project 2: Accelerate Key Algorithms!

Low Rank Matrix Factorization is an important technique in Data Science and Machine learning topics, such as building Recommender Systems. Several methods for this technique exist, but a common roadblock for large-scale and highly accurate systems is computation performance of these Matrix Factorizations. Iteratively Reweighted Least Squares (IRLS) method for matrix factorization can be improved by highly efficient computation accelerators, such as General-Purpose Graphics Processing Units (GPUs). In this project, we will take steps towards creating broadly-reaching accelerated Matrix Factorization implementations; perhaps the fastest in the world!

Students working on this project will learn about performance benchmarking and optimization, computational techniques in data science, GPU programming, and GPU architecture.

Project 3: Visualize Memory Accesses!

The fastest supercomputers in the world are only able to achieve as much as 3% of their maximum performance on many important applications. This is due to memory requirements and communication. These systems and architectural processes are often very difficult to comprehend and understand. This project involves developing visualization tools and techniques that can help us create graphical representations of data access and memory migration over time for heterogeneous systems. These visualizations could improve the understandability of data flow, data migration, remote data access, and overall application access patterns for arbitrary applications. Systems programmers and architecture designers would greatly benefit from novel ways to explore the behavior of their own systems, and help design solutions that put the “Super” back in “Supercomputer!”

Students working on this project will learn about computing and memory architecture, visualization, and high-performance computing.

Project 4: Machine Learning-based Parameter Tuning!

This project aims to understand the general High-Performance Computing (HPC) environment and the CAPES framework. The student will learn the basics of the High-performance Computing (HPC) environment and Parallel File System (PFS), specifically Lustre. The student will attain proficiency in how to create and maintain an HPC cluster. The student will get to explore how parameter tuning works and acquire knowledge on how to conduct structured and in-depth evaluations.

Project 5: Understand Job Execution in SuperComputers!

The goal of this project is to understand how Supercomputers or Cloud run jobs internally. For instance, how might different jobs be submitted to Supercomputers? How are these jobs scheduled to run? What has to be done to make sure jobs can run efficiently without wasting the hardware? These are interesting and critically important questions to answer. In this project, the student will get familiar with these topics in a quantitive way. We will use some high-fidelity simulators to study how jobs are executed in large-scale environments accurately and efficiently.

Project 6: Bringing High Performance Computing to Gephi!

Gephi is an open source tool for interactive graph visualization and analysis. While Gephi is a useful tool, the analysis it provides usually has simple implementations leading to low performance and high response time, in particular for analysis of high complexity. In this project, we will develop a plugin for Gephi to enable users to leverage existing codes and techniques to bring high performance computing to analysts.

Project 7: Stupid Compilers!

One kind of redundant instructions are those that do not change the operands of the instruction, for example an instruction that adds or subtracts 0, or an instruction that multiplies or divides 1. In this project, the students will learn how to use tools to perform analysis of compiler internal representation (IR) or binary code of a program to identify those kinds of instructions. Then they will explore how to use tools to rewrite the IR program or binary code to remove those instructions.

Project 8: Learned Data Structure!

Recent advancement in "learned indexes" has changed how we look at the decades-old indexing data structures (e.g., B+-tree) we have been taught in the Data structure courses. The key idea is that indexes can be thought of as "machine learning models" that predict the position of a key in the data structure. However, all the known "learned index" studies are tested on limited workloads (e.g., key-value) and missing some important workloads such as graph-structured datasets. In this study, we want to investigate how existing "learned indexes" perform on graph workload and compare it with state-of-the-art heuristic-based data structures for dynamic graphs.

Frequent Questions

0. Do I need to do a lot pre-studying for this course?

No, we will try to match your project to your skill background. You will mostly learn while working in the project.

1. Whether will multiple students be collaborating on the same project?

In most of the case, students will work with their mentors individually. It is OK to build a team though.

2. Whether the students need to set up their own machines to work on the research project?

It depends on the project. In most of the cases, we will provide computing resources. PHPC lab hosts local clusters and also leverages UNCC Research Computing facility to conduct research.

3. How will the course be structured?

  • First 1-2 Weeks: Faculty members and Ph.D students introduce the projects. Students match with projects.
  • During Semesters: Students work with their mentors during the semester via Weekly Meeting. There will be occational sessions to talk about specific topics, such as How to use terminal; How to read a paper; How to prepare a poster.
  • Last 1-2 Weeks: There will be a poster/presentation session at the end of the semester.

4. How the workload looks on per weekly basis for the project?

The workload should be similar to a normal 3-credit UG course with the flexibility that you can move really fast at your pace.

5. Whether the student will need to deliver a final presentation?

Yes, there will be a poster/presentation session at the end of the semester.

6. Will the students get the chance to learn about relevant concepts before starting the project?

Yes, doing the project itself includes learning phase at beginining.

What are you waiting for? Join us by filling this Registration Form!