Convert tree_broadcast.pdf assigment to XHTML.
authorW. Trevor King <wking@drexel.edu>
Tue, 14 Sep 2010 15:03:55 +0000 (11:03 -0400)
committerW. Trevor King <wking@drexel.edu>
Tue, 14 Sep 2010 15:03:55 +0000 (11:03 -0400)
assignments/archive/tree_broadcast.pdf/assigment.pdf [deleted file]
assignments/archive/tree_broadcast/index.shtml
assignments/archive/tree_broadcast/index.shtml.2007.10.shtml [new file with mode: 0644]
assignments/current/4
assignments/index.shtml

diff --git a/assignments/archive/tree_broadcast.pdf/assigment.pdf b/assignments/archive/tree_broadcast.pdf/assigment.pdf
deleted file mode 100644 (file)
index 5cdd758..0000000
Binary files a/assignments/archive/tree_broadcast.pdf/assigment.pdf and /dev/null differ
index 81b8e1b5da48076030030288db1498028faec96e..ea5718132697c3939c23e74002501fab5c09754f 100644 (file)
@@ -1,83 +1,61 @@
 <!--#set var="root_directory" value="../../.." --><!--#include virtual="$root_directory/shared/header.shtml"-->
 
-<h1>Assignment #3</h1>
-<p><em>Due Friday, October 26, 2007</em></p>
+<h1>Assignment #4</h1>
+<p><em>Due Friday, October 23, 2009</em></p>
 
 <h2>Purpose</h2>
 
-<p>To learn how to implement truly parallel algorithms.</p>
+<p>Learn how to implement a truly parallel algorithm.</p>
 
-<h2>Setup</h2>
+<p>Note: Please identify all your work.</p>
 
 <p>This assignment consists in building your own broadcast code based
-on a binary tree. The code <a href="src/print_tree.c">print_tree.c</a>
+on a binary tree. The code
+<a href="../../../content/global_operations/src/print_tree.c">print_tree.c</a>
 provides a simple implementation of a binary tree based on node zero
 as being the root. It generates the node numbers from which any node
 is to receive the information and to which to send this
 information.</p>
 
-<h2>To do</h2>
+<h2>Part A</h2>
 
-<h3>Part A</h3>
+<p>Write a function <code>My_Bcast()</code> that performs a broadcast
+similar as the one provided by MPICH2. It should follow the same
+syntax as <code>MPI_Bcast()</code>, namely</p>
 
-<ol>
-  <li>Build a broadcast function based on the skeleton code
-    <a href="src/print_tree.c">print_tree.c</a>.</li>
-  <li>Call this function <code>my_broadcast()</code> with a calling
-    sequence
-    <pre>int my_broadcast( int my_rank, int size, int root, double *msg, int count )</pre>
-    In other words, restrict it to only <code>double</code> data type for
-    simplicity and to <code>root</code> pointing to node 0 only (via
-    an <code>if ( )</code>).</li>
-  <li>Move the inner parts of the loop
-    in <a href="src/print_tree.c">print_tree.c</a> over to a function
-    <code>my_broadcast</code> (still in a serial code).</li>
-  <li>Use an integer array <code>target[]</code> created by
-    <code>malloc()</code> to store the list of <code>to</code> target
-    nodes.</li>
-  <li>Include the MPI administrative calls
-    (<code>MPI_Init()</code>,
-     <code>MPI_Comm_size()</code>,
-     <code>MPI_Comm_rank()</code>,
-     <code>MPI_Finalize()</code>), and use the actual <code>size</code> and
-    <code>rank</code> of the virtual machine instead for the loop
-    over <code>rank</code>.</li>
-  <li>Implement the send and receive routines (<code>MPI_Recv()</code> and
-    <code>MPI_Ssend()</code>) to receive and transmit the message.</li>
-  <li>Put <code>printf()</code> statements in the main program to
-    check that the code is working correctly.</li>
-</ol>
+<pre>
+int My Bcast(void *buffer, int count, MPI Datatype datatype, int root,
+             MPI Comm comm)
+</pre>
 
-<h3>Part B</h3>
+<p>This function should be based on the skeleton
+code <code>print_tree.c</code>. It should therefore assume that root
+is process zero (0). If not, it should print out an error message
+quoting this fact and return an exit code one (1).</p>
 
-<p>Use <code>MPI_Wtime()</code> to time three ways of "broadcasting" a
-message:</p>
-<ol>
-  <li>Using a <code>for</code> loop over the nodes to send the message
-  from the <code>root</code> node to the other nodes.</li>
-  <li>Using <code>my_broadcast()</code>.</li>
-  <li>Using <code>MPI_Bcast()</code>.</li>
-</ol>
+<p>Test your routine carefully for various process numbers and
+different count and datatype in the call.</p>
 
-<p>To do so, send a message of some length (at least 1000, 5000 and
-10000 double — filled with random numbers) over and over again
-100 times (using a <code>for</code> loop) to have good time
-statistics. Print the average of the times for each broadcast
-methods.</p>
+<h2>Part B</h2>
 
-<h3>Part C</h3>
+<p>Instrument your code for timing measurements. Modify your main code
+to broadcast the information three (3) different ways:</p>
 
-<p>Modify your function <code>my_broadcast()</code> to broadcast from
-an arbitrary <code>root</code> node, namely</p>
 <ol>
-  <li>Modify the algorithm (explain what you will implement).</li>
-  <li>Modify <a href="print_tree.c">print_tree.c</a> accordingly.</li>
-  <li>Modify <code>my_broadcast()</code> accordingly.</li>
-  <li>Fully check that <code>my_broadcast()</code> works properly by
-    inserting appropriate <code>printf()</code> in the main program and
-    running the code for different number of processes and
-    <code>root</code>.</li>
-  <li>Repeat the timing study in part B for this new function.</li>
+  <li>sequentially via a for loop,</li>
+  <li>via your <code>My_Bcast()</code>, and</li>
+  <li>via the MPICH2 <code>MPI_Bcast()</code>.</li>
 </ol>
 
+<p>Broadcast 10,000 integers 100 times and take an average over the
+100 broadcasts to smooth out the time fluctuations. Repeat for 10,000
+double. Tabulate your timings and comment on the results.</p>
+
+<h2>Part C</h2>
+
+<p>Modify <code>My_Bcast()</code> to be able to broadcast from any
+process (the root process) within the virtual machine. Check your code
+carefully for different <em>root</em> processes and various number of
+processes.</p>
+
 <!--#include virtual="$root_directory/shared/footer.shtml"-->
diff --git a/assignments/archive/tree_broadcast/index.shtml.2007.10.shtml b/assignments/archive/tree_broadcast/index.shtml.2007.10.shtml
new file mode 100644 (file)
index 0000000..81b8e1b
--- /dev/null
@@ -0,0 +1,83 @@
+<!--#set var="root_directory" value="../../.." --><!--#include virtual="$root_directory/shared/header.shtml"-->
+
+<h1>Assignment #3</h1>
+<p><em>Due Friday, October 26, 2007</em></p>
+
+<h2>Purpose</h2>
+
+<p>To learn how to implement truly parallel algorithms.</p>
+
+<h2>Setup</h2>
+
+<p>This assignment consists in building your own broadcast code based
+on a binary tree. The code <a href="src/print_tree.c">print_tree.c</a>
+provides a simple implementation of a binary tree based on node zero
+as being the root. It generates the node numbers from which any node
+is to receive the information and to which to send this
+information.</p>
+
+<h2>To do</h2>
+
+<h3>Part A</h3>
+
+<ol>
+  <li>Build a broadcast function based on the skeleton code
+    <a href="src/print_tree.c">print_tree.c</a>.</li>
+  <li>Call this function <code>my_broadcast()</code> with a calling
+    sequence
+    <pre>int my_broadcast( int my_rank, int size, int root, double *msg, int count )</pre>
+    In other words, restrict it to only <code>double</code> data type for
+    simplicity and to <code>root</code> pointing to node 0 only (via
+    an <code>if ( )</code>).</li>
+  <li>Move the inner parts of the loop
+    in <a href="src/print_tree.c">print_tree.c</a> over to a function
+    <code>my_broadcast</code> (still in a serial code).</li>
+  <li>Use an integer array <code>target[]</code> created by
+    <code>malloc()</code> to store the list of <code>to</code> target
+    nodes.</li>
+  <li>Include the MPI administrative calls
+    (<code>MPI_Init()</code>,
+     <code>MPI_Comm_size()</code>,
+     <code>MPI_Comm_rank()</code>,
+     <code>MPI_Finalize()</code>), and use the actual <code>size</code> and
+    <code>rank</code> of the virtual machine instead for the loop
+    over <code>rank</code>.</li>
+  <li>Implement the send and receive routines (<code>MPI_Recv()</code> and
+    <code>MPI_Ssend()</code>) to receive and transmit the message.</li>
+  <li>Put <code>printf()</code> statements in the main program to
+    check that the code is working correctly.</li>
+</ol>
+
+<h3>Part B</h3>
+
+<p>Use <code>MPI_Wtime()</code> to time three ways of "broadcasting" a
+message:</p>
+<ol>
+  <li>Using a <code>for</code> loop over the nodes to send the message
+  from the <code>root</code> node to the other nodes.</li>
+  <li>Using <code>my_broadcast()</code>.</li>
+  <li>Using <code>MPI_Bcast()</code>.</li>
+</ol>
+
+<p>To do so, send a message of some length (at least 1000, 5000 and
+10000 double — filled with random numbers) over and over again
+100 times (using a <code>for</code> loop) to have good time
+statistics. Print the average of the times for each broadcast
+methods.</p>
+
+<h3>Part C</h3>
+
+<p>Modify your function <code>my_broadcast()</code> to broadcast from
+an arbitrary <code>root</code> node, namely</p>
+<ol>
+  <li>Modify the algorithm (explain what you will implement).</li>
+  <li>Modify <a href="print_tree.c">print_tree.c</a> accordingly.</li>
+  <li>Modify <code>my_broadcast()</code> accordingly.</li>
+  <li>Fully check that <code>my_broadcast()</code> works properly by
+    inserting appropriate <code>printf()</code> in the main program and
+    running the code for different number of processes and
+    <code>root</code>.</li>
+  <li>Repeat the timing study in part B for this new function.</li>
+</ol>
+
+<!--#include virtual="$root_directory/shared/footer.shtml"-->
index 80de2c0097b103d57868a8b3ffaae5db065cb5ad..840a651264c12bd4afcf68a728b3b31eb3583770 120000 (symlink)
@@ -1 +1 @@
-../archive/tree_broadcast.pdf/
\ No newline at end of file
+../archive/tree_broadcast/
\ No newline at end of file
index eb057dbf7cf23b40ea807b36c112b5e7db32a4d1..bb3ab1a7a3833eb0023294b2a7264a57119219f8 100644 (file)
@@ -6,7 +6,7 @@
   <li><a href="current/1/assigment.pdf">Assignment 1</a></li>
   <li><a href="current/2/">Assignment 2</a></li>
   <li><a href="current/3/assigment.pdf">Assignment 3</a></li>
-  <li><a href="current/4/assigment.pdf">Assignment 4</a></li>
+  <li><a href="current/4/">Assignment 4</a></li>
   <li><a href="current/5/">Assignment 5</a></li>
   <li><a href="current/6/">Assignment 6</a></li>
   <li><a href="current/7/assigment.pdf">Assignment 7</a></li>