Advertisement
Guest User

coa

a guest
Apr 27th, 2018
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.69 KB | None | 0 0
  1. int GameOfLife::getNeighbourSum(unsigned int row, unsigned int col)
  2. {
  3. int sum = 0;
  4.  
  5. // TODO: PLACE CODE HERE
  6.  
  7. for (int i = row - 1; i < row + 2; i++)
  8. {
  9. for (int j = col - 1; j < col + 2; j++)
  10. {
  11. if (!(i == row && j == col))
  12. {
  13. if (m_buffer[i*m_width + j] == 1)
  14. {
  15. sum++;
  16. }
  17. }
  18. }
  19. }
  20.  
  21.  
  22.  
  23.  
  24. void GameOfLife::nextIterSerial2(unsigned int r,unsigned int c,unsigned int step)
  25. {
  26. for (int row = r; row < row+step; row++)
  27. {
  28. for (int col = c; col < col+step; col++)
  29. {
  30. // TODO: IMPLEMENT getNeighbourSum
  31. int neighbours = getNeighbourSum(row, col);
  32. if (m_buffer[row * m_width + col] == 1)
  33. {
  34. if ((neighbours == 2) || (neighbours == 3))
  35. {
  36. m_nextIter[row * m_width + col] = 1;
  37. }
  38. else
  39. {
  40. m_nextIter[row * m_width + col] = 0;
  41. }
  42. }
  43. else
  44. {
  45. if (neighbours == 3)
  46. {
  47. m_nextIter[row * m_width + col] = 1;
  48. }
  49. else
  50. {
  51. m_nextIter[row * m_width + col] = 0;
  52. }
  53. }
  54. }
  55. }
  56.  
  57.  
  58. #define coreNmbr 4
  59. #define grainSize (m_width/coreNmbr)
  60.  
  61. void GameOfLife::Parallel(unsigned int r, unsigned int c, unsigned int step)
  62. {
  63.  
  64. if (step == grainSize)
  65. {
  66. nextIterSerial2(r, c, step)
  67. }
  68. else
  69. {
  70. step = step / 2;
  71. cilk_spawn Parallel(r, c, step);
  72. cilk_spawn Parallel(r + step, c, step);
  73. clik_spawn Parallel(r, c + step, step);
  74. Parallel(r + step, c + step, step);
  75. cilk_sync;
  76.  
  77. }
  78.  
  79. }
  80.  
  81. void GameOfLife::nextIterParallel()
  82. {
  83. // TODO: PLACE CODE HERE
  84. Parallel(0, 0, m_height);
  85.  
  86.  
  87. // switch buffers
  88. unsigned char* temp = m_buffer;
  89. m_buffer = m_nextIter;
  90. m_nextIter = temp;
  91.  
  92.  
  93. }
  94.  
  95.  
  96. GameOfLife::~GameOfLife()
  97. {
  98. delete [] m_buffer;
  99. delete [] m_nextIter;
  100. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement