Skip to content

Commit b6a6ccb

Browse files
authored
Merge pull request #2495 from ZuoQ3/develop
add benchmark for axpby test
2 parents 8b720f7 + 0c8162e commit b6a6ccb

2 files changed

Lines changed: 296 additions & 8 deletions

File tree

benchmark/Makefile

Lines changed: 94 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,8 @@ goto :: slinpack.goto dlinpack.goto clinpack.goto zlinpack.goto \
8585
sgesv.goto dgesv.goto cgesv.goto zgesv.goto \
8686
sgetri.goto dgetri.goto cgetri.goto zgetri.goto \
8787
spotrf.goto dpotrf.goto cpotrf.goto zpotrf.goto \
88-
ssymm.goto dsymm.goto csymm.goto zsymm.goto
88+
ssymm.goto dsymm.goto csymm.goto zsymm.goto \
89+
saxpby.goto daxpby.goto caxpby.goto zaxpby.goto
8990

9091
acml :: slinpack.acml dlinpack.acml clinpack.acml zlinpack.acml \
9192
scholesky.acml dcholesky.acml ccholesky.acml zcholesky.acml \
@@ -121,7 +122,8 @@ acml :: slinpack.acml dlinpack.acml clinpack.acml zlinpack.acml \
121122
sgesv.acml dgesv.acml cgesv.acml zgesv.acml \
122123
sgetri.acml dgetri.acml cgetri.acml zgetri.acml \
123124
spotrf.acml dpotrf.acml cpotrf.acml zpotrf.acml \
124-
ssymm.acml dsymm.acml csymm.acml zsymm.acml
125+
ssymm.acml dsymm.acml csymm.acml zsymm.acml \
126+
saxpby.goto daxpby.goto caxpby.goto zaxpby.goto
125127

126128
atlas :: slinpack.atlas dlinpack.atlas clinpack.atlas zlinpack.atlas \
127129
scholesky.atlas dcholesky.atlas ccholesky.atlas zcholesky.atlas \
@@ -158,7 +160,8 @@ atlas :: slinpack.atlas dlinpack.atlas clinpack.atlas zlinpack.atlas \
158160
sgesv.atlas dgesv.atlas cgesv.atlas zgesv.atlas \
159161
sgetri.atlas dgetri.atlas cgetri.atlas zgetri.atlas \
160162
spotrf.atlas dpotrf.atlas cpotrf.atlas zpotrf.atlas \
161-
ssymm.atlas dsymm.atlas csymm.atlas zsymm.atlas
163+
ssymm.atlas dsymm.atlas csymm.atlas zsymm.atlas \
164+
saxpby.goto daxpby.goto caxpby.goto zaxpby.goto
162165

163166
mkl :: slinpack.mkl dlinpack.mkl clinpack.mkl zlinpack.mkl \
164167
scholesky.mkl dcholesky.mkl ccholesky.mkl zcholesky.mkl \
@@ -194,7 +197,8 @@ mkl :: slinpack.mkl dlinpack.mkl clinpack.mkl zlinpack.mkl \
194197
sgesv.mkl dgesv.mkl cgesv.mkl zgesv.mkl \
195198
sgetri.mkl dgetri.mkl cgetri.mkl zgetri.mkl \
196199
spotrf.mkl dpotrf.mkl cpotrf.mkl zpotrf.mkl \
197-
ssymm.mkl dsymm.mkl csymm.mkl zsymm.mkl
200+
ssymm.mkl dsymm.mkl csymm.mkl zsymm.mkl \
201+
saxpby.goto daxpby.goto caxpby.goto zaxpby.goto
198202

199203
else
200204

@@ -229,6 +233,7 @@ goto :: sgemm.goto dgemm.goto cgemm.goto zgemm.goto \
229233
ssymm.goto dsymm.goto csymm.goto zsymm.goto \
230234
smallscaling \
231235
isamax.goto idamax.goto icamax.goto izamax.goto \
236+
saxpby.goto daxpby.goto caxpby.goto zaxpby.goto \
232237
snrm2.goto dnrm2.goto scnrm2.goto dznrm2.goto $(GOTO_LAPACK_TARGETS)
233238

234239
acml :: slinpack.acml dlinpack.acml clinpack.acml zlinpack.acml \
@@ -265,7 +270,8 @@ acml :: slinpack.acml dlinpack.acml clinpack.acml zlinpack.acml \
265270
sgesv.acml dgesv.acml cgesv.acml zgesv.acml \
266271
sgetri.acml dgetri.acml cgetri.acml zgetri.acml \
267272
spotrf.acml dpotrf.acml cpotrf.acml zpotrf.acml \
268-
ssymm.acml dsymm.acml csymm.acml zsymm.acml
273+
ssymm.acml dsymm.acml csymm.acml zsymm.acml \
274+
saxpby.goto daxpby.goto caxpby.goto zaxpby.goto
269275

270276
atlas :: slinpack.atlas dlinpack.atlas clinpack.atlas zlinpack.atlas \
271277
scholesky.atlas dcholesky.atlas ccholesky.atlas zcholesky.atlas \
@@ -304,7 +310,8 @@ atlas :: slinpack.atlas dlinpack.atlas clinpack.atlas zlinpack.atlas \
304310
spotrf.atlas dpotrf.atlas cpotrf.atlas zpotrf.atlas \
305311
ssymm.atlas dsymm.atlas csymm.atlas zsymm.atlas \
306312
isamax.atlas idamax.atlas icamax.atlas izamax.atlas \
307-
snrm2.goto dnrm2.goto scnrm2.goto dznrm2.goto
313+
snrm2.goto dnrm2.goto scnrm2.goto dznrm2.goto \
314+
saxpby.goto daxpby.goto caxpby.goto zaxpby.goto
308315

309316
mkl :: slinpack.mkl dlinpack.mkl clinpack.mkl zlinpack.mkl \
310317
scholesky.mkl dcholesky.mkl ccholesky.mkl zcholesky.mkl \
@@ -340,7 +347,8 @@ mkl :: slinpack.mkl dlinpack.mkl clinpack.mkl zlinpack.mkl \
340347
sgesv.mkl dgesv.mkl cgesv.mkl zgesv.mkl \
341348
sgetri.mkl dgetri.mkl cgetri.mkl zgetri.mkl \
342349
spotrf.mkl dpotrf.mkl cpotrf.mkl zpotrf.mkl \
343-
ssymm.mkl dsymm.mkl csymm.mkl zsymm.mkl
350+
ssymm.mkl dsymm.mkl csymm.mkl zsymm.mkl \
351+
saxpby.goto daxpby.goto caxpby.goto zaxpby.goto
344352

345353

346354

@@ -387,7 +395,8 @@ veclib :: slinpack.veclib dlinpack.veclib clinpack.veclib zlinpack.veclib \
387395
sgesv.veclib dgesv.veclib cgesv.veclib zgesv.veclib \
388396
sgetri.veclib dgetri.veclib cgetri.veclib zgetri.veclib \
389397
spotrf.veclib dpotrf.veclib cpotrf.veclib zpotrf.veclib \
390-
ssymm.veclib dsymm.veclib csymm.veclib zsymm.veclib
398+
ssymm.veclib dsymm.veclib csymm.veclib zsymm.veclib \
399+
saxpby.goto daxpby.goto caxpby.goto zaxpby.goto
391400

392401
goto_3m :: cgemm3m.goto zgemm3m.goto
393402

@@ -2062,7 +2071,72 @@ zaxpy.mkl : zaxpy.$(SUFFIX)
20622071
zaxpy.veclib : zaxpy.$(SUFFIX)
20632072
-$(CC) $(CFLAGS) -o $(@F) $^ $(LIBVECLIB) $(CEXTRALIB) $(EXTRALIB) $(FEXTRALIB)
20642073

2074+
##################################### Saxpby ####################################################
2075+
saxpby.goto : saxpby.$(SUFFIX) ../$(LIBNAME)
2076+
$(CC) $(CFLAGS) -o $(@F) $^ $(CEXTRALIB) $(EXTRALIB) $(FEXTRALIB) -lm
2077+
2078+
saxpby.acml : saxpby.$(SUFFIX)
2079+
-$(CC) $(CFLAGS) -o $(@F) $^ $(LIBACML) $(CEXTRALIB) $(EXTRALIB) $(FEXTRALIB)
2080+
2081+
saxpby.atlas : saxpby.$(SUFFIX)
2082+
-$(CC) $(CFLAGS) -o $(@F) $^ $(LIBATLAS) $(CEXTRALIB) $(EXTRALIB) $(FEXTRALIB)
2083+
2084+
saxpby.mkl : saxpby.$(SUFFIX)
2085+
-$(CC) $(CFLAGS) -o $(@F) $^ $(LIBMKL) $(CEXTRALIB) $(EXTRALIB) $(FEXTRALIB)
2086+
2087+
saxpby.veclib : saxpby.$(SUFFIX)
2088+
-$(CC) $(CFLAGS) -o $(@F) $^ $(LIBVECLIB) $(CEXTRALIB) $(EXTRALIB) $(FEXTRALIB)
2089+
2090+
##################################### Daxpby ####################################################
2091+
daxpby.goto : daxpby.$(SUFFIX) ../$(LIBNAME)
2092+
$(CC) $(CFLAGS) -o $(@F) $^ $(CEXTRALIB) $(EXTRALIB) $(FEXTRALIB) -lm
2093+
2094+
daxpby.acml : daxpby.$(SUFFIX)
2095+
-$(CC) $(CFLAGS) -o $(@F) $^ $(LIBACML) $(CEXTRALIB) $(EXTRALIB) $(FEXTRALIB)
2096+
2097+
daxpby.atlas : daxpby.$(SUFFIX)
2098+
-$(CC) $(CFLAGS) -o $(@F) $^ $(LIBATLAS) $(CEXTRALIB) $(EXTRALIB) $(FEXTRALIB)
2099+
2100+
daxpby.mkl : daxpby.$(SUFFIX)
2101+
-$(CC) $(CFLAGS) -o $(@F) $^ $(LIBMKL) $(CEXTRALIB) $(EXTRALIB) $(FEXTRALIB)
2102+
2103+
daxpby.veclib : daxpby.$(SUFFIX)
2104+
-$(CC) $(CFLAGS) -o $(@F) $^ $(LIBVECLIB) $(CEXTRALIB) $(EXTRALIB) $(FEXTRALIB)
2105+
2106+
##################################### Caxpby ####################################################
2107+
2108+
caxpby.goto : caxpby.$(SUFFIX) ../$(LIBNAME)
2109+
$(CC) $(CFLAGS) -o $(@F) $^ $(CEXTRALIB) $(EXTRALIB) $(FEXTRALIB) -lm
2110+
2111+
caxpby.acml : caxpby.$(SUFFIX)
2112+
-$(CC) $(CFLAGS) -o $(@F) $^ $(LIBACML) $(CEXTRALIB) $(EXTRALIB) $(FEXTRALIB)
20652113

2114+
caxpby.atlas : caxpby.$(SUFFIX)
2115+
-$(CC) $(CFLAGS) -o $(@F) $^ $(LIBATLAS) $(CEXTRALIB) $(EXTRALIB) $(FEXTRALIB)
2116+
2117+
caxpby.mkl : caxpby.$(SUFFIX)
2118+
-$(CC) $(CFLAGS) -o $(@F) $^ $(LIBMKL) $(CEXTRALIB) $(EXTRALIB) $(FEXTRALIB)
2119+
2120+
caxpby.veclib : caxpby.$(SUFFIX)
2121+
-$(CC) $(CFLAGS) -o $(@F) $^ $(LIBVECLIB) $(CEXTRALIB) $(EXTRALIB) $(FEXTRALIB)
2122+
2123+
##################################### Zaxpby ####################################################
2124+
2125+
zaxpby.goto : zaxpby.$(SUFFIX) ../$(LIBNAME)
2126+
$(CC) $(CFLAGS) -o $(@F) $^ $(CEXTRALIB) $(EXTRALIB) $(FEXTRALIB) -lm
2127+
2128+
zaxpby.acml : zaxpby.$(SUFFIX)
2129+
-$(CC) $(CFLAGS) -o $(@F) $^ $(LIBACML) $(CEXTRALIB) $(EXTRALIB) $(FEXTRALIB)
2130+
2131+
zaxpby.atlas : zaxpby.$(SUFFIX)
2132+
-$(CC) $(CFLAGS) -o $(@F) $^ $(LIBATLAS) $(CEXTRALIB) $(EXTRALIB) $(FEXTRALIB)
2133+
2134+
zaxpby.mkl : zaxpby.$(SUFFIX)
2135+
-$(CC) $(CFLAGS) -o $(@F) $^ $(LIBMKL) $(CEXTRALIB) $(EXTRALIB) $(FEXTRALIB)
2136+
2137+
zaxpby.veclib : zaxpby.$(SUFFIX)
2138+
-$(CC) $(CFLAGS) -o $(@F) $^ $(LIBVECLIB) $(CEXTRALIB) $(EXTRALIB) $(FEXTRALIB)
2139+
20662140
##################################### Scopy ####################################################
20672141
scopy.goto : scopy.$(SUFFIX) ../$(LIBNAME)
20682142
$(CC) $(CFLAGS) -o $(@F) $^ $(CEXTRALIB) $(EXTRALIB) $(FEXTRALIB) -lm
@@ -2761,6 +2835,18 @@ caxpy.$(SUFFIX) : axpy.c
27612835
zaxpy.$(SUFFIX) : axpy.c
27622836
$(CC) $(CFLAGS) -c -DCOMPLEX -DDOUBLE -o $(@F) $^
27632837

2838+
saxpby.$(SUFFIX) : axpby.c
2839+
$(CC) $(CFLAGS) -c -UCOMPLEX -UDOUBLE -o $(@F) $^
2840+
2841+
daxpby.$(SUFFIX) : axpby.c
2842+
$(CC) $(CFLAGS) -c -UCOMPLEX -DDOUBLE -o $(@F) $^
2843+
2844+
caxpby.$(SUFFIX) : axpby.c
2845+
$(CC) $(CFLAGS) -c -DCOMPLEX -UDOUBLE -o $(@F) $^
2846+
2847+
zaxpby.$(SUFFIX) : axpby.c
2848+
$(CC) $(CFLAGS) -c -DCOMPLEX -DDOUBLE -o $(@F) $^
2849+
27642850
scopy.$(SUFFIX) : copy.c
27652851
$(CC) $(CFLAGS) -c -UCOMPLEX -UDOUBLE -o $(@F) $^
27662852

benchmark/axpby.c

Lines changed: 202 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,202 @@
1+
/***************************************************************************
2+
Copyright (c) 2014, The OpenBLAS Project
3+
All rights reserved.
4+
Redistribution and use in source and binary forms, with or without
5+
modification, are permitted provided that the following conditions are
6+
met:
7+
1. Redistributions of source code must retain the above copyright
8+
notice, this list of conditions and the following disclaimer.
9+
2. Redistributions in binary form must reproduce the above copyright
10+
notice, this list of conditions and the following disclaimer in
11+
the documentation and/or other materials provided with the
12+
distribution.
13+
3. Neither the name of the OpenBLAS project nor the names of
14+
its contributors may be used to endorse or promote products
15+
derived from this software without specific prior written permission.
16+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
17+
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18+
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19+
ARE DISCLAIMED. IN NO EVENT SHALL THE OPENBLAS PROJECT OR CONTRIBUTORS BE
20+
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
21+
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
22+
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
23+
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
24+
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
25+
USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26+
*****************************************************************************/
27+
28+
#include <stdio.h>
29+
#include <stdlib.h>
30+
#ifdef __CYGWIN32__
31+
#include <sys/time.h>
32+
#endif
33+
#include "common.h"
34+
35+
36+
#undef AXPBY
37+
38+
#ifdef COMPLEX
39+
#ifdef DOUBLE
40+
#define AXPBY BLASFUNC(zaxpby)
41+
#else
42+
#define AXPBY BLASFUNC(caxpby)
43+
#endif
44+
#else
45+
#ifdef DOUBLE
46+
#define AXPBY BLASFUNC(daxpby)
47+
#else
48+
#define AXPBY BLASFUNC(saxpby)
49+
#endif
50+
#endif
51+
52+
#if defined(__WIN32__) || defined(__WIN64__)
53+
54+
#ifndef DELTA_EPOCH_IN_MICROSECS
55+
#define DELTA_EPOCH_IN_MICROSECS 11644473600000000ULL
56+
#endif
57+
58+
int gettimeofday(struct timeval *tv, void *tz){
59+
60+
FILETIME ft;
61+
unsigned __int64 tmpres = 0;
62+
static int tzflag;
63+
64+
if (NULL != tv)
65+
{
66+
GetSystemTimeAsFileTime(&ft);
67+
68+
tmpres |= ft.dwHighDateTime;
69+
tmpres <<= 32;
70+
tmpres |= ft.dwLowDateTime;
71+
72+
/*converting file time to unix epoch*/
73+
tmpres /= 10; /*convert into microseconds*/
74+
tmpres -= DELTA_EPOCH_IN_MICROSECS;
75+
tv->tv_sec = (long)(tmpres / 1000000UL);
76+
tv->tv_usec = (long)(tmpres % 1000000UL);
77+
}
78+
79+
return 0;
80+
}
81+
82+
#endif
83+
84+
#if !defined(__WIN32__) && !defined(__WIN64__) && !defined(__CYGWIN32__) && 0
85+
86+
static void *huge_malloc(BLASLONG size){
87+
int shmid;
88+
void *address;
89+
90+
#ifndef SHM_HUGETLB
91+
#define SHM_HUGETLB 04000
92+
#endif
93+
94+
if ((shmid =shmget(IPC_PRIVATE,
95+
(size + HUGE_PAGESIZE) & ~(HUGE_PAGESIZE - 1),
96+
SHM_HUGETLB | IPC_CREAT |0600)) < 0) {
97+
printf( "Memory allocation failed(shmget).\n");
98+
exit(1);
99+
}
100+
101+
address = shmat(shmid, NULL, SHM_RND);
102+
103+
if ((BLASLONG)address == -1){
104+
printf( "Memory allocation failed(shmat).\n");
105+
exit(1);
106+
}
107+
108+
shmctl(shmid, IPC_RMID, 0);
109+
110+
return address;
111+
}
112+
113+
#define malloc huge_malloc
114+
115+
#endif
116+
117+
int main(int argc, char *argv[]){
118+
119+
FLOAT *x, *y;
120+
FLOAT alpha[2] = { 2.0, 2.0 };
121+
FLOAT beta[2] = {2.0, 2.0};
122+
blasint m, i;
123+
blasint inc_x=1,inc_y=1;
124+
int loops = 1;
125+
int l;
126+
char *p;
127+
128+
int from = 1;
129+
int to = 200;
130+
int step = 1;
131+
132+
struct timeval start, stop;
133+
double time1,timeg;
134+
135+
argc--;argv++;
136+
137+
if (argc > 0) { from = atol(*argv); argc--; argv++;}
138+
if (argc > 0) { to = MAX(atol(*argv), from); argc--; argv++;}
139+
if (argc > 0) { step = atol(*argv); argc--; argv++;}
140+
141+
if ((p = getenv("OPENBLAS_LOOPS"))) loops = atoi(p);
142+
if ((p = getenv("OPENBLAS_INCX"))) inc_x = atoi(p);
143+
if ((p = getenv("OPENBLAS_INCY"))) inc_y = atoi(p);
144+
145+
fprintf(stderr, "From : %3d To : %3d Step = %3d Inc_x = %d Inc_y = %d Loops = %d\n", from, to, step,inc_x,inc_y,loops);
146+
147+
if (( x = (FLOAT *)malloc(sizeof(FLOAT) * to * abs(inc_x) * COMPSIZE)) == NULL){
148+
fprintf(stderr,"Out of Memory!!\n");exit(1);
149+
}
150+
151+
if (( y = (FLOAT *)malloc(sizeof(FLOAT) * to * abs(inc_y) * COMPSIZE)) == NULL){
152+
fprintf(stderr,"Out of Memory!!\n");exit(1);
153+
}
154+
155+
#ifdef linux
156+
srandom(getpid());
157+
#endif
158+
159+
fprintf(stderr, " SIZE Flops\n");
160+
161+
for(m = from; m <= to; m += step)
162+
{
163+
164+
timeg=0;
165+
166+
fprintf(stderr, " %6d : ", (int)m);
167+
168+
169+
for(i = 0; i < m * COMPSIZE * abs(inc_x); i++){
170+
x[i] = ((FLOAT) rand() / (FLOAT) RAND_MAX) - 0.5;
171+
}
172+
173+
for(i = 0; i < m * COMPSIZE * abs(inc_y); i++){
174+
y[i] = ((FLOAT) rand() / (FLOAT) RAND_MAX) - 0.5;
175+
}
176+
177+
for (l=0; l<loops; l++)
178+
{
179+
gettimeofday( &start, (struct timezone *)0);
180+
181+
AXPBY (&m, alpha, x, &inc_x, beta, y, &inc_y );
182+
183+
gettimeofday( &stop, (struct timezone *)0);
184+
185+
time1 = (double)(stop.tv_sec - start.tv_sec) + (double)((stop.tv_usec - start.tv_usec)) * 1.e-6;
186+
187+
timeg += time1;
188+
189+
}
190+
191+
timeg /= loops;
192+
193+
fprintf(stderr,
194+
" %10.2f MFlops %10.6f sec\n",
195+
(COMPSIZE * COMPSIZE * 4. - COMPSIZE) * (double)m / timeg * 1.e-6, timeg);
196+
197+
}
198+
199+
return 0;
200+
}
201+
202+
// void main(int argc, char *argv[]) __attribute__((weak, alias("MAIN__")));

0 commit comments

Comments
 (0)