A set of assignments with comprehensive documentation to demonstrate multiple approaches to parallel programming in multi-core and many-core systems