📄 76.html
字号:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"><head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <style type="text/css"> body { font-family: Verdana, Arial, Helvetica, sans-serif;} a.at-term { font-style: italic; } </style> <title>Self Test</title> <meta name="Generator" content="ATutor"> <meta name="Keywords" content=""></head><body> <!--<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
-->
<style type="text/css">
@import url(base.css);
@import url(content.css);
</style>
<!--
<title>Multilevel_Sec7.7</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script type="text/javascript" src="common.js"></script>
</head>
<body>
<div id="content">
<div id="header">
</div>
-->
<div id="main">
<div class="node">
<div id="nodeDecoration"><p id="nodeTitle">Combining MPI and OpenMP Parallelism</p></div>
</div>
<div class="node">
<div id="nodeDecoration"><p id="nodeTitle">Question 1</p></div>
<div class="MultichoiceIdevice" id="id51">
<script type="text/javascript" src="common.js"></script>
<script type="text/javascript" src="libot_drag.js"></script>
<div class="iDevice emphasis1">
<img alt="IDevice Question Icon" class="iDevice_icon" src="icon_question.gif" />
<span class="iDeviceTitle">Question 1</span><br/>
<div class="iDevice_inner">
<div id="taquestion51_2" class="block" style="display:block">Which of the following choices is <b>not</b> a
valid reason for writing an MLP program?
</div>
<table>
<tbody>
<tr><td><input type="radio" name="option51_2" id="i51_5" onclick="getFeedback(0,4,'51_2','multi')"/></td><td>
<div id="taans51_5" class="block" style="display:block">An MLP program could have a faster run time than
single-level parallel programs.
</div></td></tr>
<tr><td><input type="radio" name="option51_2" id="i51_158" onclick="getFeedback(1,4,'51_2','multi')"/></td><td>
<div id="taans51_158" class="block" style="display:block">An MLP program is suited to the Distributed
Shared Memory achitecture characteristic of
new supercomputers
</div></td></tr>
<tr><td><input type="radio" name="option51_2" id="i51_161" onclick="getFeedback(2,4,'51_2','multi')"/></td><td>
<div id="taans51_161" class="block" style="display:block">Writing an MLP program gives the programmer practice and experience
with the substantial extra library calls and variable restrictions
required
</div></td></tr>
<tr><td><input type="radio" name="option51_2" id="i51_164" onclick="getFeedback(3,4,'51_2','multi')"/></td><td>
<div id="taans51_164" class="block" style="display:block">Writing an MLP program gives the programmer practice in using the two most popular parallel programming libraries
</div></td></tr>
</tbody>
</table>
<div id="sa0b51_2" style="color: rgb(0, 51, 204);display: none;"><div id="taf51_5" class="block" style="display:block"><b><span class="alert">Incorrect</span></b><br />
No. This is a valid reason, in fact it is the
underlying purpose for all forms of parallel
processing
</div></div>
<div id="sa1b51_2" style="color: rgb(0, 51, 204);display: none;"><div id="taf51_158" class="block" style="display:block"><b><span class="alert">Incorrect</span></b><br />
Sorry, this is another valid reason. The DSM
architecture is perfectly suited for two-level
parallelism due to its two-level design.
</div></div>
<div id="sa2b51_2" style="color: rgb(0, 51, 204);display: none;"><div id="taf51_161" class="block" style="display:block"><b><span class="success">Correct</span></b><br />
Correct! There is no extra work. Just combine the code from your MPI program and your OpenMP program.
</div></div>
<div id="sa3b51_2" style="color: rgb(0, 51, 204);display: none;"><div id="taf51_164" class="block" style="display:block"><b><span class="alert">Incorrect</span></b><br />
No (sort of), this is a valid, if weak, reason to write MLP code. It is always good to practice MPI and OpenMP coding
</div></div>
<br/></div>
</div>
</div>
</div>
<div class="node">
<div id="nodeDecoration"><p id="nodeTitle">Question 2</p></div>
<div class="MultichoiceIdevice" id="id52">
<script type="text/javascript" src="common.js"></script>
<script type="text/javascript" src="libot_drag.js"></script>
<div class="iDevice emphasis1">
<img alt="IDevice Question Icon" class="iDevice_icon" src="icon_question.gif" />
<span class="iDeviceTitle">Question 2</span><br/>
<div class="iDevice_inner">
<div id="taquestion52_2" class="block" style="display:block"><pre>
Say that on a certain parallel computer
the command to compile Fortran code
using MPI is this:
<p>
f90 -X128 $MPI prompi.f
</p>
<p>
Furthermore, say that on this same machine the
comand to compile Fortran using OpenMP is this:
</p>
<p>
f90 -omp proomp.f
</p>
<p>
What would be the compilation command for an MLP
program named promlp.f?
</p>
</pre>
</div>
<table>
<tbody>
<tr><td><input type="radio" name="option52_2" id="i52_5" onclick="getFeedback(0,4,'52_2','multi')"/></td><td>
<div id="taans52_5" class="block" style="display:block">f90 promlp.f
</div></td></tr>
<tr><td><input type="radio" name="option52_2" id="i52_167" onclick="getFeedback(1,4,'52_2','multi')"/></td><td>
<div id="taans52_167" class="block" style="display:block">f90 -X128 $MPI -omp promlp.f
</div></td></tr>
<tr><td><input type="radio" name="option52_2" id="i52_170" onclick="getFeedback(2,4,'52_2','multi')"/></td><td>
<div id="taans52_170" class="block" style="display:block">f90 -X128 $MPI promlp.f
(Since MPI is the higher level library it will automatically load OpenMP)
</div></td></tr>
<tr><td><input type="radio" name="option52_2" id="i52_173" onclick="getFeedback(3,4,'52_2','multi')"/></td><td>
<div id="taans52_173" class="block" style="display:block">f90 -omp -mpi promlp.f
</div></td></tr>
</tbody>
</table>
<div id="sa0b52_2" style="color: rgb(0, 51, 204);display: none;"><div id="taf52_5" class="block" style="display:block"><b><span class="alert">Incorrect</span></b><br />
No. This command would load neither the MPI or
OpenMP libraries
</div></div>
<div id="sa1b52_2" style="color: rgb(0, 51, 204);display: none;"><div id="taf52_167" class="block" style="display:block"><b><span class="success">Correct</span></b><br />
Correct! Just combine the command-line options needed for both parallel libraries
</div></div>
<div id="sa2b52_2" style="color: rgb(0, 51, 204);display: none;"><div id="taf52_170" class="block" style="display:block"><b><span class="alert">Incorrect</span></b><br />
No. You cannot make such an assumption. Each library has its own separate compiler options
</div></div>
<div id="sa3b52_2" style="color: rgb(0, 51, 204);display: none;"><div id="taf52_173" class="block" style="display:block"><b><span class="alert">Incorrect</span></b><br />
No. Wrong options used to load the MPI library
</div></div>
<br/></div>
</div>
</div>
</div>
<div class="node">
<div id="nodeDecoration"><p id="nodeTitle">Question 3</p></div>
<div class="MultichoiceIdevice" id="id53">
<script type="text/javascript" src="common.js"></script>
<script type="text/javascript" src="libot_drag.js"></script>
<div class="iDevice emphasis1">
<img alt="IDevice Question Icon" class="iDevice_icon" src="icon_question.gif" />
<span class="iDeviceTitle">Question 3</span><br/>
<div class="iDevice_inner">
<div id="taquestion53_2" class="block" style="display:block">In the multi-level parallel search program shown
in this chapter, how many indices of the global
array b is each OpenMP thread searching?
</div>
<table>
<tbody>
<tr><td><input type="radio" name="option53_2" id="i53_5" onclick="getFeedback(0,4,'53_2','multi')"/></td><td>
<div id="taans53_5" class="block" style="display:block">3003
</div></td></tr>
<tr><td><input type="radio" name="option53_2" id="i53_176" onclick="getFeedback(1,4,'53_2','multi')"/></td><td>
<div id="taans53_176" class="block" style="display:block">1001
</div></td></tr>
<tr><td><input type="radio" name="option53_2" id="i53_179" onclick="getFeedback(2,4,'53_2','multi')"/></td><td>
<div id="taans53_179" class="block" style="display:block">4
</div></td></tr>
<tr><td><input type="radio" name="option53_2" id="i53_182" onclick="getFeedback(3,4,'53_2','multi')"/></td><td>
<div id="taans53_182" class="block" style="display:block">1000
</div></td></tr>
</tbody>
</table>
<div id="sa0b53_2" style="color: rgb(0, 51, 204);display: none;"><div id="taf53_5" class="block" style="display:block"><b><span class="alert">Incorrect</span></b><br />
No, this is the number of indices (i.e.,size) of
the entire global array b
</div></div>
<div id="sa1b53_2" style="color: rgb(0, 51, 204);display: none;"><div id="taf53_176" class="block" style="display:block"><b><span class="alert">Incorrect</span></b><br />
No, but getting warmer. This is the number of iterations each of the
three Worker MPI processes are responsible for; not each thread
</div></div>
<div id="sa2b53_2" style="color: rgb(0, 51, 204);display: none;"><div id="taf53_179" class="block" style="display:block"><b><span class="alert">Incorrect</span></b><br />
No, mixing up two things here. Four is the number of OpenMP threads created by each MPI Worker process, <i>not</i> the number of iterations given to each thread.
</div></div>
<div id="sa3b53_2" style="color: rgb(0, 51, 204);display: none;"><div id="taf53_182" class="block" style="display:block"><b><span class="success">Correct</span></b><br />
Correct! Each MPI process has 1000 indices to search which are divided equally among the four OpenMP threads.
</div></div>
<br/></div>
</div>
</div>
</div>
<div class="node">
<div id="nodeDecoration"><p id="nodeTitle">Question 4</p></div>
<div class="MultichoiceIdevice" id="id54">
<script type="text/javascript" src="common.js"></script>
<script type="text/javascript" src="libot_drag.js"></script>
<div class="iDevice emphasis1">
<img alt="IDevice Question Icon" class="iDevice_icon" src="icon_question.gif" />
<span class="iDeviceTitle">Question 4</span><br/>
<div class="iDevice_inner">
<div id="taquestion54_2" class="block" style="display:block">What is meant by the term domain decomposition and how is it
implemented in the parallel search program discussed in this chapter?
</div>
<table>
<tbody>
<tr><td><input type="radio" name="option54_2" id="i54_5" onclick="getFeedback(0,4,'54_2','multi')"/></td><td>
<div id="taans54_5" class="block" style="display:block">Domain Decomposition is having sets of your global data operated on in
parallel. In the search code domain decompisition is done first for the
worker MPI processes and then for each of the Open MP threads they in
turn create
</div></td></tr>
<tr><td><input type="radio" name="option54_2" id="i54_185" onclick="getFeedback(1,4,'54_2','multi')"/></td><td>
<div id="taans54_185" class="block" style="display:block">Domain decomposition is having sets of the global data operated on in
parallel. In the search program domain decomposition occurs when each
slave MPI process is sent its part of the array b.
</div></td></tr>
<tr><td><input type="radio" name="option54_2" id="i54_188" onclick="getFeedback(2,4,'54_2','multi')"/></td><td>
<div id="taans54_188" class="block" style="display:block">Domain Decomposition is having parallel processors performing
differents sets of operations. That is, the "domain" of the code is
split up. In the search program, this is accomplished by having Boss
and Worker processes which have different duties.
</div></td></tr>
<tr><td><input type="radio" name="option54_2" id="i54_191" onclick="getFeedback(3,4,'54_2','multi')"/></td><td>
<div id="taans54_191" class="block" style="display:block">Domain decomposition is when all the global data is worked on by each
of the processes and threads created. This approach was not used in the
search program.
</div></td></tr>
</tbody>
</table>
<div id="sa0b54_2" style="color: rgb(0, 51, 204);display: none;"><div id="taf54_5" class="block" style="display:block"><b><span class="success">Correct</span></b><br />
Correct in all three ways! Definition, and the two levels of domain decomposition
</div></div>
<div id="sa1b54_2" style="color: rgb(0, 51, 204);display: none;"><div id="taf54_185" class="block" style="display:block"><b><span class="alert">Incorrect</span></b><br />
Very close. Hint: there is another level of domain decomposition...
</div></div>
<div id="sa2b54_2" style="color: rgb(0, 51, 204);display: none;"><div id="taf54_188" class="block" style="display:block"><b><span class="alert">Incorrect</span></b><br />
No. Mix up in terminology here. What this answer describes is task or functional decomposition
</div></div>
<div id="sa3b54_2" style="color: rgb(0, 51, 204);display: none;"><div id="taf54_191" class="block" style="display:block"><b><span class="alert">Incorrect</span></b><br />
No. What is the point of, say, both MPI process 1 and MPI process 3 both searching <b>all</b> the global data simultaneously. It is redundant.
</div></div>
<br/></div>
</div>
</div>
</div>
</div>
<!--
</div>
</body></html>
--></body></html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -