<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="pt-BR">
	<id>http://wiki.nosdigitais.teia.org.br/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Juliostutz</id>
	<title>Pontão Nós Digitais - Contribuições do usuário [pt-br]</title>
	<link rel="self" type="application/atom+xml" href="http://wiki.nosdigitais.teia.org.br/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Juliostutz"/>
	<link rel="alternate" type="text/html" href="http://wiki.nosdigitais.teia.org.br/Especial:Contribui%C3%A7%C3%B5es/Juliostutz"/>
	<updated>2026-04-21T22:41:14Z</updated>
	<subtitle>Contribuições do usuário</subtitle>
	<generator>MediaWiki 1.39.0</generator>
	<entry>
		<id>http://wiki.nosdigitais.teia.org.br/index.php?title=Introduction_to_Parallel_Computing&amp;diff=7017</id>
		<title>Introduction to Parallel Computing</title>
		<link rel="alternate" type="text/html" href="http://wiki.nosdigitais.teia.org.br/index.php?title=Introduction_to_Parallel_Computing&amp;diff=7017"/>
		<updated>2012-10-09T23:04:00Z</updated>

		<summary type="html">&lt;p&gt;Juliostutz: /* Project 1 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is the main page of a graduate-level course in parallel computing being taught in 2012/2 at the Polytechnic Institute [http://pt.wikipedia.org/wiki/IPRJ IPRJ]/UERJ. It is generally useful for programmers at the advanced level in the fields of scientific and multimedia programming.&lt;br /&gt;
[[Imagem:Matrix6.png|right|550px]]&lt;br /&gt;
== General Info ==&lt;br /&gt;
* Instructor: prof. [http://www.lems.brown.edu/~rfabbri Ricardo Fabbri], Ph.D. Brown University&lt;br /&gt;
* Meeting times: Tues 12:30pm-2pm, Thursdays 2:20pm - 4pm&lt;br /&gt;
* Evaluation criteria: 1 quizz at the end of the term (60%), plus practical projects (40%).&lt;br /&gt;
* Forum for file exchange and discussion: [http://uerj.tk uerj.tk]&lt;br /&gt;
&lt;br /&gt;
=== Pre-requisites ===&lt;br /&gt;
* Linux - intermediate to advanced (will be reviewed as needed) - read [[Literatura recomendada pela equipe|Recommended Reading]]&lt;br /&gt;
* C/C++ - intermediate to advanced (will be reviewed) - read [[Literatura recomendada pela equipe|Recommended Reading]]&lt;br /&gt;
** [[Configuring Ubuntu for Programming]]&lt;br /&gt;
* Basic understanding of computer architecture - read  &amp;quot;Computer Systems: A Programmer's perspective&amp;quot; listed at [[Literatura recomendada pela equipe|Recommended Reading]].&lt;br /&gt;
&lt;br /&gt;
== Approximate Content ==&lt;br /&gt;
&lt;br /&gt;
The course focuses on software techniques for parallel computing.  We are aiming at a comprehensive treatment on different types of practical parallel programming techniques&lt;br /&gt;
* process-oriented parallel programming&lt;br /&gt;
* thread programming/thread safety&lt;br /&gt;
* single-core vector instructions&lt;br /&gt;
* multi-processor and multi-core programming&lt;br /&gt;
* mapreduce/hadoop&lt;br /&gt;
* MPI&lt;br /&gt;
* Cuda/OpenCL&lt;br /&gt;
&lt;br /&gt;
Each of the above techniques would merit a course of their own, as done in many of the best universities. Therefore we aim at attaining a practical familiarity with each, in the first half of the course, and we will specialize in the later part of the course as to help the students' graduate research.&lt;br /&gt;
&lt;br /&gt;
== Main Resources ==&lt;br /&gt;
&lt;br /&gt;
* Textbooks&lt;br /&gt;
** 1st part of the course: [http://kernel.org/pub/linux/kernel/people/paulmck/perfbook/perfbook.html &amp;quot;Is Parallel Programming Hard, and, if so, what can you do about it?&amp;quot; - Paul E. McKenney / IBM (editor)].&lt;br /&gt;
** For MPI: &amp;quot;An Introduction to Parallel Programming&amp;quot; , by Peter Pacheco[http://books.google.com.br/books?id=SEmfraJjvfwC&amp;amp;printsec=frontcover&amp;amp;hl=pt-BR&amp;amp;source=gbs_ge_summary_r&amp;amp;cad=0#v=onepage&amp;amp;q&amp;amp;f=false]&lt;br /&gt;
** For Cuda/OpenCL: Programming Massively Parallel Processors: A Hands-On Approach[http://books.google.com.br/books?id=qW1mncii_6EC&amp;amp;printsec=frontcover&amp;amp;hl=pt-BR#v=onepage&amp;amp;q&amp;amp;f=false]&lt;br /&gt;
** General textbook: A. Grama, A. Gupta, G. Karypis, V. Kumar, Introduction to Parallel Computing, Second Edition, Addison-Wesley, 2003.&lt;br /&gt;
** Algorithms-oriented textbook: Algorithms: sequential, parallel, and distributed, Kenneth A. Berman, Jerome L. Paul&lt;br /&gt;
*** For more theoretical info, see the chapter on parallel algorits in Cormen's classical algorithms book.&lt;br /&gt;
* Mapreduce, GFS, and Bigtable:&lt;br /&gt;
** Papers from Google&lt;br /&gt;
** http://code.google.com/edu/parallel/mapreduce-tutorial.html&lt;br /&gt;
** Wikipedia &lt;br /&gt;
** Hadoop documentation&lt;br /&gt;
* Presentations from IBM and Intel: Cilk, etc.&lt;br /&gt;
** http://software.intel.com/en-us/videos/channel/parallel-programming&lt;br /&gt;
* Wikipedia pages&lt;br /&gt;
** http://en.wikipedia.org/wiki/Vectorization_%28parallel_computing%29&lt;br /&gt;
** http://en.wikipedia.org/wiki/Mapreduce&lt;br /&gt;
** http://en.wikipedia.org/wiki/Hadoop&lt;br /&gt;
* Rice lecture notes on Parallel Computing [http://www.clear.rice.edu/comp422/lecture-notes/index.html]&lt;br /&gt;
* Other Resources&lt;br /&gt;
** http://www-users.cs.umn.edu/~karypis/parbook/&lt;br /&gt;
** http://www.cse.iitd.ernet.in/~subodh/courses/CSL860/&lt;br /&gt;
** Running Hadoop On Ubuntu Linux Multi and Single Node Cluster [http://www.michael-noll.com/tutorials/running-hadoop-on-ubuntu-linux-single-node-cluster/]&lt;br /&gt;
&lt;br /&gt;
=== Lectures ===&lt;br /&gt;
&lt;br /&gt;
''' NOTE: There will be no lectures from Oct 4 - Oct 19 2012'''&lt;br /&gt;
&lt;br /&gt;
==== Partial listing &amp;amp; Tentative Outline ====&lt;br /&gt;
# Overview of parallel computing: https://computing.llnl.gov/tutorials/parallel_comp/&lt;br /&gt;
# Review of Linux: &lt;br /&gt;
## See the book Running Linux from the [[Literatura_recomendada_pela_equipe| Recommended Reading]]&lt;br /&gt;
# Review of C/C++ (finished 28/Aug) &lt;br /&gt;
# Fundamental programming techniques: processes and threads&lt;br /&gt;
## Read The Unix Programming Environment for some classic multi-process programming[http://wiki.nosdigitais.teia.org.br/Literatura_recomendada_pela_equipe]&lt;br /&gt;
## What is a process: http://linuxgazette.net/133/saha.html&lt;br /&gt;
## 30/Aug: We'll be following the McKenney Book, ch 3 at the lab.&lt;br /&gt;
## Up to (and including) 18/Sept: We followed McKenney's code samples for counting algorithms and his Threading API in detail&lt;br /&gt;
### What is variable alignment: [http://www.songho.ca/misc/alignment/dataalign.html] [http://gcc.gnu.org/onlinedocs/gcc-4.0.4/gcc/Type-Attributes.html]&lt;br /&gt;
### How to determine the cache line size for your machine: [http://stackoverflow.com/questions/794632/programmatically-get-the-cache-line-size]. This will give you better results for threading algorithms.&lt;br /&gt;
### Install some documentation useful for POSIX threading:  sudo apt-get install glibc-doc manpages-posix-dev&lt;br /&gt;
## 20/Sept: Finished statistic counters and showed how to read assembly language generated by GCC, and how to disassemble binary objects&lt;br /&gt;
## 25/Sept: Finished theoretical thread content for the course: up until ch. 5 of McKenney's Book + Semaphores + Thread Safety. &lt;br /&gt;
### Homework 2 (see below)&lt;br /&gt;
# Cuda/OpenCL (02/Oct)&lt;br /&gt;
## Project 1 handout (see below) due Oct. 23&lt;br /&gt;
# Mapreduce/Hadoop&lt;br /&gt;
# MPI&lt;br /&gt;
&lt;br /&gt;
== Homework ==&lt;br /&gt;
=== Homework 1 ===&lt;br /&gt;
Our insitute is planning on buying a supercomputer. Therefore, our first homework will consist on studying these systems in detail.&lt;br /&gt;
&lt;br /&gt;
* The class shall be divided into groups of 2 people.&lt;br /&gt;
* Each group must pick one top 500 (http://www.top500.org) supercomputer and write on this wiki:&lt;br /&gt;
** Team number:&lt;br /&gt;
** Supercomputer:&lt;br /&gt;
&lt;br /&gt;
* Each class will start with a 20min presentation from a '''random''' group (or a volunteer group).&lt;br /&gt;
* A handout must also be provided on Tue August 28&lt;br /&gt;
* Your project must not be a plain copy from wikipedia!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Contents of the presentation and report&lt;br /&gt;
* Overview of the system&lt;br /&gt;
* Glossary of terms&lt;br /&gt;
* '''How to program for the system'''&lt;br /&gt;
* Software infrastructure&lt;br /&gt;
* How does this differ from a conventional cluster.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Groups'''&lt;br /&gt;
&lt;br /&gt;
* Team 1: Julio Stutz &amp;amp; Joel Sanchez  &lt;br /&gt;
** Supercomputer: '''Tupã''' (Inpe/Brazil) ([http://www.lems.brown.edu/~rfabbri/stuff/parallel-computing/supercomputers/julio-sanchez/tupa4-supercomputer-report.pdf report]) ([http://www.lems.brown.edu/~rfabbri/stuff/parallel-computing/supercomputers/julio-sanchez/tupa4-supercomputer-presentation.pdf slides])&lt;br /&gt;
* Team 2: Claudir Oliver &amp;amp; Luiz Rosalba&lt;br /&gt;
** Supercomputer: '''Tianhe-1A''' (China) ([http://www.lems.brown.edu/~rfabbri/stuff/parallel-computing/supercomputers/claudir-luiz/tian-he-report.pdf report]) ([http://www.lems.brown.edu/~rfabbri/stuff/parallel-computing/supercomputers/claudir-luiz/tian-he-presentation.pdf slides])&lt;br /&gt;
* Team 3: Mateus Guida&lt;br /&gt;
** Supercomputer: '''Sequoia''' (Laborátório Nacional Lawrence Livermore - Califórnia - EUA) ([http://www.lems.brown.edu/~rfabbri/stuff/parallel-computing/supercomputers/mateus-guida/sequoia-supercomputer-report.pdf report]) ([http://www.lems.brown.edu/~rfabbri/stuff/parallel-computing/supercomputers/mateus-guida/sequoia-supercomputer-presentation.pdf slides])&lt;br /&gt;
* Team 4: Lyvia Aloquio &amp;amp; Stella Oggioni &lt;br /&gt;
** Supercomputer: '''Grifo04''' (PETROBRAS/Brazil)&lt;br /&gt;
* Team 5: Ricardo Dias&lt;br /&gt;
** Supercomputer: '''Mole-8.5''' (Institute of Process Engineering, Chinese Academy of Sciences/China) ([http://www.lems.brown.edu/~rfabbri/stuff/parallel-computing/supercomputers/ricardo/mole-supercomputer-report.pdf report]) ([http://www.lems.brown.edu/~rfabbri/stuff/parallel-computing/supercomputers/ricardo/mole-supercomputer-presentation.pdf slides])&lt;br /&gt;
* Team 6: Frederico Santos&lt;br /&gt;
** Supercomputer: '''Helios''' (International Fusion Energy Research Centre (IFERC), EU(F4E) - Japan Broader Approach collaboration) ([http://www.lems.brown.edu/~rfabbri/stuff/parallel-computing/supercomputers/frederico-santos/helios-report.pdf report])&lt;br /&gt;
* Team 7: Thiago&lt;br /&gt;
** Supercomputer: '''Pleiades''' - NASA/Ames Research Center/ NAS - United States.&lt;br /&gt;
&lt;br /&gt;
=== Homework 2: limit counters ===&lt;br /&gt;
Describe the limit counter implementations of sec. 4.3 in McKenney's Book, answering: &lt;br /&gt;
# list and explain the advantages of each counter&lt;br /&gt;
# explain the main concepts of each method in your words&lt;br /&gt;
Due date: Oct 1 (was: Sept 27)&lt;br /&gt;
&lt;br /&gt;
=== Project 1 ===&lt;br /&gt;
* The class will be divided into interest groups&lt;br /&gt;
* The interest groups will each pick one of the following technologies or else propose another one of their liking. &lt;br /&gt;
** mapreduce/hadoop&lt;br /&gt;
** MPI&lt;br /&gt;
** Cuda/OpenCL&lt;br /&gt;
** Hybrid technologies (Distributed + Cuda)&lt;br /&gt;
** Languages designed for concurrency: [http://golang.org Google Go], Erlang, etc.&lt;br /&gt;
** Programming for the Playstation 3 parallel architecture[http://groups.csail.mit.edu/cag/ps3/index.shtml]&lt;br /&gt;
** Proposta : OPENGL/GLSL &lt;br /&gt;
* The project will consist in a series of presentations by the group members individually.&lt;br /&gt;
* Grade will be asigned to each presentation individually&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Groups to Project 1'''&lt;br /&gt;
&lt;br /&gt;
* MPI: Claudir Oliveira (Apresentacao: 23/10/2012)&lt;br /&gt;
* Hybrid technologies (Distributed + Cuda): Ricardo Dias&lt;br /&gt;
* Cuda/OpenCL: Joel Sanchez&lt;br /&gt;
* OPENGL/GLSL : Luiz Rosalba ( se aceito )&lt;br /&gt;
* mapreduce/hadoop : Julio Stutz&lt;br /&gt;
&lt;br /&gt;
=== Project 2 ===&lt;br /&gt;
* This project will consist on a practical programming problem from the student's research. The student is required to describe a problem from his research and present a parallel implementation of some aspect of it. &lt;br /&gt;
* This will be evaluated through actual code and acompanying monograph.&lt;br /&gt;
&lt;br /&gt;
=== Class exercies ===&lt;br /&gt;
# In-class assignment (extra .1 in the final test): Compare 3 different implementation of statistic counters: array of per-thread variables, eventuallly consistent counter and GCC __thread variables&lt;br /&gt;
## Only '''Julio Stutz''' scored the extra +0.1 on the final exam.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Keywords ===&lt;br /&gt;
Portuguese: Programação Paralela, Introdução à Computação Paralela&lt;br /&gt;
&lt;br /&gt;
[[Category:Lab Macambira]] [[Category:IPRJ]]&lt;/div&gt;</summary>
		<author><name>Juliostutz</name></author>
	</entry>
</feed>