Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- int GameOfLife::getNeighbourSum(unsigned int row, unsigned int col)
- {
- int sum = 0;
- // TODO: PLACE CODE HERE
- for (int i = row - 1; i < row + 2; i++)
- {
- for (int j = col - 1; j < col + 2; j++)
- {
- if (!(i == row && j == col))
- {
- if (m_buffer[i*m_width + j] == 1)
- {
- sum++;
- }
- }
- }
- }
- void GameOfLife::nextIterSerial2(unsigned int r,unsigned int c,unsigned int step)
- {
- for (int row = r; row < row+step; row++)
- {
- for (int col = c; col < col+step; col++)
- {
- // TODO: IMPLEMENT getNeighbourSum
- int neighbours = getNeighbourSum(row, col);
- if (m_buffer[row * m_width + col] == 1)
- {
- if ((neighbours == 2) || (neighbours == 3))
- {
- m_nextIter[row * m_width + col] = 1;
- }
- else
- {
- m_nextIter[row * m_width + col] = 0;
- }
- }
- else
- {
- if (neighbours == 3)
- {
- m_nextIter[row * m_width + col] = 1;
- }
- else
- {
- m_nextIter[row * m_width + col] = 0;
- }
- }
- }
- }
- #define coreNmbr 4
- #define grainSize (m_width/coreNmbr)
- void GameOfLife::Parallel(unsigned int r, unsigned int c, unsigned int step)
- {
- if (step == grainSize)
- {
- nextIterSerial2(r, c, step)
- }
- else
- {
- step = step / 2;
- cilk_spawn Parallel(r, c, step);
- cilk_spawn Parallel(r + step, c, step);
- clik_spawn Parallel(r, c + step, step);
- Parallel(r + step, c + step, step);
- cilk_sync;
- }
- }
- void GameOfLife::nextIterParallel()
- {
- // TODO: PLACE CODE HERE
- Parallel(0, 0, m_height);
- // switch buffers
- unsigned char* temp = m_buffer;
- m_buffer = m_nextIter;
- m_nextIter = temp;
- }
- GameOfLife::~GameOfLife()
- {
- delete [] m_buffer;
- delete [] m_nextIter;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement