Skip to content

Commit 23fbc57

Browse files
committed
added blas level1 copy benchmark
1 parent 22dcd79 commit 23fbc57

File tree

3 files changed

+291
-0
lines changed

3 files changed

+291
-0
lines changed

benchmark/Makefile

+85
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ goto :: slinpack.goto dlinpack.goto clinpack.goto zlinpack.goto \
4343
sger.goto dger.goto cger.goto zger.goto \
4444
sdot.goto ddot.goto cdot.goto zdot.goto \
4545
saxpy.goto daxpy.goto caxpy.goto zaxpy.goto \
46+
scopy.goto dcopy.goto ccopy.goto zcopy.goto \
4647
sscal.goto dscal.goto cscal.goto zscal.goto \
4748
sasum.goto dasum.goto casum.goto zasum.goto \
4849
ssymv.goto dsymv.goto csymv.goto zsymv.goto \
@@ -66,6 +67,7 @@ acml :: slinpack.acml dlinpack.acml clinpack.acml zlinpack.acml \
6667
sger.acml dger.acml cger.acml zger.acml \
6768
sdot.acml ddot.acml cdot.acml zdot.acml \
6869
saxpy.acml daxpy.acml caxpy.acml zaxpy.acml \
70+
scopy.acml dcopy.acml ccopy.acml zcopy.acml \
6971
sscal.acml dscal.acml cscal.acml zscal.acml \
7072
sasum.acml dasum.acml casum.acml zasum.acml \
7173
ssymv.acml dsymv.acml csymv.acml zsymv.acml \
@@ -89,6 +91,7 @@ atlas :: slinpack.atlas dlinpack.atlas clinpack.atlas zlinpack.atlas \
8991
sger.atlas dger.atlas cger.atlas zger.atlas\
9092
sdot.atlas ddot.atlas \
9193
saxpy.atlas daxpy.atlas caxpy.atlas zaxpy.atlas \
94+
scopy.atlas dcopy.atlas ccopy.atlas zcopy.atlas \
9295
sscal.atlas dscal.atlas cscal.atlas zscal.atlas \
9396
sasum.atlas dasum.atlas casum.atlas zasum.atlas \
9497
ssymv.atlas dsymv.atlas csymv.atlas zsymv.atlas \
@@ -113,6 +116,7 @@ mkl :: slinpack.mkl dlinpack.mkl clinpack.mkl zlinpack.mkl \
113116
sger.mkl dger.mkl cger.mkl zger.mkl \
114117
sdot.mkl ddot.mkl cdot.mkl zdot.mkl \
115118
saxpy.mkl daxpy.mkl caxpy.mkl zaxpy.mkl \
119+
scopy.mkl dcopy.mkl ccopy.mkl zcopy.mkl \
116120
sscal.mkl dscal.mkl cscal.mkl zscal.mkl \
117121
sasum.mkl dasum.mkl casum.mkl zasum.mkl \
118122
ssymv.mkl dsymv.mkl csymv.mkl zsymv.mkl \
@@ -136,6 +140,7 @@ veclib :: slinpack.veclib dlinpack.veclib clinpack.veclib zlinpack.veclib \
136140
sger.veclib dger.veclib cger.veclib zger.veclib \
137141
sdot.veclib ddot.veclib cdot.veclib zdot.veclib \
138142
saxpy.veclib daxpy.veclib caxpy.veclib zaxpy.veclib \
143+
scopy.veclib dcopy.veclib ccopy.veclib zcopy.veclib \
139144
sscal.veclib dscal.veclib cscal.veclib zscal.veclib \
140145
sasum.veclib dasum.veclib casum.veclib zasum.veclib \
141146
ssymv.veclib dsymv.veclib csymv.veclib zsymv.veclib \
@@ -1346,6 +1351,73 @@ zaxpy.mkl : zaxpy.$(SUFFIX)
13461351
zaxpy.veclib : zaxpy.$(SUFFIX)
13471352
-$(CC) $(CFLAGS) -o $(@F) $^ $(LIBVECLIB) $(CEXTRALIB) $(EXTRALIB) $(FEXTRALIB)
13481353

1354+
1355+
##################################### Scopy ####################################################
1356+
scopy.goto : scopy.$(SUFFIX) ../$(LIBNAME)
1357+
$(CC) $(CFLAGS) -o $(@F) $^ $(CEXTRALIB) $(EXTRALIB) -lm
1358+
1359+
scopy.acml : scopy.$(SUFFIX)
1360+
-$(CC) $(CFLAGS) -o $(@F) $^ $(LIBACML) $(CEXTRALIB) $(EXTRALIB) $(FEXTRALIB)
1361+
1362+
scopy.atlas : scopy.$(SUFFIX)
1363+
-$(CC) $(CFLAGS) -o $(@F) $^ $(LIBATLAS) $(CEXTRALIB) $(EXTRALIB) $(FEXTRALIB)
1364+
1365+
scopy.mkl : scopy.$(SUFFIX)
1366+
-$(CC) $(CFLAGS) -o $(@F) $^ $(LIBMKL) $(CEXTRALIB) $(EXTRALIB) $(FEXTRALIB)
1367+
1368+
scopy.veclib : scopy.$(SUFFIX)
1369+
-$(CC) $(CFLAGS) -o $(@F) $^ $(LIBVECLIB) $(CEXTRALIB) $(EXTRALIB) $(FEXTRALIB)
1370+
1371+
##################################### Dcopy ####################################################
1372+
dcopy.goto : dcopy.$(SUFFIX) ../$(LIBNAME)
1373+
$(CC) $(CFLAGS) -o $(@F) $^ $(CEXTRALIB) $(EXTRALIB) -lm
1374+
1375+
dcopy.acml : dcopy.$(SUFFIX)
1376+
-$(CC) $(CFLAGS) -o $(@F) $^ $(LIBACML) $(CEXTRALIB) $(EXTRALIB) $(FEXTRALIB)
1377+
1378+
dcopy.atlas : dcopy.$(SUFFIX)
1379+
-$(CC) $(CFLAGS) -o $(@F) $^ $(LIBATLAS) $(CEXTRALIB) $(EXTRALIB) $(FEXTRALIB)
1380+
1381+
dcopy.mkl : dcopy.$(SUFFIX)
1382+
-$(CC) $(CFLAGS) -o $(@F) $^ $(LIBMKL) $(CEXTRALIB) $(EXTRALIB) $(FEXTRALIB)
1383+
1384+
dcopy.veclib : dcopy.$(SUFFIX)
1385+
-$(CC) $(CFLAGS) -o $(@F) $^ $(LIBVECLIB) $(CEXTRALIB) $(EXTRALIB) $(FEXTRALIB)
1386+
1387+
##################################### Ccopy ####################################################
1388+
1389+
ccopy.goto : ccopy.$(SUFFIX) ../$(LIBNAME)
1390+
$(CC) $(CFLAGS) -o $(@F) $^ $(CEXTRALIB) $(EXTRALIB) -lm
1391+
1392+
ccopy.acml : ccopy.$(SUFFIX)
1393+
-$(CC) $(CFLAGS) -o $(@F) $^ $(LIBACML) $(CEXTRALIB) $(EXTRALIB) $(FEXTRALIB)
1394+
1395+
ccopy.atlas : ccopy.$(SUFFIX)
1396+
-$(CC) $(CFLAGS) -o $(@F) $^ $(LIBATLAS) $(CEXTRALIB) $(EXTRALIB) $(FEXTRALIB)
1397+
1398+
ccopy.mkl : ccopy.$(SUFFIX)
1399+
-$(CC) $(CFLAGS) -o $(@F) $^ $(LIBMKL) $(CEXTRALIB) $(EXTRALIB) $(FEXTRALIB)
1400+
1401+
ccopy.veclib : ccopy.$(SUFFIX)
1402+
-$(CC) $(CFLAGS) -o $(@F) $^ $(LIBVECLIB) $(CEXTRALIB) $(EXTRALIB) $(FEXTRALIB)
1403+
1404+
##################################### Zcopy ####################################################
1405+
1406+
zcopy.goto : zcopy.$(SUFFIX) ../$(LIBNAME)
1407+
$(CC) $(CFLAGS) -o $(@F) $^ $(CEXTRALIB) $(EXTRALIB) -lm
1408+
1409+
zcopy.acml : zcopy.$(SUFFIX)
1410+
-$(CC) $(CFLAGS) -o $(@F) $^ $(LIBACML) $(CEXTRALIB) $(EXTRALIB) $(FEXTRALIB)
1411+
1412+
zcopy.atlas : zcopy.$(SUFFIX)
1413+
-$(CC) $(CFLAGS) -o $(@F) $^ $(LIBATLAS) $(CEXTRALIB) $(EXTRALIB) $(FEXTRALIB)
1414+
1415+
zcopy.mkl : zcopy.$(SUFFIX)
1416+
-$(CC) $(CFLAGS) -o $(@F) $^ $(LIBMKL) $(CEXTRALIB) $(EXTRALIB) $(FEXTRALIB)
1417+
1418+
zcopy.veclib : zcopy.$(SUFFIX)
1419+
-$(CC) $(CFLAGS) -o $(@F) $^ $(LIBVECLIB) $(CEXTRALIB) $(EXTRALIB) $(FEXTRALIB)
1420+
13491421
##################################### Sscal ####################################################
13501422
sscal.goto : sscal.$(SUFFIX) ../$(LIBNAME)
13511423
$(CC) $(CFLAGS) -o $(@F) $^ $(CEXTRALIB) $(EXTRALIB) -lm
@@ -1727,6 +1799,19 @@ caxpy.$(SUFFIX) : axpy.c
17271799
zaxpy.$(SUFFIX) : axpy.c
17281800
$(CC) $(CFLAGS) -c -DCOMPLEX -DDOUBLE -o $(@F) $^
17291801

1802+
scopy.$(SUFFIX) : copy.c
1803+
$(CC) $(CFLAGS) -c -UCOMPLEX -UDOUBLE -o $(@F) $^
1804+
1805+
dcopy.$(SUFFIX) : copy.c
1806+
$(CC) $(CFLAGS) -c -UCOMPLEX -DDOUBLE -o $(@F) $^
1807+
1808+
ccopy.$(SUFFIX) : copy.c
1809+
$(CC) $(CFLAGS) -c -DCOMPLEX -UDOUBLE -o $(@F) $^
1810+
1811+
zcopy.$(SUFFIX) : copy.c
1812+
$(CC) $(CFLAGS) -c -DCOMPLEX -DDOUBLE -o $(@F) $^
1813+
1814+
17301815
sscal.$(SUFFIX) : scal.c
17311816
$(CC) $(CFLAGS) -c -UCOMPLEX -UDOUBLE -o $(@F) $^
17321817

benchmark/copy.c

+201
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,201 @@
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 COPY
37+
38+
#ifdef COMPLEX
39+
#ifdef DOUBLE
40+
#define COPY BLASFUNC(zcopy)
41+
#else
42+
#define COPY BLASFUNC(ccopy)
43+
#endif
44+
#else
45+
#ifdef DOUBLE
46+
#define COPY BLASFUNC(dcopy)
47+
#else
48+
#define COPY BLASFUNC(scopy)
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+
blasint m, i;
122+
blasint inc_x=1,inc_y=1;
123+
int loops = 1;
124+
int l;
125+
char *p;
126+
127+
int from = 1;
128+
int to = 200;
129+
int step = 1;
130+
131+
struct timeval start, stop;
132+
double time1,timeg;
133+
134+
argc--;argv++;
135+
136+
if (argc > 0) { from = atol(*argv); argc--; argv++;}
137+
if (argc > 0) { to = MAX(atol(*argv), from); argc--; argv++;}
138+
if (argc > 0) { step = atol(*argv); argc--; argv++;}
139+
140+
if ((p = getenv("OPENBLAS_LOOPS"))) loops = atoi(p);
141+
if ((p = getenv("OPENBLAS_INCX"))) inc_x = atoi(p);
142+
if ((p = getenv("OPENBLAS_INCY"))) inc_y = atoi(p);
143+
144+
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);
145+
146+
if (( x = (FLOAT *)malloc(sizeof(FLOAT) * to * abs(inc_x) * COMPSIZE)) == NULL){
147+
fprintf(stderr,"Out of Memory!!\n");exit(1);
148+
}
149+
150+
if (( y = (FLOAT *)malloc(sizeof(FLOAT) * to * abs(inc_y) * COMPSIZE)) == NULL){
151+
fprintf(stderr,"Out of Memory!!\n");exit(1);
152+
}
153+
154+
#ifdef linux
155+
srandom(getpid());
156+
#endif
157+
158+
fprintf(stderr, " SIZE Flops\n");
159+
160+
for(m = from; m <= to; m += step)
161+
{
162+
163+
timeg=0;
164+
165+
fprintf(stderr, " %6d : ", (int)m);
166+
167+
168+
for (l=0; l<loops; l++)
169+
{
170+
171+
for(i = 0; i < m * COMPSIZE * abs(inc_x); i++){
172+
x[i] = ((FLOAT) rand() / (FLOAT) RAND_MAX) - 0.5;
173+
}
174+
175+
for(i = 0; i < m * COMPSIZE * abs(inc_y); i++){
176+
y[i] = ((FLOAT) rand() / (FLOAT) RAND_MAX) - 0.5;
177+
}
178+
gettimeofday( &start, (struct timezone *)0);
179+
180+
COPY (&m, x, &inc_x, y, &inc_y );
181+
182+
gettimeofday( &stop, (struct timezone *)0);
183+
184+
time1 = (double)(stop.tv_sec - start.tv_sec) + (double)((stop.tv_usec - start.tv_usec)) * 1.e-6;
185+
186+
timeg += time1;
187+
188+
}
189+
190+
timeg /= loops;
191+
192+
fprintf(stderr,
193+
" %10.2f MBytes\n",
194+
COMPSIZE * sizeof(FLOAT) * 1. * (double)m / timeg * 1.e-6);
195+
196+
}
197+
198+
return 0;
199+
}
200+
201+
// void main(int argc, char *argv[]) __attribute__((weak, alias("MAIN__")));

benchmark/plot-filter.sh

+5
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,11 @@ C)
5252
awk '/MFlops/ { print $3,int($9) }'|tail --lines=+2
5353
;;
5454

55+
B)
56+
# Copy Benchmark
57+
awk '/MBytes/ { print $1,int($3) }'|tail --lines=+2
58+
;;
59+
5560

5661
*)
5762
awk '/MFlops/ { print $1,int($3) }'|tail --lines=+2

0 commit comments

Comments
 (0)