From e0513e6d4a76d4929b1a303457a70ab7cd204f8f Mon Sep 17 00:00:00 2001 From: v1j4y Date: Tue, 9 Aug 2022 16:01:26 +0200 Subject: [PATCH 1/4] Configure script for qmckl_dgemm. --- configure.ac | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/configure.ac b/configure.ac index 1544bcc..77632fd 100644 --- a/configure.ac +++ b/configure.ac @@ -190,6 +190,24 @@ AS_IF([test "x$with_trexio" != xno], [ PKG_CFLAGS="$PKG_CFLAGS $TREXIO_CFLAGS" PKG_LIBS="$PKG_LIBS $TREXIO_LIBS" +# QMCKL_DGEMM + +AC_ARG_WITH(qmckldgemm, [AS_HELP_STRING([--without-qmckldgemm],[disable support for QMCKLDGEMM])], + with_qmckldgemm=$withval, with_qmckldgemm=no) + +AS_IF([test "x$with_qmckldgemm" != xno], [ + AC_DEFINE([HAVE_QMCKLDGEMM], [1], [Define if your have libqmckldgemm]) + ARGS="${ARGS} qmckldgemm" + AC_CHECK_LIB([qmckldgemm], [qmckl_packed_matrix_create], + [], + [AS_IF([test "x$with_qmckldgemm" != xcheck], + [PKG_CHECK_MODULES([QMCKLDGEMM], [qmckldgemm]) ]) + ]) +]) + +PKG_CFLAGS="$PKG_CFLAGS $QMCKLDGEMM_CFLAGS" +PKG_LIBS="$PKG_LIBS $QMCKLDGEMM_LIBS" + ## BLAS AX_BLAS([], [AC_MSG_ERROR([BLAS was not found.])]) From 46a26c70286f044c37d93a04a4232179a86ada12 Mon Sep 17 00:00:00 2001 From: v1j4y Date: Tue, 9 Aug 2022 16:01:48 +0200 Subject: [PATCH 2/4] Added modified qmckl_blas including qmckl_dgemm_tiled_avx2 call. --- org/qmckl_blas.org | 48 ++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 46 insertions(+), 2 deletions(-) diff --git a/org/qmckl_blas.org b/org/qmckl_blas.org index c21adee..9f82862 100644 --- a/org/qmckl_blas.org +++ b/org/qmckl_blas.org @@ -889,6 +889,7 @@ integer function qmckl_dgemm_f(context, TransA, TransB, & m, n, k, alpha, A, LDA, B, LDB, beta, C, LDC) & result(info) use qmckl + use qmckl_dgemm_tiled_module implicit none integer(qmckl_context), intent(in) :: context character , intent(in) :: TransA, TransB @@ -900,6 +901,10 @@ integer function qmckl_dgemm_f(context, TransA, TransB, & double precision , intent(in) :: B(ldb,*) integer*8 , intent(in) :: ldc double precision , intent(out) :: C(ldc,*) + double precision,allocatable,dimension(:,:) :: A1 + double precision,allocatable,dimension(:,:) :: B1 + double precision,allocatable,dimension(:,:) :: C1 + integer*8 :: i, j, LDA1, LDB1, LDC1 info = QMCKL_SUCCESS @@ -938,8 +943,47 @@ integer function qmckl_dgemm_f(context, TransA, TransB, & return endif - call dgemm(transA, transB, int(m,4), int(n,4), int(k,4), & - alpha, A, int(LDA,4), B, int(LDB,4), beta, C, int(LDC,4)) + !call dgemm(transA, transB, int(m,4), int(n,4), int(k,4), & + ! alpha, A, int(LDA,4), B, int(LDB,4), beta, C, int(LDC,4)) + + ! Copy A to A1 + allocate(A1(k,m)) + do j=1,m + do i=1,k + A1(i,j) = A(j,i) + end do + end do + + ! Copy B to B1 + allocate(B1(n,k)) + do j=1,k + do i=1,n + B1(i,j) = B(j,i) + end do + end do + + ! Copy C to C1 + allocate(C1(n,m)) + do j=1,m + do i=1,n + C1(i,j) = C(j,i) + end do + end do + + LDA1 = size(A1,1) + LDB1 = size(B1,1) + LDC1 = size(C1,1) + + info = qmckl_dgemm_tiled_avx2(int(m,8), int(n,8), int(k,8), & + A1, int(LDA1,8), B1, int(LDB1,8), C1, int(LDC1,8)) + + do j=1,n + do i=1,m + C(i,j) = alpha*C1(j,i) + beta*C(j,i) + end do + end do + + deallocate(A1,B1,C1) end function qmckl_dgemm_f #+end_src From e822694a565f56adcab1726854d5a1830d807032 Mon Sep 17 00:00:00 2001 From: v1j4y Date: Tue, 9 Aug 2022 16:11:40 +0200 Subject: [PATCH 3/4] Protected qmckldgemm stuff with ifdefs. --- org/qmckl_blas.org | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/org/qmckl_blas.org b/org/qmckl_blas.org index 9f82862..d42cc5f 100644 --- a/org/qmckl_blas.org +++ b/org/qmckl_blas.org @@ -889,7 +889,9 @@ integer function qmckl_dgemm_f(context, TransA, TransB, & m, n, k, alpha, A, LDA, B, LDB, beta, C, LDC) & result(info) use qmckl +#ifdef HAVE_LIBQMCKLDGEMM use qmckl_dgemm_tiled_module +#endif implicit none integer(qmckl_context), intent(in) :: context character , intent(in) :: TransA, TransB @@ -943,9 +945,7 @@ integer function qmckl_dgemm_f(context, TransA, TransB, & return endif - !call dgemm(transA, transB, int(m,4), int(n,4), int(k,4), & - ! alpha, A, int(LDA,4), B, int(LDB,4), beta, C, int(LDC,4)) - +#ifdef HAVE_LIBQMCKLDGEMM ! Copy A to A1 allocate(A1(k,m)) do j=1,m @@ -984,6 +984,11 @@ integer function qmckl_dgemm_f(context, TransA, TransB, & end do deallocate(A1,B1,C1) +#else + call dgemm(transA, transB, int(m,4), int(n,4), int(k,4), & + alpha, A, int(LDA,4), B, int(LDB,4), beta, C, int(LDC,4)) +#endif + end function qmckl_dgemm_f #+end_src From 9a5178b01115ca74521dbb44dde174a0e187b9c2 Mon Sep 17 00:00:00 2001 From: v1j4y Date: Tue, 9 Aug 2022 17:09:09 +0200 Subject: [PATCH 4/4] Fixed indices caused by typo. --- org/qmckl_blas.org | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/org/qmckl_blas.org b/org/qmckl_blas.org index d42cc5f..7d204d6 100644 --- a/org/qmckl_blas.org +++ b/org/qmckl_blas.org @@ -979,7 +979,7 @@ integer function qmckl_dgemm_f(context, TransA, TransB, & do j=1,n do i=1,m - C(i,j) = alpha*C1(j,i) + beta*C(j,i) + C(i,j) = alpha*C1(j,i) + beta*C(i,j) end do end do