Changeset 2366 in /cluster/svnroot


Ignore:
Timestamp:
Apr 22, 2010 6:13:12 PM (11 years ago)
Author:
fitz
Message:

Replace send/recv pairs with MPI_Sendrecv (#486) Fix segfault issue with openmp segment (#502)

Location:
bccd-ng/branches/fitz-devel/trees/home/bccd/Life
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • bccd-ng/branches/fitz-devel/trees/home/bccd/Life/Life.c

    r2365 r2366  
    3030        MPI_Comm_rank(MPI_COMM_WORLD,&rank);
    3131        MPI_Comm_size(MPI_COMM_WORLD,&size);
     32        #else
     33        rank = 0;
     34        size = 0;
    3235        #endif
    3336
  • bccd-ng/branches/fitz-devel/trees/home/bccd/Life/Life.h

    r2365 r2366  
    3535        // left is rank - 1 % size, right is rank + 1 % size.
    3636
     37        #ifdef MPI
    3738        // copy sides
    3839        int left_rank = (rank-1+size)%size;
    3940        int right_rank = (rank+1)%size;
    4041
    41         #ifdef MPI
    4242        // If we're only 1, no need to do the communication
    4343        if (size != 1) {
    44                 MPI_Send(grid[1],nrows+2,MPI_INT,left_rank,MPI_TOLEFT,
    45                                 MPI_COMM_WORLD);
    46                 MPI_Recv(grid[ncols+1],nrows+2,MPI_INT,right_rank,
    47                                 MPI_TOLEFT,
    48                                 MPI_COMM_WORLD, &status);
     44                // XXX reorder who we're recieving from
     45                MPI_Sendrecv(grid[1], nrows+2, MPI_INT, left_rank, MPI_TOLEFT,
     46                        grid[ncol1+1], nrows+2, MPI_INT, right_rank, MPI_TOLEFT,
     47                        MPI_COMM_WORLD, &status);
    4948
    50                 MPI_Send(grid[ncols],nrows+2,MPI_INT,right_rank,MPI_TORIGHT,
    51                                 MPI_COMM_WORLD);
    52                 MPI_Recv(grid[0],nrows+2,MPI_INT,left_rank,
    53                                 MPI_TORIGHT,
    54                                 MPI_COMM_WORLD, &status);
     49                MPI_Sendrecv(grid[ncols], nrows+2, MPI_INT, right_rank, MPI_TORIGHT,
     50                        grid[0], nrows+2, MPI_INT, left_rank, MPI_TORIGHT,
     51                        MPI_COMM_WORLD, &status);
    5552        }
    5653        #endif
     54
     55        // But we still need to copy sides
     56        if (size == 1) {
     57                for (j = 0; j < nrows+2; j++) {
     58                        grid[ncols+1][j] = grid[1][j];
     59                        gird[0][j] = grid[ncols][j];
     60                }
     61        }
    5762
    5863        // copy corners
     
    6974
    7075        // update
    71         #pragma omp parallel for private(neighbors)
    72         for (i=1;i<=ncols;i++) {
    73                 for (j=1;j<=nrows;j++) {
    74                         neighbors=0;
    75                         for (k=i-1;k<=i+1; k++) {
    76                                 for (l=j-1;l<=j+1; l++) {
    77                                         if (!(k==i && l==j) && grid[k][l]>0) {
     76        #pragma omp parallel for private(neighbors,j,k,l)
     77        for (i = 1; i <= ncols; i++) {
     78                for (j = 1; j <= nrows; j++) {
     79                        neighbors = 0;
     80
     81                        for (k = i-1; k <= i+1; k++) {
     82                                for (l = j-1; l <= j+1; l++) {
     83                                        if (!(k==i && l==j) && grid[k][l] > 0)
    7884                                                neighbors++;
    79                                         }
    8085                                }
    81                                 if (neighbors > 3) continue;
    8286                        }
    83                         if (neighbors < 2 || neighbors > 3) {
     87
     88                        if (neighbors < 2 || neighbors > 3)
    8489                                next_grid[i][j] = 0;
    85                         } else if (grid[i][j] > 0 || neighbors == 3) {
    86                                 next_grid[i][j] = grid[i][j]+1;
    87                         }
     90                        else if (grid[i][j] > 0 || neighbors == 3)
     91                                next_grid[i][j] = grid[i][j] + 1;
    8892                }
    8993        }
  • bccd-ng/branches/fitz-devel/trees/home/bccd/Life/Makefile

    r2365 r2366  
    1010
    1111
    12 CFLAGS    = -fopenmp
     12CFLAGS    = -fopenmp -ggdb
    1313LDFLAGS   = -L/usr/X11R6/lib $(LIBS)
    1414
Note: See TracChangeset for help on using the changeset viewer.