首页
网站开发
桌面应用
管理软件
微信开发
App开发
嵌入式软件
工具软件
数据采集与分析
其他
首页
>
> 详细
辅导CMSC433编程设计、Python程序讲解 辅导留学生 Statistics统计、回归、迭代|辅导Python编程
项目预算:
开发周期:
发布时间:
要求地区:
CMSC433 Spring 2021
1
Project 6 – Game of Life MPI Implementation
Due: 5/10/2021 11:59:59 pm
Goal. In this project, you will be parallelizing Conway’s Game of Life1 in C using the
OpenMPI library.
Setting up. For this project, you will need a machine that supports OpenMPI and the
Make command. Follow the instructions below for your OS
Mac / Linux. Install MPI on your machine by calling:
• run/install_mpi.sh
Typically, UNIX based machines will have make pre-installed. If this is not the case, you
can install it by calling:
• sudo apt-get install build-essential
If you are on a Mac with Homebrew, you can install both by calling:
• brew install open-mpi
• brew install make
Windows. We recommend you enabled Windows Subsystem for Linux (WSL) for this
project. Follow the instructions below:
• Go to "Control Panel" -> "Programs" -> "Turn Windows features on or off”
• Check "Windows Subsystem for Linux" and click "OK"
• Restart your device. Upon restart, open the Microsoft Store
• Search “Ubuntu” and install the “Ubuntu” app
o “Ubuntu20.04 LTS” and “Ubuntu18.04 LTS” should work if you already
have them pre-installed
• Launch the Ubuntu app. If prompted, create an account
From WSL, you may access files on your Windows machine through /mnt/c/.
Navigate to the P6 directory by calling:
• cd /mnt/c/
Now let’s install make and OpenMPI. Run the following commands from the P6
directory within Ubuntu WSL:
• sudo apt update
• sudo apt install make
1 https://en.wikipedia.org/wiki/Conway%27s_Game_of_Life
CMSC433 Spring 2021
2
• run/install_mpi.sh
Getting started. We have provided you with many files to the program, which we will
describe below:
- A serial (sequential) version of the program called src/life_seq.c. Take a look
at how the game is implemented. You may use code from this file in your MPI
implementation. The serial version will also be used to generate the canonical
output for the program. You should feed the input files into this program in order
to see what the correct output is.
- The starter code for the program called src/life_mpi.c This is the only file
you will be modifying in this project.
- A sample MPI program that shows how message passing works called
src/sample_mpi.c
- In order to compile all of the examples and the src/life_mpi.c programs, you
should go to the run/ directory. You can either use the Makefile or the
run_*.sh scripts to build and run your programs.
- Visualization and random input generation scripts are performed by
tools/life_visualizer.py and tools/input_generator.py respectively.
There is an attached tools/TOOLS_README.txt document with these two files
which explains how they function.
- For more information, please see the README file under the project directory.
How the game works. The Game of Life consists of an N by M matrix, where each cell
can either be 0 (dead) or 1 (alive). The game will start with the cells corresponding to
the (x, y) coordinates in the initial input file being set to 1 (alive). This is the “first
generation” of the game. The game consists of constructing successive generations of
the board based on certain rules which are described below:
1. Cells with 0,1,4,5,6,7, or 8 neighbors die (0,1 of loneliness and 4-8 of
overpopulation)
2. Cells with 2 or 3 neighbors survive to the next generation
3. An unoccupied cell with 3 neighbors becomes occupied in the next generation.
In life_seq.c, two copies of the board are defined: prev to store the previous
generation and curr to compute the next generation. Boards are padded on all sides to
allow for easier computation (there are less if-statements when computing neighbors of
a cell on the board’s edge).
While you are not required to, we recommend you follow this paradigm when
implementing Game of Life with MPI.
CMSC433 Spring 2021
3
An example graphic of one iteration of the game is found below:
For more information on the Game of Life, check out the link at the top of the pdf.
Implementing the game using MPI. We have provided some starter code, which
includes all of the initialization of the MPI functionality for the program, as well as the
code for the rank 0 process. You will need to implement the code for the rank 1 to n
processes (worker processes).
The following is a high-level overview of this implementation:
1. Upon start-up, the rank 0 process will partition the board into non-overlapping
sub-boards and assign them to each worker process.
a. Worker processes will allocate memory to create their sub-board
b. Worker processes do not have direct access to each other’s boards
2. Worker processes are responsible for computing up to the N-th generation of the
Game of Life for their sub-board. N is specified as a runtime parameter.
CMSC433 Spring 2021
4
a. To compute the next generation of its top/bottom rows, the worker process
needs to know the top/bottom rows of its neighboring processes
3. Using MPI, worker processes will communicate their top and bottom rows to their
respective neighbors. These rows will be stored in the sub-board’s padding
4. With the updated sub-board, each worker process will compute the next
generation of its sub-board. This logic should be the same as in life_seq.c
5. After N iterations of this cycle, all worker processes will send their final sub-board
state back to the rank 0 process.
6. The rank 0 process collects these sub-board states into one large board. It then
prints out the overall N-th generation in the Game of Life.
The BOARD macro: Conceptually, you can think of boards as 2-D matrices with
padding on all sides: they are of size (height+2)*(width+2). However, they are stored in
C as a very long 1-D array of integers. We define the BOARD(board, x, y) macro to
help you easily access indices of the 1-D array as if it were a 2-D matrix, centered
around the original unpadded board.
With BOARD, the padded rows/columns are now at indices -1 and height/weight. The top
left most colored cell can now be imagined as the 0th column, 0th row.
For example:
• BOARD(board, -1, -1) returns the value of the top-left in the padded board
• BOARD(board, 0, 1) returns the value at the 1st column, 2nd row in the padded
board (this is the same cell as the 0th column, 1st row in the unpadded board).
We highly recommend you use the BOARD macro to simplify computation in your
implementation.
CMSC433 Spring 2021
5
Running the serial and MPI programs. First, go to the run/ directory. Then, you can
use either the Makefile or the run_*.sh files to run the programs. Take careful note of
the runtime parameters you must supply the run_*.sh files
Testing with the sample input/output. You can use the 4 sets of sample input/output
files located in the run/ directory to test your program.
Testing with the input generator tool. First, you can create random inputs for the
program using the input_generator.py script. Next, you should run these input files
either through the visualizer or the serial version in order to get the correct output for the
final generation that you specified. Finally, run the MPI program with the input file and
get the output from that.
Comparing the output files. We recommend using the diff command (or
https://www.diffchecker.com/ if you prefer a graphical display) to verify that the output
from your MPI program is the same as the output from the serial version.
Submission. Submit the life_mpi.c file to the submit server. It will be graded offline.
Grading. Grading will be performed offline. Since you can easily test your program
locally on random input, all tests on our side will be secret.
软件开发、广告设计客服
QQ:99515681
邮箱:99515681@qq.com
工作时间:8:00-23:00
微信:codinghelp
热点项目
更多
代写dts207tc、sql编程语言代做
2024-12-25
cs209a代做、java程序设计代写
2024-12-25
cs305程序代做、代写python程序...
2024-12-25
代写csc1001、代做python设计程...
2024-12-24
代写practice test preparatio...
2024-12-24
代写bre2031 – environmental...
2024-12-24
代写ece5550: applied kalman ...
2024-12-24
代做conmgnt 7049 – measurem...
2024-12-24
代写ece3700j introduction to...
2024-12-24
代做adad9311 designing the e...
2024-12-24
代做comp5618 - applied cyber...
2024-12-24
代做ece5550: applied kalman ...
2024-12-24
代做cp1402 assignment - netw...
2024-12-24
热点标签
mktg2509
csci 2600
38170
lng302
csse3010
phas3226
77938
arch1162
engn4536/engn6536
acx5903
comp151101
phl245
cse12
comp9312
stat3016/6016
phas0038
comp2140
6qqmb312
xjco3011
rest0005
ematm0051
5qqmn219
lubs5062m
eee8155
cege0100
eap033
artd1109
mat246
etc3430
ecmm462
mis102
inft6800
ddes9903
comp6521
comp9517
comp3331/9331
comp4337
comp6008
comp9414
bu.231.790.81
man00150m
csb352h
math1041
eengm4100
isys1002
08
6057cem
mktg3504
mthm036
mtrx1701
mth3241
eeee3086
cmp-7038b
cmp-7000a
ints4010
econ2151
infs5710
fins5516
fin3309
fins5510
gsoe9340
math2007
math2036
soee5010
mark3088
infs3605
elec9714
comp2271
ma214
comp2211
infs3604
600426
sit254
acct3091
bbt405
msin0116
com107/com113
mark5826
sit120
comp9021
eco2101
eeen40700
cs253
ece3114
ecmm447
chns3000
math377
itd102
comp9444
comp(2041|9044)
econ0060
econ7230
mgt001371
ecs-323
cs6250
mgdi60012
mdia2012
comm221001
comm5000
ma1008
engl642
econ241
com333
math367
mis201
nbs-7041x
meek16104
econ2003
comm1190
mbas902
comp-1027
dpst1091
comp7315
eppd1033
m06
ee3025
msci231
bb113/bbs1063
fc709
comp3425
comp9417
econ42915
cb9101
math1102e
chme0017
fc307
mkt60104
5522usst
litr1-uc6201.200
ee1102
cosc2803
math39512
omp9727
int2067/int5051
bsb151
mgt253
fc021
babs2202
mis2002s
phya21
18-213
cege0012
mdia1002
math38032
mech5125
07
cisc102
mgx3110
cs240
11175
fin3020s
eco3420
ictten622
comp9727
cpt111
de114102d
mgm320h5s
bafi1019
math21112
efim20036
mn-3503
fins5568
110.807
bcpm000028
info6030
bma0092
bcpm0054
math20212
ce335
cs365
cenv6141
ftec5580
math2010
ec3450
comm1170
ecmt1010
csci-ua.0480-003
econ12-200
ib3960
ectb60h3f
cs247—assignment
tk3163
ics3u
ib3j80
comp20008
comp9334
eppd1063
acct2343
cct109
isys1055/3412
math350-real
math2014
eec180
stat141b
econ2101
msinm014/msing014/msing014b
fit2004
comp643
bu1002
cm2030
联系我们
- QQ: 9951568
© 2021
www.rj363.com
软件定制开发网!