| @@ -57,6 +57,8 @@ goto :: slinpack.goto dlinpack.goto clinpack.goto zlinpack.goto \ | |||||
| strmm.goto dtrmm.goto ctrmm.goto ztrmm.goto \ | strmm.goto dtrmm.goto ctrmm.goto ztrmm.goto \ | ||||
| strsm.goto dtrsm.goto ctrsm.goto ztrsm.goto \ | strsm.goto dtrsm.goto ctrsm.goto ztrsm.goto \ | ||||
| ssyr.goto dsyr.goto \ | ssyr.goto dsyr.goto \ | ||||
| sspr.goto dspr.goto \ | |||||
| sspr2.goto dspr2.goto \ | |||||
| ssyrk.goto dsyrk.goto csyrk.goto zsyrk.goto \ | ssyrk.goto dsyrk.goto csyrk.goto zsyrk.goto \ | ||||
| ssyr2k.goto dsyr2k.goto csyr2k.goto zsyr2k.goto \ | ssyr2k.goto dsyr2k.goto csyr2k.goto zsyr2k.goto \ | ||||
| sger.goto dger.goto cger.goto zger.goto \ | sger.goto dger.goto cger.goto zger.goto \ | ||||
| @@ -86,6 +88,8 @@ acml :: slinpack.acml dlinpack.acml clinpack.acml zlinpack.acml \ | |||||
| strmm.acml dtrmm.acml ctrmm.acml ztrmm.acml \ | strmm.acml dtrmm.acml ctrmm.acml ztrmm.acml \ | ||||
| strsm.acml dtrsm.acml ctrsm.acml ztrsm.acml \ | strsm.acml dtrsm.acml ctrsm.acml ztrsm.acml \ | ||||
| ssyr.acml dsyr.acml \ | ssyr.acml dsyr.acml \ | ||||
| sspr.acml dspr.acml \ | |||||
| sspr2.acml dspr2.acml \ | |||||
| ssyrk.acml dsyrk.acml csyrk.acml zsyrk.acml \ | ssyrk.acml dsyrk.acml csyrk.acml zsyrk.acml \ | ||||
| ssyr2k.acml dsyr2k.acml csyr2k.acml zsyr2k.acml \ | ssyr2k.acml dsyr2k.acml csyr2k.acml zsyr2k.acml \ | ||||
| sger.acml dger.acml cger.acml zger.acml \ | sger.acml dger.acml cger.acml zger.acml \ | ||||
| @@ -113,7 +117,9 @@ atlas :: slinpack.atlas dlinpack.atlas clinpack.atlas zlinpack.atlas \ | |||||
| sgemm.atlas dgemm.atlas cgemm.atlas zgemm.atlas \ | sgemm.atlas dgemm.atlas cgemm.atlas zgemm.atlas \ | ||||
| strmm.atlas dtrmm.atlas ctrmm.atlas ztrmm.atlas \ | strmm.atlas dtrmm.atlas ctrmm.atlas ztrmm.atlas \ | ||||
| strsm.atlas dtrsm.atlas ctrsm.atlas ztrsm.atlas \ | strsm.atlas dtrsm.atlas ctrsm.atlas ztrsm.atlas \ | ||||
| ssyr.goto dsyr.atlas \ | |||||
| ssyr.atlas dsyr.atlas \ | |||||
| sspr.atlas dspr.atlas \ | |||||
| sspr2.atlas dspr2.atlas \ | |||||
| ssyrk.atlas dsyrk.atlas csyrk.atlas zsyrk.atlas \ | ssyrk.atlas dsyrk.atlas csyrk.atlas zsyrk.atlas \ | ||||
| ssyr2k.atlas dsyr2k.atlas csyr2k.atlas zsyr2k.atlas \ | ssyr2k.atlas dsyr2k.atlas csyr2k.atlas zsyr2k.atlas \ | ||||
| sger.atlas dger.atlas cger.atlas zger.atlas\ | sger.atlas dger.atlas cger.atlas zger.atlas\ | ||||
| @@ -143,6 +149,8 @@ mkl :: slinpack.mkl dlinpack.mkl clinpack.mkl zlinpack.mkl \ | |||||
| strmm.mkl dtrmm.mkl ctrmm.mkl ztrmm.mkl \ | strmm.mkl dtrmm.mkl ctrmm.mkl ztrmm.mkl \ | ||||
| strsm.mkl dtrsm.mkl ctrsm.mkl ztrsm.mkl \ | strsm.mkl dtrsm.mkl ctrsm.mkl ztrsm.mkl \ | ||||
| ssyr.mkl dsyr.mkl \ | ssyr.mkl dsyr.mkl \ | ||||
| sspr.mkl dspr.mkl \ | |||||
| sspr2.mkl dspr2.mkl \ | |||||
| ssyrk.mkl dsyrk.mkl csyrk.mkl zsyrk.mkl \ | ssyrk.mkl dsyrk.mkl csyrk.mkl zsyrk.mkl \ | ||||
| ssyr2k.mkl dsyr2k.mkl csyr2k.mkl zsyr2k.mkl \ | ssyr2k.mkl dsyr2k.mkl csyr2k.mkl zsyr2k.mkl \ | ||||
| sger.mkl dger.mkl cger.mkl zger.mkl \ | sger.mkl dger.mkl cger.mkl zger.mkl \ | ||||
| @@ -171,6 +179,8 @@ goto :: sgemm.goto dgemm.goto cgemm.goto zgemm.goto \ | |||||
| strmm.goto dtrmm.goto ctrmm.goto ztrmm.goto \ | strmm.goto dtrmm.goto ctrmm.goto ztrmm.goto \ | ||||
| strsm.goto dtrsm.goto ctrsm.goto ztrsm.goto \ | strsm.goto dtrsm.goto ctrsm.goto ztrsm.goto \ | ||||
| ssyr.goto dsyr.goto \ | ssyr.goto dsyr.goto \ | ||||
| sspr.goto dspr.goto \ | |||||
| sspr2.goto dspr2.goto \ | |||||
| ssyrk.goto dsyrk.goto csyrk.goto zsyrk.goto \ | ssyrk.goto dsyrk.goto csyrk.goto zsyrk.goto \ | ||||
| ssyr2k.goto dsyr2k.goto csyr2k.goto zsyr2k.goto \ | ssyr2k.goto dsyr2k.goto csyr2k.goto zsyr2k.goto \ | ||||
| sger.goto dger.goto cger.goto zger.goto \ | sger.goto dger.goto cger.goto zger.goto \ | ||||
| @@ -199,6 +209,8 @@ acml :: slinpack.acml dlinpack.acml clinpack.acml zlinpack.acml \ | |||||
| strmm.acml dtrmm.acml ctrmm.acml ztrmm.acml \ | strmm.acml dtrmm.acml ctrmm.acml ztrmm.acml \ | ||||
| strsm.acml dtrsm.acml ctrsm.acml ztrsm.acml \ | strsm.acml dtrsm.acml ctrsm.acml ztrsm.acml \ | ||||
| ssyr.acml dsyr.acml \ | ssyr.acml dsyr.acml \ | ||||
| sspr.acml dspr.acml \ | |||||
| sspr2.acml dspr2.acml \ | |||||
| ssyrk.acml dsyrk.acml csyrk.acml zsyrk.acml \ | ssyrk.acml dsyrk.acml csyrk.acml zsyrk.acml \ | ||||
| ssyr2k.acml dsyr2k.acml csyr2k.acml zsyr2k.acml \ | ssyr2k.acml dsyr2k.acml csyr2k.acml zsyr2k.acml \ | ||||
| sger.acml dger.acml cger.acml zger.acml \ | sger.acml dger.acml cger.acml zger.acml \ | ||||
| @@ -227,6 +239,8 @@ atlas :: slinpack.atlas dlinpack.atlas clinpack.atlas zlinpack.atlas \ | |||||
| strmm.atlas dtrmm.atlas ctrmm.atlas ztrmm.atlas \ | strmm.atlas dtrmm.atlas ctrmm.atlas ztrmm.atlas \ | ||||
| strsm.atlas dtrsm.atlas ctrsm.atlas ztrsm.atlas \ | strsm.atlas dtrsm.atlas ctrsm.atlas ztrsm.atlas \ | ||||
| ssyr.atlas dsyr.atlas \ | ssyr.atlas dsyr.atlas \ | ||||
| sspr.atlas dspr.atlas \ | |||||
| sspr2.atlas dspr2.atlas \ | |||||
| ssyrk.atlas dsyrk.atlas csyrk.atlas zsyrk.atlas \ | ssyrk.atlas dsyrk.atlas csyrk.atlas zsyrk.atlas \ | ||||
| ssyr2k.atlas dsyr2k.atlas csyr2k.atlas zsyr2k.atlas \ | ssyr2k.atlas dsyr2k.atlas csyr2k.atlas zsyr2k.atlas \ | ||||
| sger.atlas dger.atlas cger.atlas zger.atlas\ | sger.atlas dger.atlas cger.atlas zger.atlas\ | ||||
| @@ -258,6 +272,8 @@ mkl :: slinpack.mkl dlinpack.mkl clinpack.mkl zlinpack.mkl \ | |||||
| strmm.mkl dtrmm.mkl ctrmm.mkl ztrmm.mkl \ | strmm.mkl dtrmm.mkl ctrmm.mkl ztrmm.mkl \ | ||||
| strsm.mkl dtrsm.mkl ctrsm.mkl ztrsm.mkl \ | strsm.mkl dtrsm.mkl ctrsm.mkl ztrsm.mkl \ | ||||
| ssyr.mkl dsyr.mkl \ | ssyr.mkl dsyr.mkl \ | ||||
| sspr.mkl dspr.mkl \ | |||||
| sspr2.mkl dspr2.mkl \ | |||||
| ssyrk.mkl dsyrk.mkl csyrk.mkl zsyrk.mkl \ | ssyrk.mkl dsyrk.mkl csyrk.mkl zsyrk.mkl \ | ||||
| ssyr2k.mkl dsyr2k.mkl csyr2k.mkl zsyr2k.mkl \ | ssyr2k.mkl dsyr2k.mkl csyr2k.mkl zsyr2k.mkl \ | ||||
| sger.mkl dger.mkl cger.mkl zger.mkl \ | sger.mkl dger.mkl cger.mkl zger.mkl \ | ||||
| @@ -297,6 +313,8 @@ veclib :: slinpack.veclib dlinpack.veclib clinpack.veclib zlinpack.veclib \ | |||||
| strmm.veclib dtrmm.veclib ctrmm.veclib ztrmm.veclib \ | strmm.veclib dtrmm.veclib ctrmm.veclib ztrmm.veclib \ | ||||
| strsm.veclib dtrsm.veclib ctrsm.veclib ztrsm.veclib \ | strsm.veclib dtrsm.veclib ctrsm.veclib ztrsm.veclib \ | ||||
| ssyr.veclib dsyr.veclib \ | ssyr.veclib dsyr.veclib \ | ||||
| sspr.veclib dspr.veclib \ | |||||
| sspr2.veclib dspr2.veclib \ | |||||
| ssyrk.veclib dsyrk.veclib csyrk.veclib zsyrk.veclib \ | ssyrk.veclib dsyrk.veclib csyrk.veclib zsyrk.veclib \ | ||||
| ssyr2k.veclib dsyr2k.veclib csyr2k.veclib zsyr2k.veclib \ | ssyr2k.veclib dsyr2k.veclib csyr2k.veclib zsyr2k.veclib \ | ||||
| sger.veclib dger.veclib cger.veclib zger.veclib \ | sger.veclib dger.veclib cger.veclib zger.veclib \ | ||||
| @@ -816,6 +834,70 @@ dsyr.mkl : dsyr.$(SUFFIX) | |||||
| dsyr.veclib : dsyr.$(SUFFIX) | dsyr.veclib : dsyr.$(SUFFIX) | ||||
| -$(CC) $(CFLAGS) -o $(@F) $^ $(LIBVECLIB) $(CEXTRALIB) $(EXTRALIB) $(FEXTRALIB) | -$(CC) $(CFLAGS) -o $(@F) $^ $(LIBVECLIB) $(CEXTRALIB) $(EXTRALIB) $(FEXTRALIB) | ||||
| ##################################### Sspr #################################################### | |||||
| sspr.goto : sspr.$(SUFFIX) ../$(LIBNAME) | |||||
| $(CC) $(CFLAGS) -o $(@F) $^ $(CEXTRALIB) $(EXTRALIB) $(FEXTRALIB) -lm | |||||
| sspr.acml : sspr.$(SUFFIX) | |||||
| -$(CC) $(CFLAGS) -o $(@F) $^ $(LIBACML) $(CEXTRALIB) $(EXTRALIB) $(FEXTRALIB) | |||||
| sspr.atlas : sspr.$(SUFFIX) | |||||
| -$(CC) $(CFLAGS) -o $(@F) $^ $(LIBATLAS) $(CEXTRALIB) $(EXTRALIB) $(FEXTRALIB) | |||||
| sspr.mkl : sspr.$(SUFFIX) | |||||
| -$(CC) $(CFLAGS) -o $(@F) $^ $(LIBMKL) $(CEXTRALIB) $(EXTRALIB) $(FEXTRALIB) | |||||
| sspr.veclib : sspr.$(SUFFIX) | |||||
| -$(CC) $(CFLAGS) -o $(@F) $^ $(LIBVECLIB) $(CEXTRALIB) $(EXTRALIB) $(FEXTRALIB) | |||||
| ##################################### Dspr #################################################### | |||||
| dspr.goto : dspr.$(SUFFIX) ../$(LIBNAME) | |||||
| $(CC) $(CFLAGS) -o $(@F) $^ $(CEXTRALIB) $(EXTRALIB) $(FEXTRALIB) -lm | |||||
| dspr.acml : dspr.$(SUFFIX) | |||||
| -$(CC) $(CFLAGS) -o $(@F) $^ $(LIBACML) $(CEXTRALIB) $(EXTRALIB) $(FEXTRALIB) | |||||
| dspr.atlas : dspr.$(SUFFIX) | |||||
| -$(CC) $(CFLAGS) -o $(@F) $^ $(LIBATLAS) $(CEXTRALIB) $(EXTRALIB) $(FEXTRALIB) | |||||
| dspr.mkl : dspr.$(SUFFIX) | |||||
| -$(CC) $(CFLAGS) -o $(@F) $^ $(LIBMKL) $(CEXTRALIB) $(EXTRALIB) $(FEXTRALIB) | |||||
| dspr.veclib : dspr.$(SUFFIX) | |||||
| -$(CC) $(CFLAGS) -o $(@F) $^ $(LIBVECLIB) $(CEXTRALIB) $(EXTRALIB) $(FEXTRALIB) | |||||
| ##################################### Sspr2 #################################################### | |||||
| sspr2.goto : sspr2.$(SUFFIX) ../$(LIBNAME) | |||||
| $(CC) $(CFLAGS) -o $(@F) $^ $(CEXTRALIB) $(EXTRALIB) $(FEXTRALIB) -lm | |||||
| sspr2.acml : sspr2.$(SUFFIX) | |||||
| -$(CC) $(CFLAGS) -o $(@F) $^ $(LIBACML) $(CEXTRALIB) $(EXTRALIB) $(FEXTRALIB) | |||||
| sspr2.atlas : sspr2.$(SUFFIX) | |||||
| -$(CC) $(CFLAGS) -o $(@F) $^ $(LIBATLAS) $(CEXTRALIB) $(EXTRALIB) $(FEXTRALIB) | |||||
| sspr2.mkl : sspr2.$(SUFFIX) | |||||
| -$(CC) $(CFLAGS) -o $(@F) $^ $(LIBMKL) $(CEXTRALIB) $(EXTRALIB) $(FEXTRALIB) | |||||
| sspr2.veclib : sspr2.$(SUFFIX) | |||||
| -$(CC) $(CFLAGS) -o $(@F) $^ $(LIBVECLIB) $(CEXTRALIB) $(EXTRALIB) $(FEXTRALIB) | |||||
| ##################################### Dspr2 #################################################### | |||||
| dspr2.goto : dspr2.$(SUFFIX) ../$(LIBNAME) | |||||
| $(CC) $(CFLAGS) -o $(@F) $^ $(CEXTRALIB) $(EXTRALIB) $(FEXTRALIB) -lm | |||||
| dspr2.acml : dspr2.$(SUFFIX) | |||||
| -$(CC) $(CFLAGS) -o $(@F) $^ $(LIBACML) $(CEXTRALIB) $(EXTRALIB) $(FEXTRALIB) | |||||
| dspr2.atlas : dspr2.$(SUFFIX) | |||||
| -$(CC) $(CFLAGS) -o $(@F) $^ $(LIBATLAS) $(CEXTRALIB) $(EXTRALIB) $(FEXTRALIB) | |||||
| dspr2.mkl : dspr2.$(SUFFIX) | |||||
| -$(CC) $(CFLAGS) -o $(@F) $^ $(LIBMKL) $(CEXTRALIB) $(EXTRALIB) $(FEXTRALIB) | |||||
| dspr2.veclib : dspr2.$(SUFFIX) | |||||
| -$(CC) $(CFLAGS) -o $(@F) $^ $(LIBVECLIB) $(CEXTRALIB) $(EXTRALIB) $(FEXTRALIB) | |||||
| ##################################### Ssyrk #################################################### | ##################################### Ssyrk #################################################### | ||||
| ssyrk.goto : ssyrk.$(SUFFIX) ../$(LIBNAME) | ssyrk.goto : ssyrk.$(SUFFIX) ../$(LIBNAME) | ||||
| @@ -2197,6 +2279,18 @@ ssyr.$(SUFFIX) : syr.c | |||||
| dsyr.$(SUFFIX) : syr.c | dsyr.$(SUFFIX) : syr.c | ||||
| $(CC) $(CFLAGS) -c -UCOMPLEX -DDOUBLE -o $(@F) $^ | $(CC) $(CFLAGS) -c -UCOMPLEX -DDOUBLE -o $(@F) $^ | ||||
| sspr.$(SUFFIX) : spr.c | |||||
| $(CC) $(CFLAGS) -c -UCOMPLEX -UDOUBLE -o $(@F) $^ | |||||
| dspr.$(SUFFIX) : spr.c | |||||
| $(CC) $(CFLAGS) -c -UCOMPLEX -DDOUBLE -o $(@F) $^ | |||||
| sspr2.$(SUFFIX) : spr2.c | |||||
| $(CC) $(CFLAGS) -c -UCOMPLEX -UDOUBLE -o $(@F) $^ | |||||
| dspr2.$(SUFFIX) : spr2.c | |||||
| $(CC) $(CFLAGS) -c -UCOMPLEX -DDOUBLE -o $(@F) $^ | |||||
| ssyrk.$(SUFFIX) : syrk.c | ssyrk.$(SUFFIX) : syrk.c | ||||
| $(CC) $(CFLAGS) -c -UCOMPLEX -UDOUBLE -o $(@F) $^ | $(CC) $(CFLAGS) -c -UCOMPLEX -UDOUBLE -o $(@F) $^ | ||||
| @@ -0,0 +1,198 @@ | |||||
| /*************************************************************************** | |||||
| Copyright (c) 2014, 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 SPR | |||||
| #ifdef DOUBLE | |||||
| #define SPR BLASFUNC(dspr) | |||||
| #else | |||||
| #define SPR BLASFUNC(sspr) | |||||
| #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,*c; | |||||
| FLOAT alpha[] = {1.0, 1.0}; | |||||
| blasint inc_x=1; | |||||
| int loops = 1; | |||||
| int l; | |||||
| char *p; | |||||
| char uplo='U'; | |||||
| if ((p = getenv("OPENBLAS_UPLO"))) uplo=*p; | |||||
| if ((p = getenv("OPENBLAS_LOOPS"))) loops = atoi(p); | |||||
| if ((p = getenv("OPENBLAS_INCX"))) inc_x = atoi(p); | |||||
| blasint m, i, j; | |||||
| int from = 1; | |||||
| int to = 200; | |||||
| int step = 1; | |||||
| struct timeval start, stop; | |||||
| double time1,timeg; | |||||
| 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 Inc_x = %d\n", from, to, step,uplo,inc_x); | |||||
| if (( a = (FLOAT *)malloc(sizeof(FLOAT) * to * to * COMPSIZE)) == NULL){ | |||||
| fprintf(stderr,"Out of Memory!!\n");exit(1); | |||||
| } | |||||
| if (( c = (FLOAT *)malloc(sizeof(FLOAT) * to * abs(inc_x) * COMPSIZE)) == NULL){ | |||||
| fprintf(stderr,"Out of Memory!!\n");exit(1); | |||||
| } | |||||
| #ifdef linux | |||||
| srandom(getpid()); | |||||
| #endif | |||||
| fprintf(stderr, " SIZE Flops Time\n"); | |||||
| for(m = from; m <= to; m += step) | |||||
| { | |||||
| timeg=0; | |||||
| fprintf(stderr, " %6d : ", (int)m); | |||||
| for (l=0; l<loops; l++) | |||||
| { | |||||
| 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; | |||||
| } | |||||
| } | |||||
| for(i = 0; i < m * COMPSIZE * abs(inc_x); i++){ | |||||
| c[i] = ((FLOAT) rand() / (FLOAT) RAND_MAX) - 0.5; | |||||
| } | |||||
| gettimeofday( &start, (struct timezone *)0); | |||||
| SPR (&uplo, &m, alpha, c, &inc_x, a); | |||||
| gettimeofday( &stop, (struct timezone *)0); | |||||
| time1 = (double)(stop.tv_sec - start.tv_sec) + (double)((stop.tv_usec - start.tv_usec)) * 1.e-6; | |||||
| timeg += time1; | |||||
| } | |||||
| timeg /= loops; | |||||
| fprintf(stderr, | |||||
| " %10.2f MBytes %10.6f sec\n", | |||||
| COMPSIZE * COMPSIZE * 1. * (double)m * (double)m / timeg * 1.e-6, timeg); | |||||
| } | |||||
| return 0; | |||||
| } | |||||
| // void main(int argc, char *argv[]) __attribute__((weak, alias("MAIN__"))); | |||||
| @@ -0,0 +1,207 @@ | |||||
| /*************************************************************************** | |||||
| Copyright (c) 2014, 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 SPR2 | |||||
| #ifdef DOUBLE | |||||
| #define SPR2 BLASFUNC(dspr2) | |||||
| #else | |||||
| #define SPR2 BLASFUNC(sspr2) | |||||
| #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,*b,*c; | |||||
| FLOAT alpha[] = {1.0, 1.0}; | |||||
| blasint inc_x=1,inc_y=1; | |||||
| int loops = 1; | |||||
| int l; | |||||
| char *p; | |||||
| char uplo='U'; | |||||
| if ((p = getenv("OPENBLAS_UPLO"))) uplo=*p; | |||||
| if ((p = getenv("OPENBLAS_LOOPS"))) loops = atoi(p); | |||||
| if ((p = getenv("OPENBLAS_INCX"))) inc_x = atoi(p); | |||||
| blasint m, i, j; | |||||
| int from = 1; | |||||
| int to = 200; | |||||
| int step = 1; | |||||
| struct timeval start, stop; | |||||
| double time1,timeg; | |||||
| 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 Inc_x = %d Inc_y = %d\n", from, to, step,uplo,inc_x,inc_y); | |||||
| if (( a = (FLOAT *)malloc(sizeof(FLOAT) * to * to * COMPSIZE)) == NULL){ | |||||
| fprintf(stderr,"Out of Memory!!\n");exit(1); | |||||
| } | |||||
| if (( b = (FLOAT *)malloc(sizeof(FLOAT) * to * abs(inc_y) * COMPSIZE)) == NULL){ | |||||
| fprintf(stderr,"Out of Memory!!\n");exit(1); | |||||
| } | |||||
| if (( c = (FLOAT *)malloc(sizeof(FLOAT) * to * abs(inc_x) * COMPSIZE)) == NULL){ | |||||
| fprintf(stderr,"Out of Memory!!\n");exit(1); | |||||
| } | |||||
| #ifdef linux | |||||
| srandom(getpid()); | |||||
| #endif | |||||
| fprintf(stderr, " SIZE Flops Time\n"); | |||||
| for(m = from; m <= to; m += step) | |||||
| { | |||||
| timeg=0; | |||||
| fprintf(stderr, " %6d : ", (int)m); | |||||
| for (l=0; l<loops; l++) | |||||
| { | |||||
| 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; | |||||
| } | |||||
| } | |||||
| for(i = 0; i < m * COMPSIZE * abs(inc_y); i++){ | |||||
| b[i] = ((FLOAT) rand() / (FLOAT) RAND_MAX) - 0.5; | |||||
| } | |||||
| for(i = 0; i < m * COMPSIZE * abs(inc_x); i++){ | |||||
| c[i] = ((FLOAT) rand() / (FLOAT) RAND_MAX) - 0.5; | |||||
| } | |||||
| gettimeofday( &start, (struct timezone *)0); | |||||
| SPR2 (&uplo, &m, alpha, c, &inc_x, b, &inc_y, a); | |||||
| gettimeofday( &stop, (struct timezone *)0); | |||||
| time1 = (double)(stop.tv_sec - start.tv_sec) + (double)((stop.tv_usec - start.tv_usec)) * 1.e-6; | |||||
| timeg += time1; | |||||
| } | |||||
| timeg /= loops; | |||||
| fprintf(stderr, | |||||
| " %10.2f MBytes %10.6f sec\n", | |||||
| COMPSIZE * COMPSIZE * 2. * (double)m * (double)m / timeg * 1.e-6, timeg); | |||||
| } | |||||
| return 0; | |||||
| } | |||||
| // void main(int argc, char *argv[]) __attribute__((weak, alias("MAIN__"))); | |||||