Include shgemm in benchtest
authorRajalakshmi Srinivasaraghavan <rajis@linux.ibm.com>
Mon, 11 May 2020 14:57:46 +0000 (09:57 -0500)
committerRajalakshmi Srinivasaraghavan <rajis@linux.ibm.com>
Mon, 11 May 2020 14:57:46 +0000 (09:57 -0500)
This patch is to enable benchtest for half precision gemm
when BUILD_HALF is set during make.

benchmark/Makefile
benchmark/gemm.c

index 90d903a..53f422b 100644 (file)
@@ -49,6 +49,12 @@ else
 GOTO_LAPACK_TARGETS=\r
 endif\r
 \r
+ifeq ($(BUILD_HALF),1)\r
+GOTO_HALF_TARGETS=shgemm.goto\r
+else\r
+GOTO_HALF_TARGETS=\r
+endif\r
+\r
 ifeq ($(OSNAME), WINNT)\r
 \r
 goto :: slinpack.goto dlinpack.goto clinpack.goto zlinpack.goto \\r
@@ -91,7 +97,7 @@ goto :: slinpack.goto dlinpack.goto clinpack.goto zlinpack.goto \
        sgetri.goto dgetri.goto cgetri.goto zgetri.goto \\r
        spotrf.goto dpotrf.goto cpotrf.goto zpotrf.goto \\r
        ssymm.goto dsymm.goto csymm.goto zsymm.goto \\r
-       saxpby.goto daxpby.goto caxpby.goto zaxpby.goto\r
+       saxpby.goto daxpby.goto caxpby.goto zaxpby.goto $(GOTO_HALF_TARGETS)\r
 \r
 acml :: slinpack.acml dlinpack.acml clinpack.acml zlinpack.acml \\r
        scholesky.acml dcholesky.acml ccholesky.acml zcholesky.acml \\r
@@ -264,7 +270,7 @@ goto :: sgemm.goto dgemm.goto cgemm.goto zgemm.goto \
        samin.goto damin.goto camin.goto zamin.goto \\r
        smin.goto dmin.goto \\r
        saxpby.goto daxpby.goto caxpby.goto zaxpby.goto \\r
-       snrm2.goto dnrm2.goto scnrm2.goto dznrm2.goto $(GOTO_LAPACK_TARGETS)\r
+       snrm2.goto dnrm2.goto scnrm2.goto dznrm2.goto $(GOTO_LAPACK_TARGETS) $(GOTO_HALF_TARGETS)\r
 \r
 acml :: slinpack.acml dlinpack.acml clinpack.acml zlinpack.acml \\r
        scholesky.acml dcholesky.acml ccholesky.acml zcholesky.acml \\r
@@ -614,6 +620,11 @@ zcholesky.essl : zcholesky.$(SUFFIX)
        -$(CC) $(CFLAGS) -o $(@F) $^ $(LIBESSL) $(CEXTRALIB) $(EXTRALIB) $(FEXTRALIB)\r
 \r
 ##################################### Sgemm ####################################################\r
+ifeq ($(BUILD_HALF),1)\r
+shgemm.goto : shgemm.$(SUFFIX) ../$(LIBNAME)\r
+       $(CC) $(CFLAGS) -o $(@F) $^ $(CEXTRALIB) $(EXTRALIB) $(FEXTRALIB) -lm\r
+endif\r
+\r
 sgemm.goto : sgemm.$(SUFFIX) ../$(LIBNAME)\r
        $(CC) $(CFLAGS) -o $(@F) $^ $(CEXTRALIB) $(EXTRALIB) $(FEXTRALIB) -lm\r
 \r
@@ -2916,6 +2927,11 @@ ccholesky.$(SUFFIX) : cholesky.c
 zcholesky.$(SUFFIX) : cholesky.c\r
        $(CC) $(CFLAGS) -c -DCOMPLEX -DDOUBLE -o $(@F) $^\r
 \r
+ifeq ($(BUILD_HALF),1)\r
+shgemm.$(SUFFIX) : gemm.c\r
+       $(CC) $(CFLAGS) -c -DHALF -UCOMPLEX -UDOUBLE -o $(@F) $^\r
+endif\r
+\r
 sgemm.$(SUFFIX) : gemm.c\r
        $(CC) $(CFLAGS) -c -UCOMPLEX -UDOUBLE -o $(@F) $^\r
 \r
index dd016a7..d223533 100644 (file)
@@ -39,6 +39,8 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
 #ifdef DOUBLE
 #define GEMM   BLASFUNC(dgemm)
+#elif defined(HALF)
+#define GEMM   BLASFUNC(shgemm)
 #else
 #define GEMM   BLASFUNC(sgemm)
 #endif
@@ -120,7 +122,8 @@ static void *huge_malloc(BLASLONG size){
 
 int main(int argc, char *argv[]){
 
-  FLOAT *a, *b, *c;
+  IFLOAT *a, *b;
+  FLOAT *c;
   FLOAT alpha[] = {1.0, 0.0};
   FLOAT beta [] = {0.0, 0.0};
   char transa = 'N';
@@ -184,10 +187,10 @@ int main(int argc, char *argv[]){
     k = to;
   }
 
-  if (( a = (FLOAT *)malloc(sizeof(FLOAT) * m * k * COMPSIZE)) == NULL) {
+  if (( a = (IFLOAT *)malloc(sizeof(IFLOAT) * m * k * COMPSIZE)) == NULL) {
     fprintf(stderr,"Out of Memory!!\n");exit(1);
   }
-  if (( b = (FLOAT *)malloc(sizeof(FLOAT) * k * n * COMPSIZE)) == NULL) {
+  if (( b = (IFLOAT *)malloc(sizeof(IFLOAT) * k * n * COMPSIZE)) == NULL) {
     fprintf(stderr,"Out of Memory!!\n");exit(1);
   }
   if (( c = (FLOAT *)malloc(sizeof(FLOAT) * m * n * COMPSIZE)) == NULL) {
@@ -199,10 +202,10 @@ int main(int argc, char *argv[]){
 #endif
 
   for (i = 0; i < m * k * COMPSIZE; i++) {
-    a[i] = ((FLOAT) rand() / (FLOAT) RAND_MAX) - 0.5;
+    a[i] = ((IFLOAT) rand() / (IFLOAT) RAND_MAX) - 0.5;
   }
   for (i = 0; i < k * n * COMPSIZE; i++) {
-    b[i] = ((FLOAT) rand() / (FLOAT) RAND_MAX) - 0.5;
+    b[i] = ((IFLOAT) rand() / (IFLOAT) RAND_MAX) - 0.5;
   }
   for (i = 0; i < m * n * COMPSIZE; i++) {
     c[i] = ((FLOAT) rand() / (FLOAT) RAND_MAX) - 0.5;