From ee58c580876de08f76394d575d124e28076a2b67 Mon Sep 17 00:00:00 2001 From: josh Date: Thu, 9 Oct 2008 01:46:36 +0000 Subject: [PATCH] finished #1 and #2 git-svn-id: svn://anubis/gvsu@188 45c1a28c-8058-47b2-ae61-ca45b979098e --- cs677/hw7/hw.tex | 29 +++++++++++++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) diff --git a/cs677/hw7/hw.tex b/cs677/hw7/hw.tex index e0f79ef..b79e1e4 100644 --- a/cs677/hw7/hw.tex +++ b/cs677/hw7/hw.tex @@ -21,12 +21,37 @@ \noindent \begin{enumerate} \item[1.]{ - in progress + Break the ``parallel region'' into a function accepting a \texttt{void *} + parameter. + Before the ``parallel region'' create a \texttt{for} loop which loops + \textit{n} times (where \textit{n} is the number of threads), + invoking \texttt{pthread\_create()} once for each thread. + Any variables local to the function containing the ``parallel region'' + that the ``parallel region'' function needs access to + would have to be stored as pointers in a structure whose address was + passed as an argument to the thread function. + Then, the thread would run the code in the ``parallel region''. + After the region, a \texttt{for} loop would exist to loop over all + the threads created in the first loop and execute \texttt{pthread\_join()} + for each one. } \vskip 2em \item[2.]{ - in progress + Each thread could store its result into an array indexed by its ID. + Then, when computation is complete, a regular \texttt{for} loop + within an OpenMP parallel region could iterate + $\lceil \log_2 n \rceil$ times. + In the first iteration, threads where $ID\mod 2 = 0$ would perform + the reduction operation on their array value and the array value + at index $ID + 1$ while the rest of the threads are idle. + In the second iteration, threads where $ID\mod 4 = 0$ would perform + the reduction operation on their array value and the array value + at index $ID + 2$ while the rest of the threads are idle. + This process would repeat (doubling the mod value and offset index + each time) until the reduction operation has been + performed to produce the final result value at index 0 of the + array. } \end{enumerate}