Skip to content

Commit f20c4ed

Browse files
authored
Merge pull request #3288 from martin-frbg/getrf-2
Add lower threshold for multithreading in ?GETRF
2 parents 2376aa1 + 726c442 commit f20c4ed

4 files changed

Lines changed: 49 additions & 17 deletions

File tree

benchmark/getri.c

Lines changed: 24 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -72,20 +72,27 @@ int main(int argc, char *argv[]){
7272
FLOAT *a,*work;
7373
FLOAT wkopt[4];
7474
blasint *ipiv;
75-
blasint m, i, j, info,lwork;
75+
blasint m, i, j, l, info,lwork;
7676

7777
int from = 1;
7878
int to = 200;
7979
int step = 1;
80+
int loops = 1;
8081

81-
double time1;
82+
double time1,timeg;
83+
84+
char *p;
85+
char btest = 'I';
8286

8387
argc--;argv++;
8488

8589
if (argc > 0) { from = atol(*argv); argc--; argv++;}
8690
if (argc > 0) { to = MAX(atol(*argv), from); argc--; argv++;}
8791
if (argc > 0) { step = atol(*argv); argc--; argv++;}
8892

93+
if ((p = getenv("OPENBLAS_TEST"))) btest=*p;
94+
95+
if ((p = getenv("OPENBLAS_LOOPS"))) loops=*p;
8996

9097
fprintf(stderr, "From : %3d To : %3d Step = %3d\n", from, to, step);
9198

@@ -124,32 +131,41 @@ int main(int argc, char *argv[]){
124131
fprintf(stderr, " SIZE FLops Time Lwork\n");
125132

126133
for(m = from; m <= to; m += step){
127-
134+
timeg = 0.;
128135
fprintf(stderr, " %6d : ", (int)m);
129136

130-
GETRF (&m, &m, a, &m, ipiv, &info);
137+
for (l = 0; l < loops; l++) {
131138

139+
if (btest == 'F') begin();
140+
GETRF (&m, &m, a, &m, ipiv, &info);
141+
if (btest == 'F') {
142+
end();
143+
timeg += getsec();
144+
}
132145
if (info) {
133146
fprintf(stderr, "Matrix is not singular .. %d\n", info);
134147
exit(1);
135148
}
136149

137-
begin();
150+
if (btest == 'I') begin();
138151

139152
lwork = -1;
140153
GETRI(&m, a, &m, ipiv, wkopt, &lwork, &info);
141154

142155
lwork = (blasint)wkopt[0];
143156
GETRI(&m, a, &m, ipiv, work, &lwork, &info);
144-
end();
157+
if (btest == 'I') end();
145158

146159
if (info) {
147160
fprintf(stderr, "failed compute inverse matrix .. %d\n", info);
148161
exit(1);
149162
}
150163

151-
time1 = getsec();
152-
164+
if (btest == 'I')
165+
timeg += getsec();
166+
167+
} // loops
168+
time1 = timeg/(double)loops;
153169
fprintf(stderr,
154170
" %10.2f MFlops : %10.2f Sec : %d\n",
155171
COMPSIZE * COMPSIZE * (4.0/3.0 * (double)m * (double)m *(double)m - (double)m *(double)m + 5.0/3.0* (double)m) / time1 * 1.e-6,time1,lwork);

benchmark/linpack.c

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -72,17 +72,21 @@ int main(int argc, char *argv[]){
7272
FLOAT *a, *b;
7373
blasint *ipiv;
7474

75-
blasint m, i, j, info;
75+
blasint m, i, j, l, info;
7676
blasint unit = 1;
7777

7878
int from = 1;
7979
int to = 200;
8080
int step = 1;
81+
int loops = 1;
8182

8283
FLOAT maxerr;
8384

84-
double time1, time2;
85+
double time1, time2, timeg1,timeg2;
8586

87+
char *p;
88+
if ((p = getenv("OPENBLAS_LOOPS"))) loops=*p;
89+
8690
argc--;argv++;
8791

8892
if (argc > 0) { from = atol(*argv); argc--; argv++;}
@@ -110,9 +114,9 @@ int main(int argc, char *argv[]){
110114
fprintf(stderr, " SIZE Residual Decompose Solve Total\n");
111115

112116
for(m = from; m <= to; m += step){
113-
117+
timeg1 = timeg2 = 0.;
114118
fprintf(stderr, " %6d : ", (int)m);
115-
119+
for (l = 0; l < loops; l++) {
116120
for(j = 0; j < m; j++){
117121
for(i = 0; i < m * COMPSIZE; i++){
118122
a[(long)i + (long)j * (long)m * COMPSIZE] = ((FLOAT) rand() / (FLOAT) RAND_MAX) - 0.5;
@@ -138,7 +142,7 @@ int main(int argc, char *argv[]){
138142
exit(1);
139143
}
140144

141-
time1 = getsec();
145+
timeg1 += getsec();
142146

143147
begin();
144148

@@ -151,8 +155,10 @@ int main(int argc, char *argv[]){
151155
exit(1);
152156
}
153157

154-
time2 = getsec();
155-
158+
timeg2 += getsec();
159+
} //loops
160+
time1=timeg1/(double)loops;
161+
time2=timeg2/(double)loops;
156162
maxerr = 0.;
157163

158164
for(i = 0; i < m; i++){

interface/lapack/getrf.c

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,14 @@ int NAME(blasint *M, blasint *N, FLOAT *a, blasint *ldA, blasint *ipiv, blasint
9595

9696
#ifdef SMP
9797
args.common = NULL;
98-
args.nthreads = num_cpu_avail(4);
98+
#ifndef DOUBLE
99+
if (args.m*args.n < 40000)
100+
#else
101+
if (args.m*args.n < 10000)
102+
#endif
103+
args.nthreads=1;
104+
else
105+
args.nthreads = num_cpu_avail(4);
99106

100107
if (args.nthreads == 1) {
101108
#endif

interface/lapack/zgetrf.c

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,10 @@ int NAME(blasint *M, blasint *N, FLOAT *a, blasint *ldA, blasint *ipiv, blasint
9595

9696
#ifdef SMP
9797
args.common = NULL;
98-
args.nthreads = num_cpu_avail(4);
98+
if (args.m*args.n <10000)
99+
args.nthreads = 1;
100+
else
101+
args.nthreads = num_cpu_avail(4);
99102

100103
if (args.nthreads == 1) {
101104
#endif

0 commit comments

Comments
 (0)