Skip to content

Commit e0df948

Browse files
Add benchmark file rotm.c and modify benchmark/Makefile to test s/drotm
modified: benchmark/Makefile new file: benchmark/rotm.c
1 parent ad9e531 commit e0df948

2 files changed

Lines changed: 254 additions & 0 deletions

File tree

benchmark/Makefile

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ goto :: slinpack.goto dlinpack.goto clinpack.goto zlinpack.goto \
6262
sger.goto dger.goto cger.goto zger.goto \
6363
sdot.goto ddot.goto \
6464
srot.goto drot.goto \
65+
srotm.goto drotm.goto \
6566
saxpy.goto daxpy.goto caxpy.goto zaxpy.goto \
6667
scopy.goto dcopy.goto ccopy.goto zcopy.goto \
6768
sswap.goto dswap.goto cswap.goto zswap.goto \
@@ -90,6 +91,7 @@ acml :: slinpack.acml dlinpack.acml clinpack.acml zlinpack.acml \
9091
ssyr2k.acml dsyr2k.acml csyr2k.acml zsyr2k.acml \
9192
sger.acml dger.acml cger.acml zger.acml \
9293
sdot.acml ddot.acml \
94+
srotm.acml drotm.acml \
9395
saxpy.acml daxpy.acml caxpy.acml zaxpy.acml \
9496
scopy.acml dcopy.acml ccopy.acml zcopy.acml \
9597
sswap.acml dswap.acml cswap.acml zswap.acml \
@@ -118,6 +120,7 @@ atlas :: slinpack.atlas dlinpack.atlas clinpack.atlas zlinpack.atlas \
118120
ssyr2k.atlas dsyr2k.atlas csyr2k.atlas zsyr2k.atlas \
119121
sger.atlas dger.atlas cger.atlas zger.atlas\
120122
sdot.atlas ddot.atlas \
123+
srotm.atlas drotm.atlas \
121124
saxpy.atlas daxpy.atlas caxpy.atlas zaxpy.atlas \
122125
scopy.atlas dcopy.atlas ccopy.atlas zcopy.atlas \
123126
sswap.atlas dswap.atlas cswap.atlas zswap.atlas \
@@ -147,6 +150,7 @@ mkl :: slinpack.mkl dlinpack.mkl clinpack.mkl zlinpack.mkl \
147150
ssyr2k.mkl dsyr2k.mkl csyr2k.mkl zsyr2k.mkl \
148151
sger.mkl dger.mkl cger.mkl zger.mkl \
149152
sdot.mkl ddot.mkl \
153+
srotm.mkl drotm.mkl \
150154
saxpy.mkl daxpy.mkl caxpy.mkl zaxpy.mkl \
151155
scopy.mkl dcopy.mkl ccopy.mkl zcopy.mkl \
152156
sswap.mkl dswap.mkl cswap.mkl zswap.mkl \
@@ -176,6 +180,7 @@ goto :: sgemm.goto dgemm.goto cgemm.goto zgemm.goto \
176180
sger.goto dger.goto cger.goto zger.goto \
177181
sdot.goto ddot.goto cdot.goto zdot.goto \
178182
srot.goto drot.goto \
183+
srotm.goto drotm.goto \
179184
saxpy.goto daxpy.goto caxpy.goto zaxpy.goto \
180185
scopy.goto dcopy.goto ccopy.goto zcopy.goto \
181186
sswap.goto dswap.goto cswap.goto zswap.goto \
@@ -203,6 +208,7 @@ acml :: slinpack.acml dlinpack.acml clinpack.acml zlinpack.acml \
203208
ssyr2k.acml dsyr2k.acml csyr2k.acml zsyr2k.acml \
204209
sger.acml dger.acml cger.acml zger.acml \
205210
sdot.acml ddot.acml \
211+
srotm.acml drotm.acml \
206212
saxpy.acml daxpy.acml caxpy.acml zaxpy.acml \
207213
scopy.acml dcopy.acml ccopy.acml zcopy.acml \
208214
sswap.acml dswap.acml cswap.acml zswap.acml \
@@ -231,6 +237,7 @@ atlas :: slinpack.atlas dlinpack.atlas clinpack.atlas zlinpack.atlas \
231237
ssyr2k.atlas dsyr2k.atlas csyr2k.atlas zsyr2k.atlas \
232238
sger.atlas dger.atlas cger.atlas zger.atlas\
233239
sdot.atlas ddot.atlas \
240+
srotm.atlas drotm.atlas \
234241
saxpy.atlas daxpy.atlas caxpy.atlas zaxpy.atlas \
235242
scopy.atlas dcopy.atlas ccopy.atlas zcopy.atlas \
236243
sswap.atlas dswap.atlas cswap.atlas zswap.atlas \
@@ -262,6 +269,7 @@ mkl :: slinpack.mkl dlinpack.mkl clinpack.mkl zlinpack.mkl \
262269
ssyr2k.mkl dsyr2k.mkl csyr2k.mkl zsyr2k.mkl \
263270
sger.mkl dger.mkl cger.mkl zger.mkl \
264271
sdot.mkl ddot.mkl cdot.mkl zdot.mkl \
272+
srotm.atlas drotm.atlas \
265273
saxpy.mkl daxpy.mkl caxpy.mkl zaxpy.mkl \
266274
scopy.mkl dcopy.mkl ccopy.mkl zcopy.mkl \
267275
sswap.mkl dswap.mkl cswap.mkl zswap.mkl \
@@ -301,6 +309,7 @@ veclib :: slinpack.veclib dlinpack.veclib clinpack.veclib zlinpack.veclib \
301309
ssyr2k.veclib dsyr2k.veclib csyr2k.veclib zsyr2k.veclib \
302310
sger.veclib dger.veclib cger.veclib zger.veclib \
303311
sdot.veclib ddot.veclib cdot.veclib zdot.veclib \
312+
srotm.veclib drotm.veclib \
304313
saxpy.veclib daxpy.veclib caxpy.veclib zaxpy.veclib \
305314
scopy.veclib dcopy.veclib ccopy.veclib zcopy.veclib \
306315
sswap.veclib dswap.veclib cswap.veclib zswap.veclib \
@@ -1639,6 +1648,37 @@ drot.mkl : drot.$(SUFFIX)
16391648
drot.veclib : drot.$(SUFFIX)
16401649
$(CC) $(CFLAGS) -o $(@F) $^ $(LIBVECLIB) $(CEXTRALIB) $(EXTRALIB) $(FEXTRALIB)
16411650

1651+
##################################### srotm ####################################################
1652+
srotm.goto : srotm.$(SUFFIX) ../$(LIBNAME)
1653+
$(CC) $(CFLAGS) -o $(@F) $^ $(CEXTRALIB) $(EXTRALIB) $(FEXTRALIB) -lm
1654+
1655+
srotm.acml : srotm.$(SUFFIX)
1656+
$(CC) $(CFLAGS) -o $(@F) $^ $(LIBACML) $(CEXTRALIB) $(EXTRALIB) $(FEXTRALIB)
1657+
1658+
srotm.atlas : srotm.$(SUFFIX)
1659+
$(CC) $(CFLAGS) -o $(@F) $^ $(LIBATLAS) $(CEXTRALIB) $(EXTRALIB) $(FEXTRALIB)
1660+
1661+
srotm.mkl : srotm.$(SUFFIX)
1662+
$(CC) $(CFLAGS) -o $(@F) $^ $(LIBMKL) $(CEXTRALIB) $(EXTRALIB) $(FEXTRALIB)
1663+
1664+
srotm.veclib : srotm.$(SUFFIX)
1665+
$(CC) $(CFLAGS) -o $(@F) $^ $(LIBVECLIB) $(CEXTRALIB) $(EXTRALIB) $(FEXTRALIB)
1666+
1667+
##################################### drotm ####################################################
1668+
drotm.goto : drotm.$(SUFFIX) ../$(LIBNAME)
1669+
$(CC) $(CFLAGS) -o $(@F) $^ $(CEXTRALIB) $(EXTRALIB) $(FEXTRALIB) -lm
1670+
1671+
drotm.acml : drotm.$(SUFFIX)
1672+
$(CC) $(CFLAGS) -o $(@F) $^ $(LIBACML) $(CEXTRALIB) $(EXTRALIB) $(FEXTRALIB)
1673+
1674+
drotm.atlas : drotm.$(SUFFIX)
1675+
$(CC) $(CFLAGS) -o $(@F) $^ $(LIBATLAS) $(CEXTRALIB) $(EXTRALIB) $(FEXTRALIB)
1676+
1677+
drotm.mkl : drotm.$(SUFFIX)
1678+
$(CC) $(CFLAGS) -o $(@F) $^ $(LIBMKL) $(CEXTRALIB) $(EXTRALIB) $(FEXTRALIB)
1679+
1680+
drotm.veclib : drotm.$(SUFFIX)
1681+
$(CC) $(CFLAGS) -o $(@F) $^ $(LIBVECLIB) $(CEXTRALIB) $(EXTRALIB) $(FEXTRALIB)
16421682

16431683
##################################### Saxpy ####################################################
16441684
saxpy.goto : saxpy.$(SUFFIX) ../$(LIBNAME)
@@ -2432,7 +2472,11 @@ srot.$(SUFFIX) : rot.c
24322472
drot.$(SUFFIX) : rot.c
24332473
$(CC) $(CFLAGS) -c -UCOMPLEX -DDOUBLE -o $(@F) $^
24342474

2475+
srotm.$(SUFFIX) : rotm.c
2476+
$(CC) $(CFLAGS) -c -UCOMPLEX -UDOUBLE -o $(@F) $^
24352477

2478+
drotm.$(SUFFIX) : rotm.c
2479+
$(CC) $(CFLAGS) -c -UCOMPLEX -DDOUBLE -o $(@F) $^
24362480

24372481

24382482

benchmark/rotm.c

Lines changed: 210 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,210 @@
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
21+
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
22+
GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
23+
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
24+
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
25+
THE 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+
#undef ROTM
36+
37+
#ifdef DOUBLE
38+
#define ROTM BLASFUNC(drotm)
39+
#else
40+
#define ROTM BLASFUNC(srotm)
41+
#endif
42+
43+
#if defined(__WIN32__) || defined(__WIN64__)
44+
45+
#ifndef DELTA_EPOCH_IN_MICROSECS
46+
#define DELTA_EPOCH_IN_MICROSECS 11644473600000000ULL
47+
#endif
48+
49+
int gettimeofday(struct timeval *tv, void *tz)
50+
{
51+
52+
FILETIME ft;
53+
unsigned __int64 tmpres = 0;
54+
static int tzflag;
55+
56+
if (NULL != tv) {
57+
GetSystemTimeAsFileTime(&ft);
58+
59+
tmpres |= ft.dwHighDateTime;
60+
tmpres <<= 32;
61+
tmpres |= ft.dwLowDateTime;
62+
63+
/*converting file time to unix epoch*/
64+
tmpres /= 10; /*convert into microseconds*/
65+
tmpres -= DELTA_EPOCH_IN_MICROSECS;
66+
tv->tv_sec = (long)(tmpres / 1000000UL);
67+
tv->tv_usec = (long)(tmpres % 1000000UL);
68+
}
69+
70+
return 0;
71+
}
72+
73+
#endif
74+
75+
#if !defined(__WIN32__) && !defined(__WIN64__) && !defined(__CYGWIN32__) && 0
76+
77+
static void *huge_malloc(BLASLONG size)
78+
{
79+
int shmid;
80+
void *address;
81+
82+
#ifndef SHM_HUGETLB
83+
#define SHM_HUGETLB 04000
84+
#endif
85+
86+
if ((shmid =
87+
shmget(IPC_PRIVATE, (size + HUGE_PAGESIZE) & ~(HUGE_PAGESIZE - 1),
88+
SHM_HUGETLB | IPC_CREAT | 0600)) < 0) {
89+
printf("Memory allocation failed(shmget).\n");
90+
exit(1);
91+
}
92+
93+
address = shmat(shmid, NULL, SHM_RND);
94+
95+
if ((BLASLONG)address == -1) {
96+
printf("Memory allocation failed(shmat).\n");
97+
exit(1);
98+
}
99+
100+
shmctl(shmid, IPC_RMID, 0);
101+
102+
return address;
103+
}
104+
105+
#define malloc huge_malloc
106+
107+
#endif
108+
109+
int main(int argc, char *argv[])
110+
{
111+
112+
FLOAT *x, *y;
113+
// FLOAT result;
114+
blasint m, i;
115+
blasint inc_x = 1, inc_y = 1;
116+
FLOAT param[5] = {1, 2.0, 3.0, 4.0, 5.0};
117+
int loops = 1;
118+
int l;
119+
char *p;
120+
121+
int from = 1;
122+
int to = 200;
123+
int step = 1;
124+
125+
struct timeval start, stop;
126+
double time1, timeg;
127+
128+
argc--;
129+
argv++;
130+
131+
if (argc > 0) {
132+
from = atol(*argv);
133+
argc--;
134+
argv++;
135+
}
136+
if (argc > 0) {
137+
to = MAX(atol(*argv), from);
138+
argc--;
139+
argv++;
140+
}
141+
if (argc > 0) {
142+
step = atol(*argv);
143+
argc--;
144+
argv++;
145+
}
146+
147+
if ((p = getenv("OPENBLAS_LOOPS")))
148+
loops = atoi(p);
149+
if ((p = getenv("OPENBLAS_INCX")))
150+
inc_x = atoi(p);
151+
if ((p = getenv("OPENBLAS_INCY")))
152+
inc_y = atoi(p);
153+
154+
fprintf(
155+
stderr,
156+
"From : %3d To : %3d Step = %3d Inc_x = %d Inc_y = %d Loops = %d\n",
157+
from, to, step, inc_x, inc_y, loops);
158+
159+
if ((x = (FLOAT *)malloc(sizeof(FLOAT) * to * abs(inc_x) * COMPSIZE)) ==
160+
NULL) {
161+
fprintf(stderr, "Out of Memory!!\n");
162+
exit(1);
163+
}
164+
165+
if ((y = (FLOAT *)malloc(sizeof(FLOAT) * to * abs(inc_y) * COMPSIZE)) ==
166+
NULL) {
167+
fprintf(stderr, "Out of Memory!!\n");
168+
exit(1);
169+
}
170+
171+
#ifdef linux
172+
srandom(getpid());
173+
#endif
174+
175+
fprintf(stderr, " SIZE Flops\n");
176+
177+
for (m = from; m <= to; m += step) {
178+
179+
timeg = 0;
180+
181+
fprintf(stderr, " %6d : ", (int)m);
182+
for (i = 0; i < m * COMPSIZE * abs(inc_x); i++) {
183+
x[i] = ((FLOAT)rand() / (FLOAT)RAND_MAX) - 0.5;
184+
}
185+
186+
for (i = 0; i < m * COMPSIZE * abs(inc_y); i++) {
187+
y[i] = ((FLOAT)rand() / (FLOAT)RAND_MAX) - 0.5;
188+
}
189+
190+
for (l = 0; l < loops; l++) {
191+
gettimeofday(&start, (struct timezone *)0);
192+
193+
ROTM(&m, x, &inc_x, y, &inc_y, param);
194+
195+
gettimeofday(&stop, (struct timezone *)0);
196+
197+
time1 = (double)(stop.tv_sec - start.tv_sec) +
198+
(double)((stop.tv_usec - start.tv_usec)) * 1.e-6;
199+
200+
timeg += time1;
201+
}
202+
203+
timeg /= loops;
204+
205+
fprintf(stderr, " %10.2f MFlops %10.6f sec\n",
206+
COMPSIZE * COMPSIZE * 6. * (double)m / timeg * 1.e-6, timeg);
207+
}
208+
209+
return 0;
210+
}

0 commit comments

Comments
 (0)