Difference between revisions of "CSC352 Homework 3 2017"
(→Question) |
(→Game of Life on MPI) |
||
Line 2: | Line 2: | ||
---- | ---- | ||
<br /> | <br /> | ||
− | =Game of Life on | + | =Game of Life in MPI on AWS= |
<br /> | <br /> | ||
<bluebox> | <bluebox> |
Revision as of 16:10, 5 April 2017
--D. Thiebaut (talk) 15:26, 5 April 2017 (EDT)
Game of Life in MPI on AWS
The due date for this assignment is April 20th, 2017, midnight.
Question
How large an MPI cluster do you need on AWS to gain a speedup greater than 1.0 for the Game of Life evolving for at least 1000 generations on a dish of 10,000 lines, where each line is 80 characters long?
Test your program(s) on AWS for various size clusters, and submit a zip file containing:
- the C and MPI programs you will have written,
- any shell file you will have written to help answer the question,
- and a pdf showing the details of your analysis, including the timing of your code AWS.
Additional Information
You may find this 2-Node, Game of Life, MPI code useful to get started.
The dish array
You may want to use the function createDish() illustrated in the code below to create a dish of 10,000 lines.
/* initDish.c D. Thiebaut Demo program for generating a dish with N lines, where N is provided by the user, and where a pattern of cell is repeated many times until N lines have been created in the dish array. The function createDish returns an array of N strings where the strings are repetitions of the pattern stored in the array pattern[]. To compile and run: gcc -o initDish initDish.c ./initDish */ #include <stdio.h> #include <stdlib.h> #include <string.h> char* pattern[] = { " ", " # ", " # # ### ", " ## ", " ", " # ", " # # ", " ## ", " ", " ", " ", " ", " # ", " # # ", " ## ", " ", " ", " " }; // createDish() // input: N: the number of lines we want in dish. // output: dish: an array of N lines, each line being taken // from the array pattern, in a rotating manner. char** createDish( int N ) { int i; int patternLength = sizeof( pattern )/sizeof( char * ); char **dish; //--- create an array of N strings --- dish = (char **) malloc( N * sizeof( char * ) ); //--- create N strings and "attach" them to an entry in --- //--- dish. Copy one of the lines from pattern into the newly --- //--- created string. --- for ( i=0; i<N; i++ ) { dish[i] = (char *) malloc( ( strlen( pattern[0] )+1 )*sizeof( char ) ); strcpy( dish[i], pattern[i % patternLength ] ); } //--- return the fully populated array of N strings --- return dish; } // ================================================================= // MAIN: // Creates a dish array of 40 lines and displays it. // ================================================================= int main( int argc, char** argv ) { int i, N, length; char** dish; //--- define the number of lines wanted --- N = 40; //--- create an array of N lines --- dish = createDish( N ); //--- display it on the screen --- for (i=0; i < N; i++ ) printf( "%s\n", dish[i] ); }