diff --git a/benchmark/mpblas/Makefile.am b/benchmark/mpblas/Makefile.am index 59043fd7..2af2abe7 100644 --- a/benchmark/mpblas/Makefile.am +++ b/benchmark/mpblas/Makefile.am @@ -5,9 +5,9 @@ Rcopy1.plt.in Rcopy2.plt.in Rcopy3.plt.in \ Rdot1.plt.in Rdot2.plt.in Rdot3.plt.in \ Rgemm1.plt.in Rgemm2.plt.in Rgemm3.plt.in \ Rgemm_cuda.plt.in \ -Rgemv1.plt Rgemv2.plt Rgemv3.plt \ -Rsyrk1.plt Rsyrk2.plt Rsyrk3.plt \ -Rsyrk_cuda.plt \ +Rgemv1.plt.in Rgemv2.plt.in Rgemv3.plt.in \ +Rsyrk1.plt.in Rsyrk2.plt.in Rsyrk3.plt.in \ +Rsyrk_cuda.plt.in \ go.Raxpy.sh go.Rcopy.sh go.Rdot.sh go.Rgemm.sh \ go.Rgemm_cuda.sh \ go.Rgemv.sh go.Rsyrk.sh \ diff --git a/benchmark/mpblas/Rgemm3.plt.in b/benchmark/mpblas/Rgemm3.plt.in index 712da8e6..c686fdd1 100644 --- a/benchmark/mpblas/Rgemm3.plt.in +++ b/benchmark/mpblas/Rgemm3.plt.in @@ -12,4 +12,4 @@ plot \ "log.Rgemm.double_opt" using 1:4 title 'double (OpenMP)' with lines linewidth 1, \ "log.Rgemm.double" using 1:4 title 'double' with lines linewidth 1, \ "log.dgemm.ref" using 1:4 title 'double (Ref.BLAS)' with lines linewidth 1, \ -"log.dgemm.openblas" using 1:4 title 'double (OpenBLAS)' with lines linewidth 1 \ No newline at end of file +"log.dgemm.openblas" using 1:4 title 'double (OpenBLAS)' with lines linewidth 1 diff --git a/benchmark/mpblas/Rgemv.cpp b/benchmark/mpblas/Rgemv.cpp index 26b4ee23..867fb2bf 100644 --- a/benchmark/mpblas/Rgemv.cpp +++ b/benchmark/mpblas/Rgemv.cpp @@ -111,7 +111,6 @@ int main(int argc, char *argv[]) { return 1; } } - n = N0; m = M0; for (p = 0; p < TOTALSTEPS; p++) { @@ -125,7 +124,7 @@ int main(int argc, char *argv[]) { REAL *x = new REAL[k]; REAL *y = new REAL[l]; REAL *yref = new REAL[l]; - REAL *A = new REAL[n * m]; + REAL *a = new REAL[n * m]; if (check_flag) { for (i = 0; i < k; i++) { x[i] = randomnumber(dummy); @@ -134,12 +133,12 @@ int main(int argc, char *argv[]) { y[i] = yref[i] = randomnumber(dummy); } for (i = 0; i < k * l; i++) { - A[i] = randomnumber(dummy); + a[i] = randomnumber(dummy); } alpha = randomnumber(dummy); beta = randomnumber(dummy); auto t1 = Clock::now(); - Rgemv(&trans, m, n, alpha, A, m, x, (mplapackint)1, beta, y, (mplapackint)1); + Rgemv(&trans, m, n, alpha, a, m, x, (mplapackint)1, beta, y, (mplapackint)1); auto t2 = Clock::now(); elapsedtime = (double)duration_cast(t2 - t1).count() / 1.0e9; (*mpblas_ref)(&trans, m, n, alpha, A, m, x, (mplapackint)1, beta, yref, (mplapackint)1); @@ -156,14 +155,14 @@ int main(int argc, char *argv[]) { y[i] = yref[i] = randomnumber(dummy); } for (i = 0; i < k * l; i++) { - A[i] = randomnumber(dummy); + a[i] = randomnumber(dummy); } alpha = randomnumber(dummy); beta = randomnumber(dummy); elapsedtime = 0.0; for (int j = 0; j < LOOP; j++) { auto t1 = Clock::now(); - Rgemv(&trans, m, n, alpha, A, m, x, (mplapackint)1, beta, y, (mplapackint)1); + Rgemv(&trans, m, n, alpha, a, m, x, (mplapackint)1, beta, y, (mplapackint)1); auto t2 = Clock::now(); elapsedtime = elapsedtime + (double)duration_cast(t2 - t1).count() / 1.0e9; } @@ -174,7 +173,7 @@ int main(int argc, char *argv[]) { delete[] yref; delete[] y; delete[] x; - delete[] A; + delete[] a; n = n + STEPN; m = m + STEPM; } diff --git a/benchmark/mpblas/Rgemv1.plt b/benchmark/mpblas/Rgemv1.plt.in similarity index 82% rename from benchmark/mpblas/Rgemv1.plt rename to benchmark/mpblas/Rgemv1.plt.in index fba30ef1..3f3b9dff 100644 --- a/benchmark/mpblas/Rgemv1.plt +++ b/benchmark/mpblas/Rgemv1.plt.in @@ -5,7 +5,7 @@ set title font "Helvetica,20" set title "Rgemv on %%MODELNAME%%" set xlabel "Dimension" set ylabel "MFLOPS" -#set terminal postscript eps color enhanced +set key above set terminal pdf plot \ @@ -14,6 +14,5 @@ plot \ "log.Rgemv._Float64x" using 1:3 title '\_Float64x' with lines linewidth 1, \ "log.Rgemv._Float64x_opt" using 1:3 title '\_Float64x (OpenMP)' with lines linewidth 1, \ "log.Rgemv.dd" using 1:3 title 'double double' with lines linewidth 1, \ -"log.Rgemv.dd_opt" using 1:3 title 'double double (OpenMP)' with lines linewidth 1, \ -"log.Rgemv.double" using 1:3 title 'double' with lines linewidth 1 +"log.Rgemv.dd_opt" using 1:3 title 'double double (OpenMP)' with lines linewidth 1 diff --git a/benchmark/mpblas/Rgemv2.plt b/benchmark/mpblas/Rgemv2.plt.in similarity index 94% rename from benchmark/mpblas/Rgemv2.plt rename to benchmark/mpblas/Rgemv2.plt.in index 99004d57..c08ba755 100644 --- a/benchmark/mpblas/Rgemv2.plt +++ b/benchmark/mpblas/Rgemv2.plt.in @@ -5,7 +5,7 @@ set title font "Helvetica,20" set title "Rgemv on %%MODELNAME%%" set xlabel "Dimension" set ylabel "MFLOPS" -#set terminal postscript eps color enhanced +set key above set terminal pdf plot \ diff --git a/benchmark/mpblas/Rgemv3.plt b/benchmark/mpblas/Rgemv3.plt deleted file mode 100644 index 9aa2c643..00000000 --- a/benchmark/mpblas/Rgemv3.plt +++ /dev/null @@ -1,11 +0,0 @@ -set xlabel font "Helvetica,20" -set ylabel font "Helvetica,20" -set key font "Helvetica,16" -set title font "Helvetica,20" -set title "Rgemv on %%MODELNAME%%" -set xlabel "Dimension" -set ylabel "MFLOPS" -#set terminal postscript eps color enhanced -set terminal pdf - -plot "log.Rgemv.double_opt" using 1:3 title 'double (OpenMP)' with lines linewidth 1 \ No newline at end of file diff --git a/benchmark/mpblas/Rgemv3.plt.in b/benchmark/mpblas/Rgemv3.plt.in new file mode 100644 index 00000000..a6eaca06 --- /dev/null +++ b/benchmark/mpblas/Rgemv3.plt.in @@ -0,0 +1,15 @@ +set xlabel font "Helvetica,20" +set ylabel font "Helvetica,20" +set key font "Helvetica,16" +set title font "Helvetica,20" +set title "Rgemv on %%MODELNAME%%" +set xlabel "Dimension" +set ylabel "MFLOPS" +set key above +set terminal pdf + +plot \ +"log.Rgemv.double_opt" using 1:3 title 'double (OpenMP)' with lines linewidth 1, \ +"log.Rgemv.double" using 1:3 title 'double' with lines linewidth 1, \ +"log.dgemv.ref" using 1:3 title 'double (Ref.BLAS)' with lines linewidth 1, \ +"log.dgemv.openblas" using 1:3 title 'double (OpenBLAS)' with lines linewidth 1 diff --git a/benchmark/mpblas/Rsyrk1.plt b/benchmark/mpblas/Rsyrk1.plt.in similarity index 81% rename from benchmark/mpblas/Rsyrk1.plt rename to benchmark/mpblas/Rsyrk1.plt.in index 3cc8b1e9..87750b22 100644 --- a/benchmark/mpblas/Rsyrk1.plt +++ b/benchmark/mpblas/Rsyrk1.plt.in @@ -5,7 +5,7 @@ set title font "Helvetica,20" set title "Rsyrk on %%MODELNAME%%" set xlabel "Dimension" set ylabel "MFLOPS" -#set terminal postscript eps color enhanced +set key above set terminal pdf plot \ @@ -14,6 +14,4 @@ plot \ "log.Rsyrk._Float64x" using 1:3 title '\_Float64x' with lines linewidth 1, \ "log.Rsyrk._Float64x_opt" using 1:3 title '\_Float64x (OpenMP)' with lines linewidth 1, \ "log.Rsyrk.dd" using 1:3 title 'double double' with lines linewidth 1, \ -"log.Rsyrk.dd_opt" using 1:3 title 'double double (OpenMP)' with lines linewidth 1, \ -"log.Rsyrk.double" using 1:3 title 'double' with lines linewidth 1 - +"log.Rsyrk.dd_opt" using 1:3 title 'double double (OpenMP)' with lines linewidth 1 diff --git a/benchmark/mpblas/Rsyrk2.plt b/benchmark/mpblas/Rsyrk2.plt.in similarity index 94% rename from benchmark/mpblas/Rsyrk2.plt rename to benchmark/mpblas/Rsyrk2.plt.in index 8057bee2..06992e57 100644 --- a/benchmark/mpblas/Rsyrk2.plt +++ b/benchmark/mpblas/Rsyrk2.plt.in @@ -5,7 +5,7 @@ set title font "Helvetica,20" set title "Rsyrk on %%MODELNAME%%" set xlabel "Dimension" set ylabel "MFLOPS" -#set terminal postscript eps color enhanced +set key above set terminal pdf plot \ diff --git a/benchmark/mpblas/Rsyrk3.plt b/benchmark/mpblas/Rsyrk3.plt deleted file mode 100644 index bed71309..00000000 --- a/benchmark/mpblas/Rsyrk3.plt +++ /dev/null @@ -1,12 +0,0 @@ -set xlabel font "Helvetica,20" -set ylabel font "Helvetica,20" -set key font "Helvetica,16" -set title font "Helvetica,20" -set title "Rsyrk on %%MODELNAME%%" -set xlabel "Dimension" -set ylabel "MFLOPS" -#set terminal postscript eps color enhanced -set terminal pdf - -plot \ -"log.Rsyrk.double_opt" using 1:3 title 'double (OpenMP)' with lines linewidth 1 diff --git a/benchmark/mpblas/Rsyrk3.plt.in b/benchmark/mpblas/Rsyrk3.plt.in new file mode 100644 index 00000000..cd3397e4 --- /dev/null +++ b/benchmark/mpblas/Rsyrk3.plt.in @@ -0,0 +1,15 @@ +set xlabel font "Helvetica,20" +set ylabel font "Helvetica,20" +set key font "Helvetica,16" +set title font "Helvetica,20" +set title "Rsyrk on %%MODELNAME%%" +set xlabel "Dimension" +set ylabel "MFLOPS" +set key above +set terminal pdf + +plot \ +"log.Rsyrk.double_opt" using 1:3 title 'double (OpenMP)' with lines linewidth 1, \ +"log.Rsyrk.double" using 1:3 title 'double' with lines linewidth 1, \ +"log.dsyrk.ref" using 1:3 title 'double (Ref.BLAS)' with lines linewidth 1, \ +"log.dsyrk.openblas" using 1:3 title 'double (OpenBLAS)' with lines linewidth 1 diff --git a/benchmark/mpblas/dgemv.cpp b/benchmark/mpblas/dgemv.cpp index 2f8f77c9..23c6576d 100644 --- a/benchmark/mpblas/dgemv.cpp +++ b/benchmark/mpblas/dgemv.cpp @@ -35,11 +35,21 @@ #define ___DOUBLE_BENCH___ #include -#define TOTALSTEPS 1000 +// cf. https://netlib.org/lapack/lawnspdf/lawn41.pdf p.120 +double flops_gemv(int m_i, int n_i) { + double adds, muls, flops; + double n, m; + n = (double)n_i; + m = (double)m_i; + muls = m * n + 2. * m; + adds = m * n; + flops = muls + adds; + return flops; +} int main(int argc, char *argv[]) { int k, l, m, n; - int incx = 1, incy = 1, STEPN, STEPM, N0, M0; + int STEPN = 7, STEPM = 7, N0, M0, LOOP = 3, TOTALSTEPS = 283; double alpha, beta, dummy, *dummywork; double mOne = -1; double elapsedtime, t1, t2; @@ -52,9 +62,6 @@ int main(int argc, char *argv[]) { // initialization N0 = M0 = 1; - STEPN = STEPM = 1; - trans = 'n'; - normtype = 'm'; if (argc != 1) { for (i = 1; i < argc; i++) { if (strcmp("-N", argv[i]) == 0) { @@ -67,6 +74,10 @@ int main(int argc, char *argv[]) { STEPM = atoi(argv[++i]); } else if (strcmp("-T", argv[i]) == 0) { trans = 't'; + } else if (strcmp("-LOOPS", argv[i]) == 0) { + LOOPS = atoi(argv[++i]); + } else if (strcmp("-TOTALSTEPS", argv[i]) == 0) { + TOTALSTEPS = atoi(argv[++i]); } } } @@ -82,7 +93,7 @@ int main(int argc, char *argv[]) { } double *x = new double[k]; double *y = new double[l]; - double *A = new double[n * m]; + double *a = new double[n * m]; for (i = 0; i < k; i++) { x[i] = randomnumber(dummy); } @@ -90,19 +101,23 @@ int main(int argc, char *argv[]) { y[i] = randomnumber(dummy); } for (i = 0; i < k * l; i++) { - A[i] = randomnumber(dummy); + a[i] = randomnumber(dummy); } alpha = randomnumber(dummy); beta = randomnumber(dummy); - auto t1 = Clock::now(); - dgemv_f77(&trans, &m, &n, &alpha, A, &m, x, &incx, &beta, y, &incy); - auto t2 = Clock::now(); - elapsedtime = (double)duration_cast(t2 - t1).count() / 1.0e9; + elapsedtime = 0.0; + for (int j = 0; j < LOOPS; j++) { + auto t1 = Clock::now(); + dgemv_f77(&trans, &m, &n, &alpha, a, &m, x, &incx, &beta, y, &incy); + auto t2 = Clock::now(); + elapsedtime = elapsedtime + (double)duration_cast(t2 - t1).count() / 1.0e9; + } + elapsedtime = elapsedtime / (double)LOOPS; printf(" m n MFLOPS trans\n"); - printf("%6d %6d %10.3f %c\n", (int)n, (int)m, (2.0 * (double)n * (double)m) / elapsedtime * MFLOPS, trans); + printf("%6d %6d %10.3f %c\n", (int)n, (int)m, flops_gemv(m, n) / elapsedtime * MFLOPS, trans); delete[] y; delete[] x; - delete[] A; + delete[] a; n = n + STEPN; m = m + STEPM; } diff --git a/benchmark/mpblas/go.Rgemm.sh b/benchmark/mpblas/go.Rgemm.sh index e4055f96..b6e30756 100644 --- a/benchmark/mpblas/go.Rgemm.sh +++ b/benchmark/mpblas/go.Rgemm.sh @@ -38,9 +38,9 @@ else MODELNAME="unknown" fi -$SED -i -e "s/%%MODELNAME%%/$MODELNAME/g" Rgemm1.plt -$SED -i -e "s/%%MODELNAME%%/$MODELNAME/g" Rgemm2.plt -$SED -i -e "s/%%MODELNAME%%/$MODELNAME/g" Rgemm3.plt +$SED -e "s/%%MODELNAME%%/$MODELNAME/g" Rgemm1.plt.in > Rgemm1.plt +$SED -e "s/%%MODELNAME%%/$MODELNAME/g" Rgemm2.plt.in > Rgemm2.plt +$SED -e "s/%%MODELNAME%%/$MODELNAME/g" Rgemm3.plt.in > Rgemm3.plt #### gnuplot Rgemm1.plt > Rgemm1.pdf diff --git a/benchmark/mpblas/go.Rgemm_cuda.sh b/benchmark/mpblas/go.Rgemm_cuda.sh index 5c545b58..ebc91ee9 100644 --- a/benchmark/mpblas/go.Rgemm_cuda.sh +++ b/benchmark/mpblas/go.Rgemm_cuda.sh @@ -18,6 +18,6 @@ else MODELNAME="unknown" fi -$SED -i -e "s/%%GPU%%/$MODELNAME/g" Rgemm_cuda.plt.in > Rgemm_cuda.plt +$SED -e "s/%%GPU%%/$MODELNAME/g" Rgemm_cuda.plt.in > Rgemm_cuda.plt gnuplot Rgemm_cuda.plt > Rgemm_cuda.pdf diff --git a/benchmark/mpblas/go.Rgemv.sh b/benchmark/mpblas/go.Rgemv.sh index 9043d572..495f7c85 100644 --- a/benchmark/mpblas/go.Rgemv.sh +++ b/benchmark/mpblas/go.Rgemv.sh @@ -6,6 +6,9 @@ else LDPATHPREFIX="LD_LIBRARY_PATH=%%PREFIX%%/lib:$LD_LIBRARY_PATH" fi +env $LDPATHPREFIX ./dgemv_ref >& log.dgemv.ref +env $LDPATHPREFIX ./dgemv_openblas >& log.dgemv.openblas + #### MPLIBS="_Float128 _Float64x dd double" @@ -35,9 +38,9 @@ else MODELNAME="unknown" fi -$SED -i -e "s/%%MODELNAME%%/$MODELNAME/g" Rgemv1.plt -$SED -i -e "s/%%MODELNAME%%/$MODELNAME/g" Rgemv2.plt -$SED -i -e "s/%%MODELNAME%%/$MODELNAME/g" Rgemv3.plt +$SED -e "s/%%MODELNAME%%/$MODELNAME/g" Rgemv1.plt.in > Rgemv1.plt +$SED -e "s/%%MODELNAME%%/$MODELNAME/g" Rgemv2.plt.in > Rgemv2.plt +$SED -e "s/%%MODELNAME%%/$MODELNAME/g" Rgemv3.plt.in > Rgemv3.plt #### gnuplot Rgemv1.plt > Rgemv1.pdf diff --git a/benchmark/mpblas/go.Rsyrk.sh b/benchmark/mpblas/go.Rsyrk.sh index 7de10bcd..0042fc20 100644 --- a/benchmark/mpblas/go.Rsyrk.sh +++ b/benchmark/mpblas/go.Rsyrk.sh @@ -35,9 +35,9 @@ else MODELNAME="unknown" fi -$SED -i -e "s/%%MODELNAME%%/$MODELNAME/g" Rsyrk1.plt -$SED -i -e "s/%%MODELNAME%%/$MODELNAME/g" Rsyrk2.plt -$SED -i -e "s/%%MODELNAME%%/$MODELNAME/g" Rsyrk3.plt +$SED -e "s/%%MODELNAME%%/$MODELNAME/g" Rsyrk1.plt.in > Rsyrk1.plt +$SED -e "s/%%MODELNAME%%/$MODELNAME/g" Rsyrk2.plt.in > Rsyrk2.plt +$SED -e "s/%%MODELNAME%%/$MODELNAME/g" Rsyrk3.plt.in > Rsyrk3.plt #### gnuplot Rsyrk1.plt > Rsyrk1.pdf