Friday, February 13, 2015

Opinion Piece: Teaching HPC to Undergraduates

Teaching high performance computing concepts to undergraduate students is one of the most important tasks of HPC educators and researchers in Latin America. An early exposure and a thorough instruction would not only help train future researchers and technicians to work on computational challenges of our society, but also enhance labor for areas such as embedded, real-time, and distributed systems. All students should graduate with enough knowledge to be able to develop a performing parallel program to run on one of the many parallel platforms that surround us, be it a mobile phone or a supercomputer.

Students should be instructed in three different fronts: parallel architectures, parallel programming, and software optimization. Several of the concepts that they involve are not difficult to grasp, and students around the second year, with basic programming skills and computer architecture knowledge, could start learning them.
  • Parallel architectures are the basic platforms for HPC. Students from at least the second year and beyond should start learning about multithreading, multicore processors, accelerators, and clusters. This knowledge would help people to evaluate the machine requirements for certain applications, and to guide software development decisions.
  • Parallel programming is required to fully utilize parallel platforms. Parallel programming concepts should be presented in introductory programming classes to avoid restraining students to a sequential mentality, while advanced parallel constructs, languages, and frameworks could be left to the second half of a degree. Courses should not restrict themselves to OS ideas of concurrent programming (threads and processes, synchronization and mutual exclusion) but embrace modern APIs and high-level programming models. 
  • Software optimization comes to improve the integration of parallel programs and architectures. Advanced algorithms and code optimization classes can be left to a degree's last years, but should not be left out. This would ensure that graduates are qualified to make full use of the resources they are given and can lead the development of new software solutions.
One of the main issues for teaching and learning HPC is the time needed to discuss all of these themes, as they cannot be confined to a single course. In this sense, subjects would have to be spread around different courses, with some coordination between instructors required. Nevertheless, such reform should not be stopped just because it is laborious.

Another common issue in Latin American universities is the absence of high performance platforms to run undergraduate students' experiments. This problem could be circumvented by putting together clusters with old or cheap single-board computers with students. Another solution would be to run experiments on commercial clouds.

Finally, exposure to HPC should not be limited to the classroom. Summer courses and tutorials, nearby conferences and small events, parallel programming competitions... all play a role in bringing people in and growing HPC in Latin America.

No comments:

Post a Comment