Skip to content

Commit 0c8162e

Browse files
committed
Add benchmark file axpby.c and modify benchmark/Makefile to test s/d/c/zaxpby
1 parent 9a94a30 commit 0c8162e

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 \
@@ -120,7 +121,8 @@ acml :: slinpack.acml dlinpack.acml clinpack.acml zlinpack.acml \
120121
sgesv.acml dgesv.acml cgesv.acml zgesv.acml \
121122
sgetri.acml dgetri.acml cgetri.acml zgetri.acml \
122123
spotrf.acml dpotrf.acml cpotrf.acml zpotrf.acml \
123-
ssymm.acml dsymm.acml csymm.acml zsymm.acml
124+
ssymm.acml dsymm.acml csymm.acml zsymm.acml \
125+
saxpby.goto daxpby.goto caxpby.goto zaxpby.goto
124126

125127
atlas :: slinpack.atlas dlinpack.atlas clinpack.atlas zlinpack.atlas \
126128
scholesky.atlas dcholesky.atlas ccholesky.atlas zcholesky.atlas \
@@ -156,7 +158,8 @@ atlas :: slinpack.atlas dlinpack.atlas clinpack.atlas zlinpack.atlas \
156158
sgesv.atlas dgesv.atlas cgesv.atlas zgesv.atlas \
157159
sgetri.atlas dgetri.atlas cgetri.atlas zgetri.atlas \
158160
spotrf.atlas dpotrf.atlas cpotrf.atlas zpotrf.atlas \
159-
ssymm.atlas dsymm.atlas csymm.atlas zsymm.atlas
161+
ssymm.atlas dsymm.atlas csymm.atlas zsymm.atlas \
162+
saxpby.goto daxpby.goto caxpby.goto zaxpby.goto
160163

161164
mkl :: slinpack.mkl dlinpack.mkl clinpack.mkl zlinpack.mkl \
162165
scholesky.mkl dcholesky.mkl ccholesky.mkl zcholesky.mkl \
@@ -191,7 +194,8 @@ mkl :: slinpack.mkl dlinpack.mkl clinpack.mkl zlinpack.mkl \
191194
sgesv.mkl dgesv.mkl cgesv.mkl zgesv.mkl \
192195
sgetri.mkl dgetri.mkl cgetri.mkl zgetri.mkl \
193196
spotrf.mkl dpotrf.mkl cpotrf.mkl zpotrf.mkl \
194-
ssymm.mkl dsymm.mkl csymm.mkl zsymm.mkl
197+
ssymm.mkl dsymm.mkl csymm.mkl zsymm.mkl \
198+
saxpby.goto daxpby.goto caxpby.goto zaxpby.goto
195199

196200
else
197201

@@ -226,6 +230,7 @@ goto :: sgemm.goto dgemm.goto cgemm.goto zgemm.goto \
226230
ssymm.goto dsymm.goto csymm.goto zsymm.goto \
227231
smallscaling \
228232
isamax.goto idamax.goto icamax.goto izamax.goto \
233+
saxpby.goto daxpby.goto caxpby.goto zaxpby.goto \
229234
snrm2.goto dnrm2.goto scnrm2.goto dznrm2.goto $(GOTO_LAPACK_TARGETS)
230235

231236
acml :: slinpack.acml dlinpack.acml clinpack.acml zlinpack.acml \
@@ -261,7 +266,8 @@ acml :: slinpack.acml dlinpack.acml clinpack.acml zlinpack.acml \
261266
sgesv.acml dgesv.acml cgesv.acml zgesv.acml \
262267
sgetri.acml dgetri.acml cgetri.acml zgetri.acml \
263268
spotrf.acml dpotrf.acml cpotrf.acml zpotrf.acml \
264-
ssymm.acml dsymm.acml csymm.acml zsymm.acml
269+
ssymm.acml dsymm.acml csymm.acml zsymm.acml \
270+
saxpby.goto daxpby.goto caxpby.goto zaxpby.goto
265271

266272
atlas :: slinpack.atlas dlinpack.atlas clinpack.atlas zlinpack.atlas \
267273
scholesky.atlas dcholesky.atlas ccholesky.atlas zcholesky.atlas \
@@ -299,7 +305,8 @@ atlas :: slinpack.atlas dlinpack.atlas clinpack.atlas zlinpack.atlas \
299305
spotrf.atlas dpotrf.atlas cpotrf.atlas zpotrf.atlas \
300306
ssymm.atlas dsymm.atlas csymm.atlas zsymm.atlas \
301307
isamax.atlas idamax.atlas icamax.atlas izamax.atlas \
302-
snrm2.goto dnrm2.goto scnrm2.goto dznrm2.goto
308+
snrm2.goto dnrm2.goto scnrm2.goto dznrm2.goto \
309+
saxpby.goto daxpby.goto caxpby.goto zaxpby.goto
303310

304311
mkl :: slinpack.mkl dlinpack.mkl clinpack.mkl zlinpack.mkl \
305312
scholesky.mkl dcholesky.mkl ccholesky.mkl zcholesky.mkl \
@@ -334,7 +341,8 @@ mkl :: slinpack.mkl dlinpack.mkl clinpack.mkl zlinpack.mkl \
334341
sgesv.mkl dgesv.mkl cgesv.mkl zgesv.mkl \
335342
sgetri.mkl dgetri.mkl cgetri.mkl zgetri.mkl \
336343
spotrf.mkl dpotrf.mkl cpotrf.mkl zpotrf.mkl \
337-
ssymm.mkl dsymm.mkl csymm.mkl zsymm.mkl
344+
ssymm.mkl dsymm.mkl csymm.mkl zsymm.mkl \
345+
saxpby.goto daxpby.goto caxpby.goto zaxpby.goto
338346

339347

340348

@@ -380,7 +388,8 @@ veclib :: slinpack.veclib dlinpack.veclib clinpack.veclib zlinpack.veclib \
380388
sgesv.veclib dgesv.veclib cgesv.veclib zgesv.veclib \
381389
sgetri.veclib dgetri.veclib cgetri.veclib zgetri.veclib \
382390
spotrf.veclib dpotrf.veclib cpotrf.veclib zpotrf.veclib \
383-
ssymm.veclib dsymm.veclib csymm.veclib zsymm.veclib
391+
ssymm.veclib dsymm.veclib csymm.veclib zsymm.veclib \
392+
saxpby.goto daxpby.goto caxpby.goto zaxpby.goto
384393

385394
goto_3m :: cgemm3m.goto zgemm3m.goto
386395

@@ -2023,7 +2032,72 @@ zaxpy.mkl : zaxpy.$(SUFFIX)
20232032
zaxpy.veclib : zaxpy.$(SUFFIX)
20242033
-$(CC) $(CFLAGS) -o $(@F) $^ $(LIBVECLIB) $(CEXTRALIB) $(EXTRALIB) $(FEXTRALIB)
20252034

2035+
##################################### Saxpby ####################################################
2036+
saxpby.goto : saxpby.$(SUFFIX) ../$(LIBNAME)
2037+
$(CC) $(CFLAGS) -o $(@F) $^ $(CEXTRALIB) $(EXTRALIB) $(FEXTRALIB) -lm
2038+
2039+
saxpby.acml : saxpby.$(SUFFIX)
2040+
-$(CC) $(CFLAGS) -o $(@F) $^ $(LIBACML) $(CEXTRALIB) $(EXTRALIB) $(FEXTRALIB)
2041+
2042+
saxpby.atlas : saxpby.$(SUFFIX)
2043+
-$(CC) $(CFLAGS) -o $(@F) $^ $(LIBATLAS) $(CEXTRALIB) $(EXTRALIB) $(FEXTRALIB)
2044+
2045+
saxpby.mkl : saxpby.$(SUFFIX)
2046+
-$(CC) $(CFLAGS) -o $(@F) $^ $(LIBMKL) $(CEXTRALIB) $(EXTRALIB) $(FEXTRALIB)
2047+
2048+
saxpby.veclib : saxpby.$(SUFFIX)
2049+
-$(CC) $(CFLAGS) -o $(@F) $^ $(LIBVECLIB) $(CEXTRALIB) $(EXTRALIB) $(FEXTRALIB)
2050+
2051+
##################################### Daxpby ####################################################
2052+
daxpby.goto : daxpby.$(SUFFIX) ../$(LIBNAME)
2053+
$(CC) $(CFLAGS) -o $(@F) $^ $(CEXTRALIB) $(EXTRALIB) $(FEXTRALIB) -lm
2054+
2055+
daxpby.acml : daxpby.$(SUFFIX)
2056+
-$(CC) $(CFLAGS) -o $(@F) $^ $(LIBACML) $(CEXTRALIB) $(EXTRALIB) $(FEXTRALIB)
2057+
2058+
daxpby.atlas : daxpby.$(SUFFIX)
2059+
-$(CC) $(CFLAGS) -o $(@F) $^ $(LIBATLAS) $(CEXTRALIB) $(EXTRALIB) $(FEXTRALIB)
2060+
2061+
daxpby.mkl : daxpby.$(SUFFIX)
2062+
-$(CC) $(CFLAGS) -o $(@F) $^ $(LIBMKL) $(CEXTRALIB) $(EXTRALIB) $(FEXTRALIB)
2063+
2064+
daxpby.veclib : daxpby.$(SUFFIX)
2065+
-$(CC) $(CFLAGS) -o $(@F) $^ $(LIBVECLIB) $(CEXTRALIB) $(EXTRALIB) $(FEXTRALIB)
2066+
2067+
##################################### Caxpby ####################################################
2068+
2069+
caxpby.goto : caxpby.$(SUFFIX) ../$(LIBNAME)
2070+
$(CC) $(CFLAGS) -o $(@F) $^ $(CEXTRALIB) $(EXTRALIB) $(FEXTRALIB) -lm
2071+
2072+
caxpby.acml : caxpby.$(SUFFIX)
2073+
-$(CC) $(CFLAGS) -o $(@F) $^ $(LIBACML) $(CEXTRALIB) $(EXTRALIB) $(FEXTRALIB)
20262074

2075+
caxpby.atlas : caxpby.$(SUFFIX)
2076+
-$(CC) $(CFLAGS) -o $(@F) $^ $(LIBATLAS) $(CEXTRALIB) $(EXTRALIB) $(FEXTRALIB)
2077+
2078+
caxpby.mkl : caxpby.$(SUFFIX)
2079+
-$(CC) $(CFLAGS) -o $(@F) $^ $(LIBMKL) $(CEXTRALIB) $(EXTRALIB) $(FEXTRALIB)
2080+
2081+
caxpby.veclib : caxpby.$(SUFFIX)
2082+
-$(CC) $(CFLAGS) -o $(@F) $^ $(LIBVECLIB) $(CEXTRALIB) $(EXTRALIB) $(FEXTRALIB)
2083+
2084+
##################################### Zaxpby ####################################################
2085+
2086+
zaxpby.goto : zaxpby.$(SUFFIX) ../$(LIBNAME)
2087+
$(CC) $(CFLAGS) -o $(@F) $^ $(CEXTRALIB) $(EXTRALIB) $(FEXTRALIB) -lm
2088+
2089+
zaxpby.acml : zaxpby.$(SUFFIX)
2090+
-$(CC) $(CFLAGS) -o $(@F) $^ $(LIBACML) $(CEXTRALIB) $(EXTRALIB) $(FEXTRALIB)
2091+
2092+
zaxpby.atlas : zaxpby.$(SUFFIX)
2093+
-$(CC) $(CFLAGS) -o $(@F) $^ $(LIBATLAS) $(CEXTRALIB) $(EXTRALIB) $(FEXTRALIB)
2094+
2095+
zaxpby.mkl : zaxpby.$(SUFFIX)
2096+
-$(CC) $(CFLAGS) -o $(@F) $^ $(LIBMKL) $(CEXTRALIB) $(EXTRALIB) $(FEXTRALIB)
2097+
2098+
zaxpby.veclib : zaxpby.$(SUFFIX)
2099+
-$(CC) $(CFLAGS) -o $(@F) $^ $(LIBVECLIB) $(CEXTRALIB) $(EXTRALIB) $(FEXTRALIB)
2100+
20272101
##################################### Scopy ####################################################
20282102
scopy.goto : scopy.$(SUFFIX) ../$(LIBNAME)
20292103
$(CC) $(CFLAGS) -o $(@F) $^ $(CEXTRALIB) $(EXTRALIB) $(FEXTRALIB) -lm
@@ -2722,6 +2796,18 @@ caxpy.$(SUFFIX) : axpy.c
27222796
zaxpy.$(SUFFIX) : axpy.c
27232797
$(CC) $(CFLAGS) -c -DCOMPLEX -DDOUBLE -o $(@F) $^
27242798

2799+
saxpby.$(SUFFIX) : axpby.c
2800+
$(CC) $(CFLAGS) -c -UCOMPLEX -UDOUBLE -o $(@F) $^
2801+
2802+
daxpby.$(SUFFIX) : axpby.c
2803+
$(CC) $(CFLAGS) -c -UCOMPLEX -DDOUBLE -o $(@F) $^
2804+
2805+
caxpby.$(SUFFIX) : axpby.c
2806+
$(CC) $(CFLAGS) -c -DCOMPLEX -UDOUBLE -o $(@F) $^
2807+
2808+
zaxpby.$(SUFFIX) : axpby.c
2809+
$(CC) $(CFLAGS) -c -DCOMPLEX -DDOUBLE -o $(@F) $^
2810+
27252811
scopy.$(SUFFIX) : copy.c
27262812
$(CC) $(CFLAGS) -c -UCOMPLEX -UDOUBLE -o $(@F) $^
27272813

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)