Expanding Curricula for Parallel Computing Fundamentals in Computer Architecture and Hardware Courses
As parallel computing has become more common and accessible, the need for teaching concepts in parallel and distributed computing has increased. This need has been met in many universities, but only very recently. Currently, most approaches involve some sort of upper-level course devoted to parallel concepts, and this is often the extent of parallel computing instruction in many cases.
Pedagogically, it may be more beneficial to teach parallel computing in bursts within core computer science courses. This has been done and studied already to some extent, but usually just to introductory courses, such as a first level data structures course, for example. As for hardware and computer architecture courses, parallel computing lacks, and its presence may help with foundational understandings of parallel machines. That way, in more advanced parallel computing courses, students would ideally have a strong understanding of parallel computing fundamentals.
Developing parallel computing curriculum for hardware courses would contribute to a model that encourages parallel concepts in almost all computer science offerings. Such a model understands that parallel computing is foundational to computer science practices in industry and academia, so its education should be treated as such.
To study the potential benefits of including parallel curriculum in hardware courses, I will research the development of relevant curriculum to teach parallel computing in Marquette University's Hardware Systems course with the plan to pilot the material this upcoming fall (2018) semester. After the semester, the effectiveness of the curriculum will be measured. To assist teaching parallel concepts, the Embedded Xinu operating system will be employed to develop homeworks and labs in order for students to focus on parallel concepts instead of spending time building an application from the ground up.
Initially, I will seek to develop curriculum involving memory management as "parallelizing" problems is currently better covered in core computing courses. This will include deciding on a problem that bests lends itself to teach shared memory management. While I will not select something that is trivial, the objective is not to select a difficult problem as the focus should be on the interaction between cores. Assembly programming is difficult enough on its own that I do not want students to struggle on the assembly programming more than needed. After the problem is carefully tested by myself, I will meet with Dr. Debbie Perouli, the next professor set to teach Hardware Systems at Marquette University. Consulting with Professor Perouli will help me to develop lecture notes and assessments methods that best match her style. Finally, I will construct survey questions and methods to assess the effectiveness of this new teaching method. (Hopefully, students will opt to take the surveys...).
Urn problems are discrete math problems that concern themselves with randomly drawing objects out of an urn. One such problem is the coupon collector's problem. This problem in particular can be used to test psuedorandom number generators (PRNGs). The premise of the problem is as such: An urn contains n unique coupons. With replacement, someone draws coupons from the urn one at a time. This process is repeated until all n coupons have been drawn, and the number of attempts that it took to get every coupon is recorded. From a discrete math perspective, one may calculate the expected number of coupons drawn until all n coupons are held for a given n. However, if the distribution of the number of attempts to get all coupons for a given n is recorded, the problem can be used to test PRNGs. If the distribution is not as expected, then you don't have a good PRNG (assuming sufficient sample size).
The advantages of this problem are numerous. To begin, a few potential memory problems are present. Most basically, race conditions are created with naïve approaches to multi-core array access in shared memory. Further, if the memory model is not set up properly, there can be issues with cache coherency. Not only must memory be marked as shareable, but this shared memory must have the correct write back and read/write allocate policies. Failure to do so will cause unpredictable behavior.
Secondarily, the coupon collector's problem is conceptually easy to understand and implement. As programming in assembly is difficult already, a tough programming assignment distracts from the multi-core challenge. Finally, testing and implementing PRNGs fits well into existing curriculum at Marquette University. Besides being a relevant topic to most computer science students, Marquette students deal with cryptography in an Operating Systems assignment (often) in the semester following Hardware Systems.