Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#include <stdlib.h>
#include <stdio.h>
#include "DistributeVecOrigEq.h"
struct opts Options ;
extern int FindProcLowestSum(long *procstart, int *procindex, long j, int npj,
long *SumsU, long *SumsV);
int main(int argc, char **argv) {
long i, l, *procstart, *SumsU, *SumsV ;
int P, npi, q, q0, q1, *procindex ;
printf("Test FindProcLowestSum: ");
P = 23 ; /* number of non-empty processors */
l= P*P*P ;
npi = 2;
procstart = (long *) malloc((l+1)* sizeof(long)) ;
procindex = (int *) malloc(2*l* sizeof(int)) ;
SumsU = (long *) malloc(P* sizeof(long)) ;
SumsV = (long *) malloc(P* sizeof(long)) ;
if ( procstart == NULL || procindex == NULL ||
SumsU == NULL || SumsV == NULL ){
printf("Error\n") ;
exit(1);
}
/* Fill rows of communication matrix, each with two processors */
for (i=0; i<l; i++)
procstart[i] = 2*i;
procstart[l] = 2*l ;
for (i=0; i<l; i++){
procindex[2*i] = i%P ;
procindex[2*i+1] = (i+1)%P ;
}
/* Initialise sums */
for (q=0; q<P; q++){
SumsU[q] = q;
SumsV[q] = q;
}
/* Check result values */
for (i=0; i<l; i++){
q = FindProcLowestSum(procstart, procindex, i, npi, SumsU, SumsV ) ;
q0 = i%P ;
q1 = (i+1)%P ;
if(q != MIN(q0,q1) ){
printf("Error\n") ;
exit(1);
}
}
printf("OK\n") ;
exit(0);
} /* end main */