我做了一個生命遊戲的順序版本,但現在我需要使用OpenMP創建一個並行版本的代碼,但我遇到了一些問題。 如果有人能幫助我,那將會非常好。 THKS。 這裏是我的順序代碼:OpenMP的生命遊戲
// Swapping the two grids
#define SWAP_BOARDS(b1, b2) do { \
char* temp = b1; \
b1 = b2; \
b2 = temp; \
} while(0)
// Simplifying access to grid elements
#define BOARD(G, X, Y) ((G)[NC*(X)+(Y)])
char* sequential_game_of_life (char* outgrid, char* ingrid,
const int nrows, const int ncols, const int gens_max) {
const int NC = ncols;
int curgen, i, j;
for (curgen = 0; curgen < gens_max; curgen++)
{
for (i = 0; i < nrows; i++)
{
for (j = 0; j < ncols; j++)
{
const int inorth = mod (i-1, nrows);
const int isouth = mod (i+1, nrows);
const int jwest = mod (j-1, ncols);
const int jeast = mod (j+1, ncols);
const char neighbor_count =
BOARD (ingrid, inorth, jwest) +
BOARD (ingrid, inorth, j) +
BOARD (ingrid, inorth, jeast) +
BOARD (ingrid, i, jwest) +
BOARD (ingrid, i, jeast) +
BOARD (ingrid, isouth, jwest) +
BOARD (ingrid, isouth, j) +
BOARD (ingrid, isouth, jeast);
BOARD(outgrid, i, j) = alivep (neighbor_count, BOARD (ingrid, i, j));
}
}
SWAP_BOARDS(outgrid, ingrid);
}
return outgrid;
}
我知道,我必須爲平行的那些3,但我不能看到如何做到這一點。
那麼問題是什麼?是不是像「我怎樣才能讓3'for'循環與OpenMP並行運行?」或類似的東西? – netcoder