[description]: benchmark for her/her2 [solution]: added benchmark for her/her2, modified makefile in benchmark [dts]:tags/v0.3.10^2
@@ -78,6 +78,8 @@ goto :: slinpack.goto dlinpack.goto clinpack.goto zlinpack.goto \ | |||
chemm.goto zhemm.goto \ | |||
cherk.goto zherk.goto \ | |||
cher2k.goto zher2k.goto \ | |||
cher.goto zher.goto \ | |||
cher2.goto zher2.goto \ | |||
sgemv.goto dgemv.goto cgemv.goto zgemv.goto \ | |||
sspmv.goto dspmv.goto \ | |||
strmv.goto dtrmv.goto ctrmv.goto ztrmv.goto \ | |||
@@ -117,6 +119,8 @@ acml :: slinpack.acml dlinpack.acml clinpack.acml zlinpack.acml \ | |||
chemm.acml zhemm.acml \ | |||
cherk.acml zherk.acml \ | |||
cher2k.acml zher2k.acml \ | |||
cher.acml zher.acml \ | |||
cher2.acml zher2.acml \ | |||
sgemv.acml dgemv.acml cgemv.acml zgemv.acml \ | |||
strmv.acml dtrmv.acml ctrmv.acml ztrmv.acml \ | |||
stpmv.acml dtpmv.acml ctpmv.acml ztpmv.acml \ | |||
@@ -156,6 +160,8 @@ atlas :: slinpack.atlas dlinpack.atlas clinpack.atlas zlinpack.atlas \ | |||
chemm.atlas zhemm.atlas \ | |||
cherk.atlas zherk.atlas \ | |||
cher2k.atlas zher2k.atlas \ | |||
cher.atlas zher.atlas \ | |||
cher2.atlas zher2.atlas \ | |||
sgemv.atlas dgemv.atlas cgemv.atlas zgemv.atlas \ | |||
sspmv.atlas dspmv.atlas \ | |||
strmv.atlas dtrmv.atlas ctrmv.atlas ztrmv.atlas \ | |||
@@ -195,6 +201,8 @@ mkl :: slinpack.mkl dlinpack.mkl clinpack.mkl zlinpack.mkl \ | |||
chemm.mkl zhemm.mkl \ | |||
cherk.mkl zherk.mkl \ | |||
cher2k.mkl zher2k.mkl \ | |||
cher.mkl zher.mkl \ | |||
cher2.mkl zher2.mkl \ | |||
sgemv.mkl dgemv.mkl cgemv.mkl zgemv.mkl \ | |||
strmv.mkl dtrmv.mkl ctrmv.mkl ztrmv.mkl \ | |||
stpmv.mkl dtpmv.mkl ctpmv.mkl ztpmv.mkl \ | |||
@@ -233,6 +241,8 @@ goto :: sgemm.goto dgemm.goto cgemm.goto zgemm.goto \ | |||
chemm.goto zhemm.goto \ | |||
cherk.goto zherk.goto \ | |||
cher2k.goto zher2k.goto \ | |||
cher.goto zher.goto \ | |||
cher2.goto zher2.goto \ | |||
sgemv.goto dgemv.goto cgemv.goto zgemv.goto \ | |||
sspmv.goto dspmv.goto \ | |||
strmv.goto dtrmv.goto ctrmv.goto ztrmv.goto \ | |||
@@ -278,6 +288,8 @@ acml :: slinpack.acml dlinpack.acml clinpack.acml zlinpack.acml \ | |||
chemm.acml zhemm.acml \ | |||
cherk.acml zherk.acml \ | |||
cher2k.acml zher2k.acml \ | |||
cher.acml zher.acml \ | |||
cher2.acml zher2.acml \ | |||
sgemv.acml dgemv.acml cgemv.acml zgemv.acml \ | |||
strmv.acml dtrmv.acml ctrmv.acml ztrmv.acml \ | |||
stpmv.acml dtpmv.acml ctpmv.acml ztpmv.acml \ | |||
@@ -317,6 +329,8 @@ atlas :: slinpack.atlas dlinpack.atlas clinpack.atlas zlinpack.atlas \ | |||
chemm.atlas zhemm.atlas \ | |||
cherk.atlas zherk.atlas \ | |||
cher2k.atlas zher2k.atlas \ | |||
cher.atlas zher.atlas \ | |||
cher2.atlas zher2.atlas \ | |||
sgemv.atlas dgemv.atlas cgemv.atlas zgemv.atlas \ | |||
sspmv.atlas dspmv.atlas \ | |||
strmv.atlas dtrmv.atlas ctrmv.atlas ztrmv.atlas \ | |||
@@ -358,6 +372,8 @@ mkl :: slinpack.mkl dlinpack.mkl clinpack.mkl zlinpack.mkl \ | |||
chemm.mkl zhemm.mkl \ | |||
cherk.mkl zherk.mkl \ | |||
cher2k.mkl zher2k.mkl \ | |||
cher.mkl zher.mkl \ | |||
cher2.mkl zher2.mkl \ | |||
sgemv.mkl dgemv.mkl cgemv.mkl zgemv.mkl \ | |||
strmv.mkl dtrmv.mkl ctrmv.mkl ztrmv.mkl \ | |||
stpmv.mkl dtpmv.mkl ctpmv.mkl ztpmv.mkl \ | |||
@@ -407,6 +423,8 @@ veclib :: slinpack.veclib dlinpack.veclib clinpack.veclib zlinpack.veclib \ | |||
chemm.veclib zhemm.veclib \ | |||
cherk.veclib zherk.veclib \ | |||
cher2k.veclib zher2k.veclib \ | |||
cher.veclib zher.veclib \ | |||
cher2.veclib zher2.veclib \ | |||
sgemv.veclib dgemv.veclib cgemv.veclib zgemv.veclib \ | |||
strmv.veclib dtrmv.veclib ctrmv.veclib ztrmv.veclib \ | |||
stpmv.veclib dtpmv.veclib ctpmv.veclib ztpmv.veclib \ | |||
@@ -1244,6 +1262,74 @@ zher2k.mkl : zher2k.$(SUFFIX) | |||
zher2k.veclib : zher2k.$(SUFFIX) | |||
-$(CC) $(CFLAGS) -o $(@F) $^ $(LIBVECLIB) $(CEXTRALIB) $(EXTRALIB) $(FEXTRALIB) | |||
##################################### Cher #################################################### | |||
cher.goto : cher.$(SUFFIX) ../$(LIBNAME) | |||
$(CC) $(CFLAGS) -o $(@F) $^ $(CEXTRALIB) $(EXTRALIB) $(FEXTRALIB) -lm | |||
cher.acml : cher.$(SUFFIX) | |||
-$(CC) $(CFLAGS) -o $(@F) $^ $(LIBACML) $(CEXTRALIB) $(EXTRALIB) $(FEXTRALIB) | |||
cher.atlas : cher.$(SUFFIX) | |||
-$(CC) $(CFLAGS) -o $(@F) $^ $(LIBATLAS) $(CEXTRALIB) $(EXTRALIB) $(FEXTRALIB) | |||
cher.mkl : cher.$(SUFFIX) | |||
-$(CC) $(CFLAGS) -o $(@F) $^ $(LIBMKL) $(CEXTRALIB) $(EXTRALIB) $(FEXTRALIB) | |||
cher.veclib : cher.$(SUFFIX) | |||
-$(CC) $(CFLAGS) -o $(@F) $^ $(LIBVECLIB) $(CEXTRALIB) $(EXTRALIB) $(FEXTRALIB) | |||
##################################### Zher #################################################### | |||
zher.goto : zher.$(SUFFIX) ../$(LIBNAME) | |||
$(CC) $(CFLAGS) -o $(@F) $^ $(CEXTRALIB) $(EXTRALIB) $(FEXTRALIB) -lm | |||
zher.acml : zher.$(SUFFIX) | |||
-$(CC) $(CFLAGS) -o $(@F) $^ $(LIBACML) $(CEXTRALIB) $(EXTRALIB) $(FEXTRALIB) | |||
zher.atlas : zher.$(SUFFIX) | |||
-$(CC) $(CFLAGS) -o $(@F) $^ $(LIBATLAS) $(CEXTRALIB) $(EXTRALIB) $(FEXTRALIB) | |||
zher.mkl : zher.$(SUFFIX) | |||
-$(CC) $(CFLAGS) -o $(@F) $^ $(LIBMKL) $(CEXTRALIB) $(EXTRALIB) $(FEXTRALIB) | |||
zher.veclib : zher.$(SUFFIX) | |||
-$(CC) $(CFLAGS) -o $(@F) $^ $(LIBVECLIB) $(CEXTRALIB) $(EXTRALIB) $(FEXTRALIB) | |||
##################################### Cher2 #################################################### | |||
cher2.goto : cher2.$(SUFFIX) ../$(LIBNAME) | |||
$(CC) $(CFLAGS) -o $(@F) $^ $(CEXTRALIB) $(EXTRALIB) $(FEXTRALIB) -lm | |||
cher2.acml : cher2.$(SUFFIX) | |||
-$(CC) $(CFLAGS) -o $(@F) $^ $(LIBACML) $(CEXTRALIB) $(EXTRALIB) $(FEXTRALIB) | |||
cher2.atlas : cher2.$(SUFFIX) | |||
-$(CC) $(CFLAGS) -o $(@F) $^ $(LIBATLAS) $(CEXTRALIB) $(EXTRALIB) $(FEXTRALIB) | |||
cher2.mkl : cher2.$(SUFFIX) | |||
-$(CC) $(CFLAGS) -o $(@F) $^ $(LIBMKL) $(CEXTRALIB) $(EXTRALIB) $(FEXTRALIB) | |||
cher2.veclib : cher2.$(SUFFIX) | |||
-$(CC) $(CFLAGS) -o $(@F) $^ $(LIBVECLIB) $(CEXTRALIB) $(EXTRALIB) $(FEXTRALIB) | |||
##################################### Zher2 #################################################### | |||
zher2.goto : zher2.$(SUFFIX) ../$(LIBNAME) | |||
$(CC) $(CFLAGS) -o $(@F) $^ $(CEXTRALIB) $(EXTRALIB) $(FEXTRALIB) -lm | |||
zher2.acml : zher2.$(SUFFIX) | |||
-$(CC) $(CFLAGS) -o $(@F) $^ $(LIBACML) $(CEXTRALIB) $(EXTRALIB) $(FEXTRALIB) | |||
zher2.atlas : zher2.$(SUFFIX) | |||
-$(CC) $(CFLAGS) -o $(@F) $^ $(LIBATLAS) $(CEXTRALIB) $(EXTRALIB) $(FEXTRALIB) | |||
zher2.mkl : zher2.$(SUFFIX) | |||
-$(CC) $(CFLAGS) -o $(@F) $^ $(LIBMKL) $(CEXTRALIB) $(EXTRALIB) $(FEXTRALIB) | |||
zher2.veclib : zher2.$(SUFFIX) | |||
-$(CC) $(CFLAGS) -o $(@F) $^ $(LIBVECLIB) $(CEXTRALIB) $(EXTRALIB) $(FEXTRALIB) | |||
##################################### Sgemv #################################################### | |||
sgemv.goto : sgemv.$(SUFFIX) ../$(LIBNAME) | |||
$(CC) $(CFLAGS) -o $(@F) $^ $(CEXTRALIB) $(EXTRALIB) $(FEXTRALIB) -lm | |||
@@ -2868,6 +2954,18 @@ cher2k.$(SUFFIX) : her2k.c | |||
zher2k.$(SUFFIX) : her2k.c | |||
$(CC) $(CFLAGS) -c -DCOMPLEX -DDOUBLE -o $(@F) $^ | |||
cher.$(SUFFIX) : her.c | |||
$(CC) $(CFLAGS) -c -DCOMPLEX -UDOUBLE -o $(@F) $^ | |||
zher.$(SUFFIX) : her.c | |||
$(CC) $(CFLAGS) -c -DCOMPLEX -DDOUBLE -o $(@F) $^ | |||
cher2.$(SUFFIX) : her2.c | |||
$(CC) $(CFLAGS) -c -DCOMPLEX -UDOUBLE -o $(@F) $^ | |||
zher2.$(SUFFIX) : her2.c | |||
$(CC) $(CFLAGS) -c -DCOMPLEX -DDOUBLE -o $(@F) $^ | |||
sgemv.$(SUFFIX) : gemv.c | |||
$(CC) $(CFLAGS) -c -UCOMPLEX -UDOUBLE -o $(@F) $^ | |||
@@ -0,0 +1,186 @@ | |||
/*************************************************************************** | |||
Copyright (c) 2020, The OpenBLAS Project | |||
All rights reserved. | |||
Redistribution and use in source and binary forms, with or without | |||
modification, are permitted provided that the following conditions are | |||
met: | |||
1. Redistributions of source code must retain the above copyright | |||
notice, this list of conditions and the following disclaimer. | |||
2. Redistributions in binary form must reproduce the above copyright | |||
notice, this list of conditions and the following disclaimer in | |||
the documentation and/or other materials provided with the | |||
distribution. | |||
3. Neither the name of the OpenBLAS project nor the names of | |||
its contributors may be used to endorse or promote products | |||
derived from this software without specific prior written permission. | |||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" | |||
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | |||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | |||
ARE DISCLAIMED. IN NO EVENT SHALL THE OPENBLAS PROJECT OR CONTRIBUTORS BE | |||
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | |||
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR | |||
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | |||
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, | |||
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE | |||
USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |||
*****************************************************************************/ | |||
#include <stdio.h> | |||
#include <stdlib.h> | |||
#ifdef __CYGWIN32__ | |||
#include <sys/time.h> | |||
#endif | |||
#include "common.h" | |||
#undef HER | |||
#ifdef DOUBLE | |||
#define HER BLASFUNC(zher) | |||
#else | |||
#define HER BLASFUNC(cher) | |||
#endif | |||
#if defined(__WIN32__) || defined(__WIN64__) | |||
#ifndef DELTA_EPOCH_IN_MICROSECS | |||
#define DELTA_EPOCH_IN_MICROSECS 11644473600000000ULL | |||
#endif | |||
int gettimeofday(struct timeval *tv, void *tz){ | |||
FILETIME ft; | |||
unsigned __int64 tmpres = 0; | |||
static int tzflag; | |||
if (NULL != tv) | |||
{ | |||
GetSystemTimeAsFileTime(&ft); | |||
tmpres |= ft.dwHighDateTime; | |||
tmpres <<= 32; | |||
tmpres |= ft.dwLowDateTime; | |||
/*converting file time to unix epoch*/ | |||
tmpres /= 10; /*convert into microseconds*/ | |||
tmpres -= DELTA_EPOCH_IN_MICROSECS; | |||
tv->tv_sec = (long)(tmpres / 1000000UL); | |||
tv->tv_usec = (long)(tmpres % 1000000UL); | |||
} | |||
return 0; | |||
} | |||
#endif | |||
#if !defined(__WIN32__) && !defined(__WIN64__) && !defined(__CYGWIN32__) && 0 | |||
static void *huge_malloc(BLASLONG size){ | |||
int shmid; | |||
void *address; | |||
#ifndef SHM_HUGETLB | |||
#define SHM_HUGETLB 04000 | |||
#endif | |||
if ((shmid =shmget(IPC_PRIVATE, | |||
(size + HUGE_PAGESIZE) & ~(HUGE_PAGESIZE - 1), | |||
SHM_HUGETLB | IPC_CREAT |0600)) < 0) { | |||
printf( "Memory allocation failed(shmget).\n"); | |||
exit(1); | |||
} | |||
address = shmat(shmid, NULL, SHM_RND); | |||
if ((BLASLONG)address == -1){ | |||
printf( "Memory allocation failed(shmat).\n"); | |||
exit(1); | |||
} | |||
shmctl(shmid, IPC_RMID, 0); | |||
return address; | |||
} | |||
#define malloc huge_malloc | |||
#endif | |||
int main(int argc, char *argv[]){ | |||
FLOAT *a, *x; | |||
FLOAT alpha[] = {1.0, 1.0}; | |||
blasint incx = 1; | |||
char *p; | |||
char uplo='U'; | |||
char trans='N'; | |||
if ((p = getenv("OPENBLAS_UPLO"))) uplo=*p; | |||
if ((p = getenv("OPENBLAS_TRANS"))) trans=*p; | |||
blasint m, i, j; | |||
int from = 1; | |||
int to = 200; | |||
int step = 1; | |||
struct timeval start, stop; | |||
double time1; | |||
argc--;argv++; | |||
if (argc > 0) { from = atol(*argv); argc--; argv++;} | |||
if (argc > 0) { to = MAX(atol(*argv), from); argc--; argv++;} | |||
if (argc > 0) { step = atol(*argv); argc--; argv++;} | |||
fprintf(stderr, "From : %3d To : %3d Step = %3d Uplo = %c Trans = %c\n", from, to, step,uplo,trans); | |||
if (( a = (FLOAT *)malloc(sizeof(FLOAT) * to * to * COMPSIZE)) == NULL){ | |||
fprintf(stderr,"Out of Memory!!\n");exit(1); | |||
} | |||
if (( x = (FLOAT *)malloc(sizeof(FLOAT) * to * COMPSIZE)) == NULL){ | |||
fprintf(stderr,"Out of Memory!!\n");exit(1); | |||
} | |||
#ifdef linux | |||
srandom(getpid()); | |||
#endif | |||
fprintf(stderr, " SIZE Flops\n"); | |||
for(m = from; m <= to; m += step) | |||
{ | |||
fprintf(stderr, " %6d : ", (int)m); | |||
for(j = 0; j < m; j++){ | |||
for(i = 0; i < m * COMPSIZE; i++){ | |||
a[(long)i + (long)j * (long)m * COMPSIZE] = ((FLOAT) rand() / (FLOAT) RAND_MAX) - 0.5; | |||
} | |||
x[ (long)j * COMPSIZE] = ((FLOAT) rand() / (FLOAT) RAND_MAX) - 0.5; | |||
} | |||
gettimeofday( &start, (struct timezone *)0); | |||
HER (&uplo, &m, alpha, x, &incx, a, &m ); | |||
gettimeofday( &stop, (struct timezone *)0); | |||
time1 = (double)(stop.tv_sec - start.tv_sec) + (double)((stop.tv_usec - start.tv_usec)) * 1.e-6; | |||
gettimeofday( &start, (struct timezone *)0); | |||
fprintf(stderr, | |||
" %10.2f MFlops\n", | |||
COMPSIZE * COMPSIZE * 1. * (double)m * (double)m / time1 * 1.e-6); | |||
} | |||
return 0; | |||
} |
@@ -0,0 +1,190 @@ | |||
/*************************************************************************** | |||
Copyright (c) 2020, The OpenBLAS Project | |||
All rights reserved. | |||
Redistribution and use in source and binary forms, with or without | |||
modification, are permitted provided that the following conditions are | |||
met: | |||
1. Redistributions of source code must retain the above copyright | |||
notice, this list of conditions and the following disclaimer. | |||
2. Redistributions in binary form must reproduce the above copyright | |||
notice, this list of conditions and the following disclaimer in | |||
the documentation and/or other materials provided with the | |||
distribution. | |||
3. Neither the name of the OpenBLAS project nor the names of | |||
its contributors may be used to endorse or promote products | |||
derived from this software without specific prior written permission. | |||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" | |||
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | |||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | |||
ARE DISCLAIMED. IN NO EVENT SHALL THE OPENBLAS PROJECT OR CONTRIBUTORS BE | |||
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | |||
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR | |||
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | |||
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, | |||
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE | |||
USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |||
*****************************************************************************/ | |||
#include <stdio.h> | |||
#include <stdlib.h> | |||
#ifdef __CYGWIN32__ | |||
#include <sys/time.h> | |||
#endif | |||
#include "common.h" | |||
#undef HER2 | |||
#ifdef DOUBLE | |||
#define HER2 BLASFUNC(zher2) | |||
#else | |||
#define HER2 BLASFUNC(cher2) | |||
#endif | |||
#if defined(__WIN32__) || defined(__WIN64__) | |||
#ifndef DELTA_EPOCH_IN_MICROSECS | |||
#define DELTA_EPOCH_IN_MICROSECS 11644473600000000ULL | |||
#endif | |||
int gettimeofday(struct timeval *tv, void *tz){ | |||
FILETIME ft; | |||
unsigned __int64 tmpres = 0; | |||
static int tzflag; | |||
if (NULL != tv) | |||
{ | |||
GetSystemTimeAsFileTime(&ft); | |||
tmpres |= ft.dwHighDateTime; | |||
tmpres <<= 32; | |||
tmpres |= ft.dwLowDateTime; | |||
/*converting file time to unix epoch*/ | |||
tmpres /= 10; /*convert into microseconds*/ | |||
tmpres -= DELTA_EPOCH_IN_MICROSECS; | |||
tv->tv_sec = (long)(tmpres / 1000000UL); | |||
tv->tv_usec = (long)(tmpres % 1000000UL); | |||
} | |||
return 0; | |||
} | |||
#endif | |||
#if !defined(__WIN32__) && !defined(__WIN64__) && !defined(__CYGWIN32__) && 0 | |||
static void *huge_malloc(BLASLONG size){ | |||
int shmid; | |||
void *address; | |||
#ifndef SHM_HUGETLB | |||
#define SHM_HUGETLB 04000 | |||
#endif | |||
if ((shmid =shmget(IPC_PRIVATE, | |||
(size + HUGE_PAGESIZE) & ~(HUGE_PAGESIZE - 1), | |||
SHM_HUGETLB | IPC_CREAT |0600)) < 0) { | |||
printf( "Memory allocation failed(shmget).\n"); | |||
exit(1); | |||
} | |||
address = shmat(shmid, NULL, SHM_RND); | |||
if ((BLASLONG)address == -1){ | |||
printf( "Memory allocation failed(shmat).\n"); | |||
exit(1); | |||
} | |||
shmctl(shmid, IPC_RMID, 0); | |||
return address; | |||
} | |||
#define malloc huge_malloc | |||
#endif | |||
int main(int argc, char *argv[]){ | |||
FLOAT *a, *x, *y; | |||
FLOAT alpha[] = {1.0, 1.0}; | |||
blasint inc = 1; | |||
char *p; | |||
char uplo='U'; | |||
char trans='N'; | |||
if ((p = getenv("OPENBLAS_UPLO"))) uplo=*p; | |||
if ((p = getenv("OPENBLAS_TRANS"))) trans=*p; | |||
blasint m, i, j; | |||
int from = 1; | |||
int to = 200; | |||
int step = 1; | |||
struct timeval start, stop; | |||
double time1; | |||
argc--;argv++; | |||
if (argc > 0) { from = atol(*argv); argc--; argv++;} | |||
if (argc > 0) { to = MAX(atol(*argv), from); argc--; argv++;} | |||
if (argc > 0) { step = atol(*argv); argc--; argv++;} | |||
fprintf(stderr, "From : %3d To : %3d Step = %3d Uplo = %c Trans = %c\n", from, to, step,uplo,trans); | |||
if (( a = (FLOAT *)malloc(sizeof(FLOAT) * to * to * COMPSIZE)) == NULL){ | |||
fprintf(stderr,"Out of Memory!!\n");exit(1); | |||
} | |||
if (( x = (FLOAT *)malloc(sizeof(FLOAT) * to * COMPSIZE)) == NULL){ | |||
fprintf(stderr,"Out of Memory!!\n");exit(1); | |||
} | |||
if (( y = (FLOAT *)malloc(sizeof(FLOAT) * to * COMPSIZE)) == NULL){ | |||
fprintf(stderr,"Out of Memory!!\n");exit(1); | |||
} | |||
#ifdef linux | |||
srandom(getpid()); | |||
#endif | |||
fprintf(stderr, " SIZE Flops\n"); | |||
for(m = from; m <= to; m += step) | |||
{ | |||
fprintf(stderr, " %6d : ", (int)m); | |||
for(j = 0; j < m; j++){ | |||
for(i = 0; i < m * COMPSIZE; i++){ | |||
a[(long)i + (long)j * (long)m * COMPSIZE] = ((FLOAT) rand() / (FLOAT) RAND_MAX) - 0.5; | |||
} | |||
x[ (long)j * COMPSIZE] = ((FLOAT) rand() / (FLOAT) RAND_MAX) - 0.5; | |||
y[ (long)j * COMPSIZE] = ((FLOAT) rand() / (FLOAT) RAND_MAX) - 0.5; | |||
} | |||
gettimeofday( &start, (struct timezone *)0); | |||
HER2 (&uplo, &m, alpha, x, &inc, y, &inc, a, &m ); | |||
gettimeofday( &stop, (struct timezone *)0); | |||
time1 = (double)(stop.tv_sec - start.tv_sec) + (double)((stop.tv_usec - start.tv_usec)) * 1.e-6; | |||
gettimeofday( &start, (struct timezone *)0); | |||
fprintf(stderr, | |||
" %10.2f MFlops\n", | |||
COMPSIZE * COMPSIZE * 2. * (double)m * (double)m / time1 * 1.e-6); | |||
} | |||
return 0; | |||
} |