Chameleon for Education: IIT’s Intro to Parallel Programming

Interested in using Chameleon for education? Illinois Institute of Technology’s TA and PhD candidate Melanie Cornelius and Dr. Zhiling Lan use Chameleon for undergraduate and graduate students in their Intro to Parallel Programming and Parallel and Distributed Processing classes. Learn all about how the course is structured, incorporating Chameleon into assignments, and tips for using Chameleon for education.


Other resources the Chameleon team has created for those interested in using Chameleon for educational purposes or just beginning to explore Chameleon can be found here: 

  • A blog post to help you or your students get started using Chameleon: how to launch artifacts on Trovi (perfect for classes!), where to find pre-packaged experiments by the Chameleon team on basic topics - orchestration, machine learning, setting up Chameleon resources, networking - and ~5 min YouTube videos for select packaged experiments.

  • An older blog post with similar information as the previous link, enumerating each of the pre-packaged experiments and getting started tutorials available on Trovi.

  • An Introduction to Chameleon YouTube video: For students just learning how to use Chameleon, this video walks through making a reservation, setting up keys and logging in.


On the classes using Chameleon: 

We’re using Chameleon for an Intro to Parallel Programming course (graduate and undergraduate students) and the CS546 Parallel and Distributing Processing class (graduate students) at the Illinois Institute of Technology. 

Prior to taking the CS546 course, students have some familiarity with programming in C/C++, linux tools and the development environment and basic concepts of computer architecture. Students design and code a CUDA-C/C++ version of a matrix normalization algorithm. The sequential version of this code is provided, and students must use CUDA-C/C++ to complete the program, then compare results between their parallelized version and the provided sequential code.


Additionally, students complete a term project along similar lines. Here, students implement 2D matrix convolution using MPI send/recv, MPI collectives, and task/data parallelism. The point here is to compare parallelization techniques and communication strategies - with the hope that this will give students a practical understanding of the tradeoffs with each.
In both the assignment and project, students use Chameleon resources to run their tests (so the graders can compare results directly).


On how long Chameleon has been used:

We use Chameleon for the two classes mentioned above and have used it for 3 semesters now.


On recommendations for professors using Chameleon to teach a class: 

There are a couple of things, some maybe sound negative but aren’t intended so - they’re just good to keep in mind when using this for teaching:

  1. If your students need a specific resource (like a GPU) there will be resource contention, especially if students procrastinate, consider encouraging students to plan in advance or creating a schedule for student time on the machines. 

  2. Consider a pre-assignment that just has students make a reservation and log in, this can present several hurdles for students who have never used remote machines or schedulers before.

  3. Consider walking through making a reservation, setting up keys, and logging in while in class, or doing so in a recording. Chameleon offers various videos on the Chameleon YouTube channel which students can follow to get started.

  4. Link students to the extensive Chameleon docs, they can be hard to reach from the Chameleon website.

  5. Make known the differences between the different kinds of allocations with Chameleon (bare metal, virtual machines, etc) if they exist.


On testbed needs for class instruction:

Here, we mostly make use of the visual resource scheduling system (so students can see when they will have a machine available) and the GPU nodes.




Dr. Zhiling Lan & TA Melanie Cornelius

On herself:

I’m a PhD candidate at the Illinois Institute of Technology going for a doctorate in computer science / computer architecture. I’ve been at this stage for 2 years now following an undergraduate (in physics) and a MS in computer science. I took a small amount of time during the MS degree to work in two different corners of industry, one a very standard startup and the other a hemorrhaging-edge tech company. But by far, my favorite part of my job is teaching college students and doing research. I did it voluntarily as an undergrad, teaching fellow physics majors to use python, linux, and git. And now, I get to work with Dr. Lan’s classes as her lab instructor and TA. I love it! I enjoy working hard to make information accessible to a range of learning styles and backgrounds, and it’s challenging to find the right balance of provided material and experience-driven work. It’s fascinating to me. So, I went back for the PhD in the hopes I can successfully earn it and become a professor of CS doing research.

My hobbies are pretty simple, as I have kids - the tiny people are pretty much all of my hobbies. I garden a lot, and I sometimes sew or crochet. Mostly, I work and hang out with my kids, who are very little and full of wonder. I’m very, very fortunate to be doing what I love, all while having a family, under a wonderful adviser, Dr. Zhiling Lan. She’s a fascinating woman who is endlessly supportive, endlessly knowledgeable and invested in the field, and a stellar editor of papers.


On staying motivated through a long project:

I stay motivated by not relying on motivation, honestly. Motivation, for me, is very short-lived. Like many people drawn to research, I’m very able to get excited and into a new topic - but that wave of interest is often short-lived. I’m learning all the time about discipline and how to be better at it.

I keep a planner, and I try to be diligent about it. I try to forgive a “bad day”, where I don’t get much done or get discouraged about research, and just move on - dwelling only makes another bad day happen. Mostly, I set hard lines around my work schedule and try not to go outside those lines more than 2 times a week. If it’s a Sunday, unless something really, really needs to get done, it gets put off to Monday. And if I take a day off, I take it off. I also do a lot of exercise. I’m an awful athlete, but being disciplined about doing a yoga class or something 5 times a week is like a training regime for being disciplined about working hard while working from home.

But it’s a struggle to remain disciplined, and I think it’s normal for it to be.


On researchers she admires: 

My adviser, Dr. Zhiling Lan, is someone I admire. She reads papers constantly, so she’s always up to date on which journals are focused on what, which formats like this or that styling or phrasing, and she’s one heck of an editor. She has a laser-focused eye for concise detail, and I’ve learned so much about writing papers for publication under her. And she’s so disciplined about her work - she works at specific times like clockwork, and I’ve learned so much from her about how to balance a schedule and not take on too much while still being challenged. Dr. Lan is a mom, a married partner, a successful academic, and an attentive, compassionate instructor. I look up to her enormously and try to learn from her all the time.


On her most powerful piece of advice: 

Anything worth doing is worth half-assing.

Seriously. Perfection is the enemy. Just get it done, and learn when to let go of perfection (and when to insist on it) - there’s almost always time to make it perfect later.


Interested readers can explore the following class resources: 

The project and assignment done on Chameleon for the graduate student class are linked and the course websites are as follows: 

Add a comment

No comments