root / synthbench / euroben-ports / base / C-MPI / mod2f / btrans.c @ 0:839f52ef7657
History | View | Annotate | Download (853 Bytes)
1 | 0:839f52ef7657 | louridas | #include "mpiargs.h" |
---|---|---|---|
2 | 0:839f52ef7657 | louridas | |
3 | 0:839f52ef7657 | louridas | void btrans( int n1, int n2, double *a, double **t, int dir ) |
4 | 0:839f52ef7657 | louridas | // ---------------------------------------------------------------------
|
5 | 0:839f52ef7657 | louridas | // --- 'btrans' performs a blockwise local transposition. Input is a
|
6 | 0:839f52ef7657 | louridas | // 1-D array 'a', output is a 2-D array 't'
|
7 | 0:839f52ef7657 | louridas | // ---------------------------------------------------------------------
|
8 | 0:839f52ef7657 | louridas | { |
9 | 0:839f52ef7657 | louridas | int i, j, k, l;
|
10 | 0:839f52ef7657 | louridas | int dim1, dim2, m1, m2, shift;
|
11 | 0:839f52ef7657 | louridas | // ---------------------------------------------------------------------
|
12 | 0:839f52ef7657 | louridas | if ( dir == 0 ) { |
13 | 0:839f52ef7657 | louridas | dim1 = 0;
|
14 | 0:839f52ef7657 | louridas | dim2 = 1;
|
15 | 0:839f52ef7657 | louridas | } |
16 | 0:839f52ef7657 | louridas | else {
|
17 | 0:839f52ef7657 | louridas | dim1 = 1;
|
18 | 0:839f52ef7657 | louridas | dim2 = 0;
|
19 | 0:839f52ef7657 | louridas | } |
20 | 0:839f52ef7657 | louridas | l = 0; m2 = sizes[me][dim2];
|
21 | 0:839f52ef7657 | louridas | for( k = 0; k < nodes; k++ ) { |
22 | 0:839f52ef7657 | louridas | shift = offset[k][dim1]; |
23 | 0:839f52ef7657 | louridas | m1 = sizes[k][dim1]; |
24 | 0:839f52ef7657 | louridas | for( j = 0; j < m2; j++ ) { |
25 | 0:839f52ef7657 | louridas | for( i = 0; i < m1; i++ ) { |
26 | 0:839f52ef7657 | louridas | t[j][i+shift] = a[l]; |
27 | 0:839f52ef7657 | louridas | l++; |
28 | 0:839f52ef7657 | louridas | } |
29 | 0:839f52ef7657 | louridas | } |
30 | 0:839f52ef7657 | louridas | } |
31 | 0:839f52ef7657 | louridas | } |