diff --git a/CPV/src/fromscra.f90 b/CPV/src/fromscra.f90 index 01619fcab..683d352d0 100644 --- a/CPV/src/fromscra.f90 +++ b/CPV/src/fromscra.f90 @@ -144,6 +144,7 @@ SUBROUTINE from_scratch( ) ! if( iverbosity > 1 ) CALL dotcsc( eigr, cm_bgrp, ngw, nbsp ) ! + ! ! ... initialize bands ! CALL occn_info( f ) diff --git a/CPV/src/nl_base.f90 b/CPV/src/nl_base.f90 index d75639153..fb2fbf952 100644 --- a/CPV/src/nl_base.f90 +++ b/CPV/src/nl_base.f90 @@ -1238,22 +1238,3 @@ subroutine nlfq_bgrp_x( c_bgrp, eigr, bec_bgrp, becdr_bgrp, fion ) ! return end subroutine nlfq_bgrp_x - -! In principle this can go away ....... -SUBROUTINE MYDGEMM( TRANSA, TRANSB, M, N, K, ALPHA, A, LDA, B, LDB, BETA, C, LDC ) -#if defined(__CUDA) - use cudafor - use cublas -#endif - CHARACTER*1, INTENT(IN) :: TRANSA, TRANSB - INTEGER, INTENT(IN) :: M, N, K, LDA, LDB, LDC - DOUBLE PRECISION, INTENT(IN) :: ALPHA, BETA - DOUBLE PRECISION :: A( LDA, * ), B( LDB, * ), C( LDC, * ) -#if defined(__CUDA) - attributes(device) :: A, B, C - CALL cublasdgemm(TRANSA, TRANSB, M, N, K, ALPHA, A, LDA, B, LDB, BETA, C, LDC) -#else - CALL dgemm(TRANSA, TRANSB, M, N, K, ALPHA, A, LDA, B, LDB, BETA, C, LDC) -#endif - -END SUBROUTINE MYDGEMM diff --git a/CPV/src/ortho.f90 b/CPV/src/ortho.f90 index b41afae07..44695d146 100644 --- a/CPV/src/ortho.f90 +++ b/CPV/src/ortho.f90 @@ -632,18 +632,3 @@ END MODULE local_ortho_memory 100 FORMAT(3X,'diff = ',D18.10,' iter = ', I5 ) ! END SUBROUTINE ortho_x - - - - -SUBROUTINE qe_sync() -#if defined(__CUDA) - USE cudafor -#endif - INTEGER :: info -#if defined (__CUDA) - info = cudaDeviceSynchronize() - IF( info /= 0 ) CALL errore('qe_sync',' error ',ABS(info)) -#endif - RETURN -END SUBROUTINE diff --git a/CPV/src/ortho_base.f90 b/CPV/src/ortho_base.f90 index 53db0b561..1194fe399 100644 --- a/CPV/src/ortho_base.f90 +++ b/CPV/src/ortho_base.f90 @@ -1312,22 +1312,3 @@ CONTAINS END SUBROUTINE bec_bgrp2ortho END MODULE orthogonalize_base - - -! In principle this can go away ....... -SUBROUTINE MYDGER ( M, N, ALPHA, X, INCX, Y, INCY, A, LDA ) -#if defined(__CUDA) - use cudafor - use cublas -#endif -! .. Scalar Arguments .. - DOUBLE PRECISION :: ALPHA - INTEGER :: INCX, INCY, LDA, M, N -! .. Array Arguments .. - DOUBLE PRECISION :: A( LDA, * ), X( * ), Y( * ) -#if defined(__CUDA) - attributes(device) :: A, X, Y -#endif - CALL DGER ( M, N, ALPHA, X, INCX, Y, INCY, A, LDA ) - -END SUBROUTINE MYDGER diff --git a/UtilXlib/Makefile b/UtilXlib/Makefile index 7ca3159eb..9cc3c37ec 100644 --- a/UtilXlib/Makefile +++ b/UtilXlib/Makefile @@ -6,6 +6,7 @@ include ../make.inc MODFLAGS=$(MOD_FLAG). UTIL = clocks_handler.o \ +device_helper.o \ device_util.o \ divide.o \ data_buffer.o \ diff --git a/UtilXlib/device_helper.f90 b/UtilXlib/device_helper.f90 new file mode 100644 index 000000000..4dab88356 --- /dev/null +++ b/UtilXlib/device_helper.f90 @@ -0,0 +1,67 @@ +! +! Copyright (C) 2003-2020 Quantum ESPRESSO group +! This file is distributed under the terms of the +! GNU General Public License. See the file `License' +! in the root directory of the present distribution, +! or http://www.gnu.org/copyleft/gpl.txt . +! +! This file initiated by Carlo Cavazzoni 2020 +! +! Purpose: collect miscellaneus subroutines to help dealing with +! accelerator devices + + +!=----------------------------------------------------------------------------=! + +SUBROUTINE qe_device_sync() +#if defined(__CUDA) + USE cudafor +#endif + INTEGER :: info +#if defined (__CUDA) + info = cudaDeviceSynchronize() + IF( info /= 0 ) CALL errore('qe_sync',' error ',ABS(info)) +#endif + RETURN +END SUBROUTINE + +!=----------------------------------------------------------------------------=! + +! In principle this can go away ....... +SUBROUTINE MYDGER ( M, N, ALPHA, X, INCX, Y, INCY, A, LDA ) +#if defined(__CUDA) + use cudafor + use cublas +#endif +! .. Scalar Arguments .. + DOUBLE PRECISION :: ALPHA + INTEGER :: INCX, INCY, LDA, M, N +! .. Array Arguments .. + DOUBLE PRECISION :: A( LDA, * ), X( * ), Y( * ) +#if defined(__CUDA) + attributes(device) :: A, X, Y +#endif + CALL DGER ( M, N, ALPHA, X, INCX, Y, INCY, A, LDA ) + +END SUBROUTINE MYDGER + +!=----------------------------------------------------------------------------=! + +! In principle this can go away ....... +SUBROUTINE MYDGEMM( TRANSA, TRANSB, M, N, K, ALPHA, A, LDA, B, LDB, BETA, C, LDC) +#if defined(__CUDA) + use cudafor + use cublas +#endif + CHARACTER*1, INTENT(IN) :: TRANSA, TRANSB + INTEGER, INTENT(IN) :: M, N, K, LDA, LDB, LDC + DOUBLE PRECISION, INTENT(IN) :: ALPHA, BETA + DOUBLE PRECISION :: A( LDA, * ), B( LDB, * ), C( LDC, * ) +#if defined(__CUDA) + attributes(device) :: A, B, C + CALL cublasdgemm(TRANSA, TRANSB, M, N, K, ALPHA, A, LDA, B, LDB, BETA, C, LDC) +#else + CALL dgemm(TRANSA, TRANSB, M, N, K, ALPHA, A, LDA, B, LDB, BETA, C, LDC) +#endif + +END SUBROUTINE MYDGEMM