===== SPM A.A. 2011-2012 : support material ===== ==== Previous year material ==== [[sdpm10support|Link]] to the old page. ==== Suggested reading ==== These are texts that may be consulted as support to different parts of the course: * POSIX syscalls: Stevens "Advanced programming in the Unix Enviroment" Addison Wesley + Stevens "UNIX Network programming", Prentice Hall. ==== Course notes ==== The notes of the course will be made available in electronic form this year. The notes will cover all the arguments of the course, but the final part on the wireless and peer to peer arguments. These latter arguments will be covered by Chapters from the Kurose Ross //Computer Networking: A Top-Down Approach//. I'm upgrading the material relative to last year course notes. Therefore, on the links below you'll find both last year version of the notes, with fixes of the errors I found in the (paper) version distributed during spring 2011, as well as the parts relative to the new version of the notes, as soon as these will be available. ^ What ^ Version ^ PDF ^ | Full notes | 2010-2011 version, with errors fixed | [[http://backus.di.unipi.it/~marcod/SPM1011/CourseNotes1011.pdf|PDF]] | | Introduction, Chapters 1 and 2 | 2011-2012 version | [[http://backus.di.unipi.it/~marcod/SPM1112/Notes_Pre_Ch1_Ch2.pdf|PDF]] | | FastFlow Chapter | 2011-2012 DRAFT version | [[http://backus.di.unipi.it/~marcod/SPM1112/ff_tut.pdf|PDF]] | | Errata corrige ff_misd.cpp in FastFlow tutorial chapter | 2011-2012 DRAFT VERSION | [[http://backus.di.unipi.it/~marcod/SPM1112/misd.pdf|PDF]] | | Design Pattern Chapter | 2011-2012 DRAFT version (NEW: replaces former chapter on design patterns) | [[http://backus.di.unipi.it/~marcod/SPM1112/patterns.pdf|PDF]] | | Complete version 2012 (without the DRAFT gray word across pages) | 2011-2012 DRAFT version | [[http://backus.di.unipi.it/~marcod/SPM1112/main28may12.pdf|PDF]] | ==== Skeleton programming frameworks ==== The home pages of the skeleton programming frameworks mentioned and used within the course are accessible through the following links: * Java based programming frameworks * Skandium [[http://skandium.niclabs.cl/|home page]] * C/C++ based programming frameworks * FastFlow [[http://calvados.di.unipi.it/dokuwiki/doku.php?id=ffnamespace:about|home page]] and [[http://sourceforge.net/projects/mc-fastflow/|source forge home]] * SkeTo [[http://sketo.ipl-lab.org/|home page]] * Muesli [[http://www.wi.uni-muenster.de/pi/forschung/Skeletons/index.html|home page]] * SkePu [[http://www.ida.liu.se/~chrke/skepu/|home page]] * The thesis by Usman Dastgeer //Skeleton Programming for Heterogeneous GPU-based Systems// is available from the Linkoping Univ. [[http://liu.diva-portal.org/smash/record.jsf?pid=diva2:437140|web site]]. * A short version of the thesis with the introductory chapters only is available {{:magistraleinformaticanetworking:spm:skepuintro.pdf|here}}. The skeleton frameworks more commonly used within the projects are summarized in the following section, with more pointers and material. ==== Design patterns material ==== * [[http://www.amazon.com/Design-Patterns-Elements-Reusable-Object-Oriented/dp/0201633612|Amazon pointer]] to //Design Patterns: Elements of Reusable Object-Oriented Software// book by Erich Gamma, Richard Helm, Ralph Johnson, John M. Vlissides (this is not relative to "parallel" patterns, actually) * [[http://www.amazon.com/Patterns-Parallel-Programming-Timothy-Mattson/dp/0321228111|Amazon pointer]] to //Patterns for Parallel Programming// by Mattson, Sanders and Massingill, this is the book of parallel design patterns mentioned during the lessons * Parallel design pattern [[http://www.cs.uiuc.edu/homes/snir/PPP/|resource page]] * [[http://www.cs.uiuc.edu/homes/snir/PPP/design/massingill.pdf|1]] [[http://www.cs.uiuc.edu/homes/snir/PPP/design/massingill2.pdf|2]] [[http://www.cs.uiuc.edu/homes/snir/PPP/design/massingill3.pdf|3]] [[http://www.cs.uiuc.edu/homes/snir/PPP/design/massingill4.pdf|4]] : pointers to papers by Massingill et al. illustrating parallel design patterns. ==== Most popular frameworks in SPM course (project) ==== === FastFlow === FastFlow is a C++ skeleton programming framework targeting shared memory architectures. It will be used within the course as one of the reference programming environments. A chapter detailing FastFlow usage (kind of "handson" gentle introduction") will be included in the Course notes. FastFlow online documentation is available at the [[http://calvados.di.unipi.it/dokuwiki/doku.php?id=ffnamespace:about|FastFlow home page]]. The current version of the programming framework may be downloaded from [[http://sourceforge.net/projects/mc-fastflow/|sourceforge]] (follow tab "Develop". You'll find here the command needed to checkout the last version from the sourceforge SVN, which is usually more up to date than the version provided through tar.gz files from the same web site. Once downloaded, please consider issuing quite often an "svn update" from the FastFlow download directory to update last changes. == Sample programs == Sample programs used to introduce the programming framework: * HelloWorld with [[ffhwpipe|pipelines]] * Heratosthene's [[ffsieve|Sieve]] * Sample [[fffarms|farms]] == Tutorial == A tutorial discussing how to use FastFlow has been prepared as part of the course notes. The PDF of this appendix to the course notes is available [[http://backus.di.unipi.it/~marcod/SPM1112/ff_tut.pdf|here]]. == MISD skeleton (draft) == During the course lessons, we showed how the farm template in FastFlow may be specialized to implement other skeletons. In particular we we discussed a MISD (Multiple Instruction Single Data) skeleton, processing each item of the input stream by //n// different functions and returning a tuple with the //n// results computed. The FastFlow code for this skeleton is shown in the code on this [[http://backus.di.unipi.it/~marcod/PhD12/ff_misd_allgather.cpp|link]]. == Using SkePu to support GPUs == Sample FastFlow using a SkePU map stage is shown [[http://didawiki.cli.di.unipi.it/doku.php/magistraleinformaticanetworking/spm/skepu_ff|here]]. == Targeting COW/NOW == The original experimental version targeting clusters and presented in the lesson of M. Torquati has been included in the version available through the sourceforge SVN [[http://sourceforge.net/projects/mc-fastflow/develop|sourceforge SVN]]. === Skandium === Skandium is the Java based skeleton based programming framework by Mario Leyton, targeting multicore architectures. The Skandium [[http://skandium.niclabs.cl/|web page]] hosts sample code and documentation as well as links to download the source and compiled framework code. The Skandium material may also be found on a GIT repository as well at the side [[https://github.com/mleyton/Skandium|github.com/mleyton/Skandium]]. A clone of the original Skandium web site (as of 2012, May 31) has been installed on [[http://backus.di.unipi.it/~marcod/SkandiumClone/skandium.niclabs.cl/index.html|http://backus.di.unipi.it/~marcod/SkandiumClone/skandium.niclabs.cl/index.html]] The version 1.0b2 of Skandium is accessible also via the following links: * [[http://backus.di.unipi.it/~marcod/SPM1112/skandium-1.0b2.jar|skandium-1.0b2.jar]] * [[http://backus.di.unipi.it/~marcod/SPM1112/skandium-1.0b2-src.jar|skandium-1.0b2-src.jar]] * [[http://backus.di.unipi.it/~marcod/SPM1112/skandium-1.0b2-examples.jar|skandium-1.0b2-examples.jar]]