mirror of
https://github.com/nwchemgit/nwchem.git
synced 2026-07-28 14:15:30 -04:00
performance measurement for the triples plus attempts at optimizing one routine on a pentium
This commit is contained in:
parent
375e612fd2
commit
1bfa6cc870
1 changed files with 401 additions and 52 deletions
|
|
@ -1,6 +1,6 @@
|
|||
logical function uccsdtest(rtdb)
|
||||
*
|
||||
* $Id: uccsdtest.F,v 1.19 2000-05-26 00:05:56 d3h449 Exp $
|
||||
* $Id: uccsdtest.F,v 1.20 2000-05-30 06:36:56 d3g681 Exp $
|
||||
*
|
||||
implicit none
|
||||
#include "global.fh"
|
||||
|
|
@ -37,7 +37,7 @@ c
|
|||
integer l_x, l_df, l_delta, k_x, k_df, k_delta, nvar
|
||||
integer iter, i
|
||||
logical converged, t2_rd_test, t2_mp2
|
||||
double precision xxx
|
||||
double precision xxx, shift
|
||||
c
|
||||
double precision energyaaa, energybbb, energyaab, energybba
|
||||
double precision uccsdtest_triples_pure, uccsdtest_triples_mixed
|
||||
|
|
@ -45,7 +45,7 @@ c
|
|||
double precision uccsdtest_triples_mixed_blocked
|
||||
logical int_normalize
|
||||
external int_normalize
|
||||
c
|
||||
c
|
||||
c load the geometry/basis set and get info
|
||||
c
|
||||
if (.not. geom_create(geom, 'geometry'))
|
||||
|
|
@ -140,6 +140,18 @@ c
|
|||
call output(dbl_mb(k_aeval),1,nmo,1,1,nmo,1,1)
|
||||
write(6,*) ' Beta eigenvalues '
|
||||
call output(dbl_mb(k_beval),1,nmo,1,1,nmo,1,1)
|
||||
c
|
||||
if (.not. rtdb_get(rtdb, 'uccsdtest:shift', mt_dbl, 1, shift))then
|
||||
c
|
||||
c Shift is added to the denominators in the preconditioner
|
||||
c ... default is to make the smallest denominator 0.3
|
||||
c
|
||||
shift = 2d0 * min(
|
||||
$ dbl_mb(k_aeval+nalpha)-dbl_mb(k_aeval+nalpha-1),
|
||||
$ dbl_mb(k_beval+nbeta)-dbl_mb(k_beval+nbeta-1))
|
||||
shift = 0.3d0 - shift
|
||||
end if
|
||||
write(6,*) ' Preconditioner denominator shift ', shift
|
||||
c$$$ write(6,*) ' Alpha MOs'
|
||||
c$$$ call output(dbl_mb(k_amos),1,nbf,1,nmo,nbf,nmo,1)
|
||||
c$$$ write(6,*) ' Beta MOs'
|
||||
|
|
@ -281,12 +293,12 @@ c Space for the new solver
|
|||
c
|
||||
nvar = noa*noa*nva*nva + nob*nob*nvb*nvb + noa*nob*nva*nvb +
|
||||
$ noa*nva + nob*nvb
|
||||
if (.not. ma_push_get(mt_dbl, nvar*30, 'x', l_x, k_x))
|
||||
$ call errquit(' ma x ', 0)
|
||||
if (.not. ma_push_get(mt_dbl, nvar*30, 'x', l_df, k_df))
|
||||
$ call errquit(' ma x ', 0)
|
||||
if (.not. ma_push_get(mt_dbl, nvar*10, 'x', l_x, k_x))
|
||||
$ call errquit(' ma x4 ', 0)
|
||||
if (.not. ma_push_get(mt_dbl, nvar*10, 'x', l_df, k_df))
|
||||
$ call errquit(' ma x5 ', 0)
|
||||
if (.not. ma_push_get(mt_dbl, nvar, 'x', l_delta, k_delta))
|
||||
$ call errquit(' ma x ', 0)
|
||||
$ call errquit(' ma x6 ', 0)
|
||||
c
|
||||
c if t1 and t2 on disk jump and read
|
||||
c
|
||||
|
|
@ -302,7 +314,7 @@ c$$$ call dfill((noa*nva)*(nob*nvb),0.0d0,dbl_mb(k_t2ab),1)
|
|||
c$$$ call dfill((noa*nva), 0.0d0, dbl_mb(k_t1a), 1)
|
||||
c$$$ call dfill((nob*nvb), 0.0d0, dbl_mb(k_t1b), 1)
|
||||
c
|
||||
do iter = 1, 30 ! NOTE DIMENSIONS OF X/DF
|
||||
do iter = 1, 10 ! NOTE DIMENSIONS OF X/DF
|
||||
c
|
||||
c Transform the MO coefficients with the particle and hole matrices
|
||||
c
|
||||
|
|
@ -466,7 +478,7 @@ c
|
|||
$ dbl_mb(k_r2aa),dbl_mb(k_r2bb),dbl_mb(k_r2ab),
|
||||
$ dbl_mb(k_aeval), dbl_mb(k_beval), converged,
|
||||
$ dbl_mb(k_x), dbl_mb(k_df), dbl_mb(k_delta),
|
||||
$ nvar, iter)
|
||||
$ nvar, iter, shift)
|
||||
c
|
||||
c$$$ call jan_debug_print('T1a',dbl_mb(k_t1a), nva, noa, 1, 1)
|
||||
c$$$ call jan_debug_print('T1b',dbl_mb(k_t1b), nvb, nob, 1, 1)
|
||||
|
|
@ -1182,7 +1194,7 @@ c
|
|||
$ t2aa,t2bb,t2ab,
|
||||
$ r1a, r1b,
|
||||
$ r2aa,r2bb,r2ab, ea, eb, converged,
|
||||
$ x, df, delta, nvar, iter)
|
||||
$ x, df, delta, nvar, iter, shift)
|
||||
implicit none
|
||||
integer nmo, noa, nob, nva, nvb
|
||||
double precision fa(nmo,nmo), fb(nmo,nmo)
|
||||
|
|
@ -1202,6 +1214,7 @@ c
|
|||
double precision ea(nmo), eb(nmo)
|
||||
integer nvar, iter ! #variables, iteration number
|
||||
double precision x(nvar,*), df(nvar,*), delta(nvar)
|
||||
double precision shift
|
||||
logical converged
|
||||
c
|
||||
c t1 = t1 + R(e,m)/(em-ee)
|
||||
|
|
@ -1223,14 +1236,14 @@ c
|
|||
do m = 1, noa
|
||||
do e = 1, nva
|
||||
x(ind,iter) = t1a(e,m)
|
||||
df(ind,iter) = -r1a(e,m) / (ea(m) - ea(e+noa))
|
||||
df(ind,iter) = -r1a(e,m) / (ea(m) - ea(e+noa) - shift*0.5d0)
|
||||
ind = ind + 1
|
||||
end do
|
||||
end do
|
||||
do m = 1, nob
|
||||
do e = 1, nvb
|
||||
x(ind,iter) = t1b(e,m)
|
||||
df(ind,iter) = -r1b(e,m) / (eb(m) - eb(e+nob))
|
||||
df(ind,iter) = -r1b(e,m) / (eb(m) - eb(e+nob) - shift*0.5d0)
|
||||
ind = ind + 1
|
||||
end do
|
||||
end do
|
||||
|
|
@ -1243,7 +1256,7 @@ c
|
|||
do e = 1, nva
|
||||
x(ind,iter) = t2aa(e,f,m,n)
|
||||
df(ind,iter) = -r2aa(e,f,m,n) /
|
||||
$ (ea(m)+ea(n)-ea(noa+e)-ea(noa+f))
|
||||
$ (ea(m)+ea(n)-ea(noa+e)-ea(noa+f) - shift)
|
||||
ind = ind + 1
|
||||
end do
|
||||
end do
|
||||
|
|
@ -1258,7 +1271,7 @@ c
|
|||
do e = 1, nvb
|
||||
x(ind,iter) = t2bb(e,f,m,n)
|
||||
df(ind,iter) = -r2bb(e,f,m,n) /
|
||||
$ (eb(m)+eb(n)-eb(nob+e)-eb(nob+f))
|
||||
$ (eb(m)+eb(n)-eb(nob+e)-eb(nob+f) - shift)
|
||||
ind = ind + 1
|
||||
end do
|
||||
end do
|
||||
|
|
@ -1273,7 +1286,7 @@ c
|
|||
do e = 1, nva
|
||||
x(ind,iter) = t2ab(e,f,m,n)
|
||||
df(ind,iter) = -r2ab(e,f,m,n) /
|
||||
$ (ea(m)+eb(n)-ea(noa+e)-eb(nob+f))
|
||||
$ (ea(m)+eb(n)-ea(noa+e)-eb(nob+f) - shift)
|
||||
ind = ind + 1
|
||||
end do
|
||||
end do
|
||||
|
|
@ -3007,6 +3020,7 @@ c
|
|||
& int_acik(5000)
|
||||
c
|
||||
double precision int_buf(5000), t_buf(5000), w(100000)
|
||||
double precision tmpr(20*20*20*20)
|
||||
c
|
||||
call output(evalsa,1,nmo,1,1,nmo,1,1)
|
||||
call output(evalsb,1,nmo,1,1,nmo,1,1)
|
||||
|
|
@ -3148,7 +3162,7 @@ c
|
|||
& c_blk_lo, c_blk_hi, e_blk_lo, e_blk_hi,
|
||||
& i_blk_lo, i_blk_hi, j_blk_lo, j_blk_hi,
|
||||
& k_blk_lo, k_blk_hi,
|
||||
& spin, spinck)
|
||||
& spin, spinck, tmpr)
|
||||
c
|
||||
call uccsdt_get_t3x(b_blk, k_blk, j_blk,
|
||||
& spin, spinck, spin, t_buf)
|
||||
|
|
@ -4434,6 +4448,10 @@ c
|
|||
double precision t2_ecji(elo:ehi,clo:chi,jlo:jhi,ilo:ihi)
|
||||
double precision int_ekab(elo:ehi,klo:khi,alo:ahi,blo:bhi)
|
||||
integer i, j, k, a, b, c, e, cend, kend
|
||||
double precision flopcount
|
||||
c
|
||||
flopcount = 0d0
|
||||
call uccsdt_flops_enter()
|
||||
c
|
||||
do a = alo, ahi
|
||||
do b = blo, min(bhi,a-1)
|
||||
|
|
@ -4455,12 +4473,15 @@ c
|
|||
& int_ekab(e,k,a,b)
|
||||
end do
|
||||
end do
|
||||
flopcount = flopcount + 2*(ehi-elo+1)*(kend-klo+1)
|
||||
end do
|
||||
end do
|
||||
end do
|
||||
end do
|
||||
end do
|
||||
return
|
||||
c
|
||||
call uccsdt_flops_exit(1, flopcount)
|
||||
c
|
||||
end
|
||||
subroutine w_t2_ecjk_int_eiab
|
||||
& (w, t2_ecjk, int_eiab,
|
||||
|
|
@ -4478,6 +4499,10 @@ c
|
|||
double precision t2_ecjk(elo:ehi,clo:chi,jlo:jhi,klo:khi)
|
||||
double precision int_eiab(elo:ehi,ilo:ihi,alo:ahi,blo:bhi)
|
||||
integer i, j, k, a, b, c, e, cend, kend
|
||||
double precision flopcount
|
||||
c
|
||||
flopcount = 0d0
|
||||
call uccsdt_flops_enter()
|
||||
c
|
||||
do a = alo, ahi
|
||||
do b = blo, min(bhi,a-1)
|
||||
|
|
@ -4501,12 +4526,15 @@ c
|
|||
& int_eiab(e,i,a,b)
|
||||
end do
|
||||
end do
|
||||
flopcount = flopcount + 2*(ehi-elo+1)*(kend-klo+1)
|
||||
end do
|
||||
end do
|
||||
end do
|
||||
end do
|
||||
end do
|
||||
return
|
||||
c
|
||||
call uccsdt_flops_exit(2,flopcount)
|
||||
c
|
||||
end
|
||||
subroutine w_t2_ecik_int_ejab
|
||||
& (w, t2_ecik, int_ejab,
|
||||
|
|
@ -4524,6 +4552,10 @@ c
|
|||
double precision t2_ecik(elo:ehi,clo:chi,ilo:ihi,klo:khi)
|
||||
double precision int_ejab(elo:ehi,jlo:jhi,alo:ahi,blo:bhi)
|
||||
integer i, j, k, a, b, c, e, cend, kend
|
||||
double precision flopcount
|
||||
c
|
||||
flopcount = 0d0
|
||||
call uccsdt_flops_enter()
|
||||
c
|
||||
do a = alo, ahi
|
||||
do b = blo, min(bhi,a-1)
|
||||
|
|
@ -4545,12 +4577,15 @@ c
|
|||
& int_ejab(e,j,a,b)
|
||||
end do
|
||||
end do
|
||||
flopcount = flopcount + 2*(ehi-elo+1)*(kend-klo+1)
|
||||
end do
|
||||
end do
|
||||
end do
|
||||
end do
|
||||
end do
|
||||
return
|
||||
c
|
||||
call uccsdt_flops_exit(3, flopcount)
|
||||
c
|
||||
end
|
||||
subroutine w_t2_eaji_int_ekbc
|
||||
& (w, t2_eaji, int_ekbc,
|
||||
|
|
@ -4568,6 +4603,10 @@ c
|
|||
double precision t2_eaji(elo:ehi,alo:ahi,jlo:jhi,ilo:ihi)
|
||||
double precision int_ekbc(elo:ehi,klo:khi,blo:bhi,clo:chi)
|
||||
integer i, j, k, a, b, c, e, cend, kend
|
||||
double precision flopcount
|
||||
c
|
||||
flopcount = 0d0
|
||||
call uccsdt_flops_enter()
|
||||
c
|
||||
do a = alo, ahi
|
||||
do b = blo, min(bhi,a-1)
|
||||
|
|
@ -4589,12 +4628,15 @@ c
|
|||
& int_ekbc(e,k,b,c)
|
||||
end do
|
||||
end do
|
||||
flopcount = flopcount + 2*(ehi-elo+1)*(kend-klo+1)
|
||||
end do
|
||||
end do
|
||||
end do
|
||||
end do
|
||||
end do
|
||||
return
|
||||
c
|
||||
call uccsdt_flops_exit(4, flopcount)
|
||||
c
|
||||
end
|
||||
subroutine w_t2_ebji_int_ekac
|
||||
& (w, t2_ebji, int_ekac,
|
||||
|
|
@ -4612,6 +4654,10 @@ c
|
|||
double precision t2_ebji(elo:ehi,blo:bhi,jlo:jhi,ilo:ihi)
|
||||
double precision int_ekac(elo:ehi,klo:khi,alo:ahi,clo:chi)
|
||||
integer i, j, k, a, b, c, e, cend, kend
|
||||
double precision flopcount
|
||||
c
|
||||
flopcount = 0d0
|
||||
call uccsdt_flops_enter()
|
||||
c
|
||||
do a = alo, ahi
|
||||
do b = blo, min(bhi,a-1)
|
||||
|
|
@ -4633,18 +4679,21 @@ c
|
|||
& int_ekac(e,k,a,c)
|
||||
end do
|
||||
end do
|
||||
flopcount = flopcount + 2*(ehi-elo+1)*(kend-klo+1)
|
||||
end do
|
||||
end do
|
||||
end do
|
||||
end do
|
||||
end do
|
||||
return
|
||||
c
|
||||
call uccsdt_flops_exit(5, flopcount)
|
||||
c
|
||||
end
|
||||
subroutine w_t2_eakj_int_eicb
|
||||
& (w, t2_eakj, int_eicb,
|
||||
& alo, ahi, blo, bhi, clo, chi, elo, ehi,
|
||||
& ilo, ihi, jlo, jhi, klo, khi,
|
||||
& spin, spinck)
|
||||
& spin, spinck, r)
|
||||
c
|
||||
implicit none
|
||||
integer alo, ahi, blo, bhi, clo, chi,
|
||||
|
|
@ -4655,34 +4704,250 @@ c
|
|||
& clo:chi,blo:bhi,alo:ahi)
|
||||
double precision t2_eakj(elo:ehi,alo:ahi,klo:khi,jlo:jhi)
|
||||
double precision int_eicb(elo:ehi,ilo:ihi,clo:chi,blo:bhi)
|
||||
integer i, j, k, a, b, c, e, cend, kend
|
||||
double precision r(ilo:ihi,alo:ahi,clo:chi,klo:khi)
|
||||
integer i, j, k, a, b, c, e, cend, kend, abegin, ibegin, cend4
|
||||
integer ihi4
|
||||
double precision sum, sum0, sum1, sum2, sum3
|
||||
double precision flopcount
|
||||
c
|
||||
do a = alo, ahi
|
||||
do b = blo, min(bhi,a-1)
|
||||
flopcount = 0d0
|
||||
call uccsdt_flops_enter()
|
||||
c
|
||||
c Near original code with re-ordered loops
|
||||
c
|
||||
c jbkcaie = 124 Mflop
|
||||
c bacjkie = slower
|
||||
c
|
||||
do j = jlo, jhi
|
||||
kend = khi
|
||||
if (spin.eq.spinck) kend = min(khi,j-1)
|
||||
ibegin = max(j+1,ilo)
|
||||
do b = blo, bhi
|
||||
cend = chi
|
||||
if (spin.eq.spinck)cend = min(chi,b-1)
|
||||
do c = clo, cend
|
||||
do i = ilo, ihi
|
||||
do j = jlo, min(jhi,i-1)
|
||||
kend = khi
|
||||
if (spin.eq.spinck)kend = min(khi,j-1)
|
||||
do k = klo, kend
|
||||
abegin = max(b+1,alo)
|
||||
do k = klo, kend
|
||||
do c = clo, cend
|
||||
do a = abegin, ahi
|
||||
do i = ibegin, ihi
|
||||
sum = 0d0
|
||||
do e = elo, ehi
|
||||
c
|
||||
c write(6,*)' a,b,c,i,j,k,e: ',
|
||||
c & a,b,c,i,j,k,e
|
||||
c
|
||||
w(k,j,i,c,b,a) = w(k,j,i,c,b,a)
|
||||
& - t2_eakj(e,a,k,j)*
|
||||
& int_eicb(e,i,c,b)
|
||||
sum = sum + t2_eakj(e,a,k,j)*
|
||||
$ int_eicb(e,i,c,b)
|
||||
end do
|
||||
w(k,j,i,c,b,a) = w(k,j,i,c,b,a) - sum
|
||||
end do
|
||||
end do
|
||||
end do
|
||||
end do
|
||||
flopcount = flopcount + 2d0*dble(kend-klo+1)*
|
||||
$ dble(ahi-abegin+1)*dble(cend-clo+1)*
|
||||
$ dble(ihi-ibegin+1)*dble(ehi-elo+1)
|
||||
end do
|
||||
end do
|
||||
return
|
||||
c
|
||||
c Near original code with re-ordered loops and buffer for sum
|
||||
c
|
||||
c$$$ do j = jlo, jhi
|
||||
c$$$ kend = khi
|
||||
c$$$ if (spin.eq.spinck) kend = min(khi,j-1)
|
||||
c$$$ ibegin = max(j+1,ilo)
|
||||
c$$$ do b = blo, bhi
|
||||
c$$$ cend = chi
|
||||
c$$$ if (spin.eq.spinck)cend = min(chi,b-1)
|
||||
c$$$ abegin = max(b+1,alo)
|
||||
c$$$ do k = klo, kend
|
||||
c$$$ do c = clo, cend
|
||||
c$$$ do a = abegin, ahi
|
||||
c$$$ do i = ibegin, ihi
|
||||
c$$$ sum = 0d0
|
||||
c$$$ do e = elo, ehi
|
||||
c$$$ sum = sum + t2_eakj(e,a,k,j)*
|
||||
c$$$ $ int_eicb(e,i,c,b)
|
||||
c$$$ end do
|
||||
c$$$ r(i,a,c,k) = sum
|
||||
c$$$ end do
|
||||
c$$$ end do
|
||||
c$$$ end do
|
||||
c$$$ end do
|
||||
c$$$ do a = abegin, ahi
|
||||
c$$$ do c = clo, cend
|
||||
c$$$ do k = klo, kend
|
||||
c$$$ do i = ibegin, ihi
|
||||
c$$$ w(k,j,i,c,b,a) = w(k,j,i,c,b,a) - r(i,a,c,k)
|
||||
c$$$ end do
|
||||
c$$$ end do
|
||||
c$$$ end do
|
||||
c$$$ end do
|
||||
c$$$ flopcount = flopcount + 2d0*dble(kend-klo+1)*
|
||||
c$$$ $ dble(ahi-abegin+1)*dble(cend-clo+1)*
|
||||
c$$$ $ dble(ihi-ibegin+1)*dble(ehi-elo+1)
|
||||
c$$$ end do
|
||||
c$$$ end do
|
||||
c
|
||||
c 4-way unrolled code using i and buffer for sum
|
||||
c
|
||||
c$$$ do j = jlo, jhi
|
||||
c$$$ kend = khi
|
||||
c$$$ if (spin.eq.spinck) kend = min(khi,j-1)
|
||||
c$$$ ibegin = max(j+1,ilo)
|
||||
c$$$ ihi4 = ibegin + ((ihi-ibegin+1)/4)*4 - 1
|
||||
c$$$ do b = blo, bhi
|
||||
c$$$ cend = chi
|
||||
c$$$ if (spin.eq.spinck)cend = min(chi,b-1)
|
||||
c$$$ abegin = max(b+1,alo)
|
||||
c$$$ do k = klo, kend
|
||||
c$$$ do c = clo, cend
|
||||
c$$$ do a = abegin, ahi
|
||||
c$$$ do i = ibegin, ihi4, 4
|
||||
c$$$ sum0 = 0d0
|
||||
c$$$ sum1 = 0d0
|
||||
c$$$ sum2 = 0d0
|
||||
c$$$ sum3 = 0d0
|
||||
c$$$ do e = elo, ehi
|
||||
c$$$ sum0 = sum0 + t2_eakj(e,a,k,j)*
|
||||
c$$$ $ int_eicb(e,i ,c,b)
|
||||
c$$$ sum1 = sum1 + t2_eakj(e,a,k,j)*
|
||||
c$$$ $ int_eicb(e,i+1,c,b)
|
||||
c$$$ sum2 = sum2 + t2_eakj(e,a,k,j)*
|
||||
c$$$ $ int_eicb(e,i+2,c,b)
|
||||
c$$$ sum3 = sum3 + t2_eakj(e,a,k,j)*
|
||||
c$$$ $ int_eicb(e,i+3,c,b)
|
||||
c$$$ end do
|
||||
c$$$ r(i ,a,c,k) = sum0
|
||||
c$$$ r(i+1,a,c,k) = sum1
|
||||
c$$$ r(i+2,a,c,k) = sum2
|
||||
c$$$ r(i+3,a,c,k) = sum3
|
||||
c$$$c$$$ w(k,j,i ,c,b,a) = w(k,j,i ,c,b,a) - sum0
|
||||
c$$$c$$$ w(k,j,i+1,c,b,a) = w(k,j,i+1,c,b,a) - sum1
|
||||
c$$$c$$$ w(k,j,i+2,c,b,a) = w(k,j,i+2,c,b,a) - sum2
|
||||
c$$$c$$$ w(k,j,i+3,c,b,a) = w(k,j,i+3,c,b,a) - sum3
|
||||
c$$$ end do
|
||||
c$$$ end do
|
||||
c$$$ end do
|
||||
c$$$ end do
|
||||
c$$$ if (ihi4 .lt. ihi) then
|
||||
c$$$ do i = ihi4+1, ihi
|
||||
c$$$ do k = klo, kend
|
||||
c$$$ do c = clo, cend
|
||||
c$$$ do a = abegin, ahi
|
||||
c$$$ sum = 0d0
|
||||
c$$$ do e = elo, ehi
|
||||
c$$$ sum = sum + t2_eakj(e,a,k,j)*
|
||||
c$$$ $ int_eicb(e,i,c,b)
|
||||
c$$$ end do
|
||||
c$$$ r(i,a,c,k) = sum
|
||||
c$$$c$$$ w(k,j,i,c,b,a) = w(k,j,i,c,b,a) - sum
|
||||
c$$$ end do
|
||||
c$$$ end do
|
||||
c$$$ end do
|
||||
c$$$ end do
|
||||
c$$$ end if
|
||||
c$$$ do a = abegin, ahi
|
||||
c$$$ do c = clo, cend
|
||||
c$$$ do k = klo, kend
|
||||
c$$$ do i = ibegin, ihi
|
||||
c$$$ w(k,j,i,c,b,a) = w(k,j,i,c,b,a) - r(i,a,c,k)
|
||||
c$$$ end do
|
||||
c$$$ end do
|
||||
c$$$ end do
|
||||
c$$$ end do
|
||||
c$$$ flopcount = flopcount + 2d0*dble(kend-klo+1)*
|
||||
c$$$ $ dble(ahi-abegin+1)*dble(cend-clo+1)*
|
||||
c$$$ $ dble(ihi-ibegin+1)*dble(ehi-elo+1)
|
||||
c$$$ end do
|
||||
c$$$ end do
|
||||
c
|
||||
c 4-way unrolled code using C
|
||||
c
|
||||
c$$$ do j = jlo, jhi
|
||||
c$$$ kend = khi
|
||||
c$$$ if (spin.eq.spinck) kend = min(khi,j-1)
|
||||
c$$$ ibegin = max(j+1,ilo)
|
||||
c$$$ do b = blo, bhi
|
||||
c$$$ cend = chi
|
||||
c$$$ if (spin.eq.spinck)cend = min(chi,b-1)
|
||||
c$$$ abegin = max(b+1,alo)
|
||||
c$$$ cend4 = clo + ((cend-clo+1)/4)*4 - 1
|
||||
c$$$ do k = klo, kend
|
||||
c$$$ do c = clo, cend4, 4
|
||||
c$$$ do a = abegin, ahi
|
||||
c$$$ do i = ibegin, ihi
|
||||
c$$$ sum0 = 0d0
|
||||
c$$$ sum1 = 0d0
|
||||
c$$$ sum2 = 0d0
|
||||
c$$$ sum3 = 0d0
|
||||
c$$$ do e = elo, ehi
|
||||
c$$$ sum0 = sum0 + t2_eakj(e,a,k,j)*
|
||||
c$$$ $ int_eicb(e,i,c ,b)
|
||||
c$$$ sum1 = sum1 + t2_eakj(e,a,k,j)*
|
||||
c$$$ $ int_eicb(e,i,c+1,b)
|
||||
c$$$ sum2 = sum2 + t2_eakj(e,a,k,j)*
|
||||
c$$$ $ int_eicb(e,i,c+2,b)
|
||||
c$$$ sum3 = sum3 + t2_eakj(e,a,k,j)*
|
||||
c$$$ $ int_eicb(e,i,c+3,b)
|
||||
c$$$ end do
|
||||
c$$$ w(k,j,i,c ,b,a) = w(k,j,i,c ,b,a) - sum0
|
||||
c$$$ w(k,j,i,c+1,b,a) = w(k,j,i,c+1,b,a) - sum1
|
||||
c$$$ w(k,j,i,c+2,b,a) = w(k,j,i,c+2,b,a) - sum2
|
||||
c$$$ w(k,j,i,c+3,b,a) = w(k,j,i,c+3,b,a) - sum3
|
||||
c$$$ end do
|
||||
c$$$ end do
|
||||
c$$$ end do
|
||||
c$$$ end do
|
||||
c$$$ if (cend .gt. cend4) then
|
||||
c$$$ do k = klo, kend
|
||||
c$$$ do c = cend4+1, cend
|
||||
c$$$ do a = abegin, ahi
|
||||
c$$$ do i = ibegin, ihi
|
||||
c$$$ sum = 0d0
|
||||
c$$$ do e = elo, ehi
|
||||
c$$$ sum = sum + t2_eakj(e,a,k,j)*
|
||||
c$$$ $ int_eicb(e,i,c,b)
|
||||
c$$$ end do
|
||||
c$$$ w(k,j,i,c,b,a) = w(k,j,i,c,b,a) - sum
|
||||
c$$$ end do
|
||||
c$$$ end do
|
||||
c$$$ end do
|
||||
c$$$ end do
|
||||
c$$$ end if
|
||||
c$$$ flopcount = flopcount + 2d0*dble(kend-klo+1)*
|
||||
c$$$ $ dble(ahi-abegin+1)*dble(cend-clo+1)*
|
||||
c$$$ $ dble(ihi-ibegin+1)*dble(ehi-elo+1)
|
||||
c$$$ end do
|
||||
c$$$ end do
|
||||
c
|
||||
c Original code
|
||||
c
|
||||
c$$$ do a = alo, ahi
|
||||
c$$$ do b = blo, min(bhi,a-1)
|
||||
c$$$ cend = chi
|
||||
c$$$ if (spin.eq.spinck)cend = min(chi,b-1)
|
||||
c$$$ do c = clo, cend
|
||||
c$$$ do i = ilo, ihi
|
||||
c$$$ do j = jlo, min(jhi,i-1)
|
||||
c$$$ kend = khi
|
||||
c$$$ if (spin.eq.spinck)kend = min(khi,j-1)
|
||||
c$$$ do k = klo, kend
|
||||
c$$$ do e = elo, ehi
|
||||
c$$$c
|
||||
c$$$c write(6,*)' a,b,c,i,j,k,e: ',
|
||||
c$$$c & a,b,c,i,j,k,e
|
||||
c$$$c
|
||||
c$$$ w(k,j,i,c,b,a) = w(k,j,i,c,b,a)
|
||||
c$$$ & - t2_eakj(e,a,k,j)*
|
||||
c$$$ & int_eicb(e,i,c,b)
|
||||
c$$$ end do
|
||||
c$$$ end do
|
||||
c$$$ flopcount = flopcount + 2*(ehi-elo+1)*(kend-klo+1)
|
||||
c$$$ end do
|
||||
c$$$ end do
|
||||
c$$$ end do
|
||||
c$$$ end do
|
||||
c$$$ end do
|
||||
c
|
||||
call uccsdt_flops_exit(6, flopcount)
|
||||
c
|
||||
end
|
||||
subroutine w_t2_ebkj_int_eica
|
||||
& (w, t2_ebkj, int_eica,
|
||||
|
|
@ -4700,6 +4965,10 @@ c
|
|||
double precision t2_ebkj(elo:ehi,blo:bhi,klo:khi,jlo:jhi)
|
||||
double precision int_eica(elo:ehi,ilo:ihi,clo:chi,alo:ahi)
|
||||
integer i, j, k, a, b, c, e, cend, kend
|
||||
double precision flopcount
|
||||
c
|
||||
flopcount = 0d0
|
||||
call uccsdt_flops_enter()
|
||||
c
|
||||
do a = alo, ahi
|
||||
do b = blo, min(bhi,a-1)
|
||||
|
|
@ -4721,12 +4990,15 @@ c
|
|||
& int_eica(e,i,c,a)
|
||||
end do
|
||||
end do
|
||||
flopcount = flopcount + 2*(ehi-elo+1)*(kend-klo+1)
|
||||
end do
|
||||
end do
|
||||
end do
|
||||
end do
|
||||
end do
|
||||
return
|
||||
c
|
||||
call uccsdt_flops_exit(7, flopcount)
|
||||
c
|
||||
end
|
||||
subroutine w_t2_eaki_int_ejcb
|
||||
& (w, t2_eaki, int_ejcb,
|
||||
|
|
@ -4744,6 +5016,10 @@ c
|
|||
double precision t2_eaki(elo:ehi,alo:ahi,klo:khi,ilo:ihi)
|
||||
double precision int_ejcb(elo:ehi,jlo:jhi,clo:chi,blo:bhi)
|
||||
integer i, j, k, a, b, c, e, cend, kend
|
||||
double precision flopcount
|
||||
c
|
||||
flopcount = 0d0
|
||||
call uccsdt_flops_enter()
|
||||
c
|
||||
do a = alo, ahi
|
||||
do b = blo, min(bhi,a-1)
|
||||
|
|
@ -4765,12 +5041,15 @@ c
|
|||
& int_ejcb(e,j,c,b)
|
||||
end do
|
||||
end do
|
||||
flopcount = flopcount + 2*(ehi-elo+1)*(kend-klo+1)
|
||||
end do
|
||||
end do
|
||||
end do
|
||||
end do
|
||||
end do
|
||||
return
|
||||
c
|
||||
call uccsdt_flops_exit(8, flopcount)
|
||||
c
|
||||
end
|
||||
subroutine w_t2_ebki_int_ejca
|
||||
& (w, t2_ebki, int_ejca,
|
||||
|
|
@ -4788,6 +5067,10 @@ c
|
|||
double precision t2_ebki(elo:ehi,blo:bhi,klo:khi,ilo:ihi)
|
||||
double precision int_ejca(elo:ehi,jlo:jhi,clo:chi,alo:ahi)
|
||||
integer i, j, k, a, b, c, e, cend, kend
|
||||
double precision flopcount
|
||||
c
|
||||
flopcount = 0d0
|
||||
call uccsdt_flops_enter()
|
||||
c
|
||||
do a = alo, ahi
|
||||
do b = blo, min(bhi,a-1)
|
||||
|
|
@ -4809,12 +5092,15 @@ c
|
|||
& int_ejca(e,j,c,a)
|
||||
end do
|
||||
end do
|
||||
flopcount = flopcount + 2*(ehi-elo+1)*(kend-klo+1)
|
||||
end do
|
||||
end do
|
||||
end do
|
||||
end do
|
||||
end do
|
||||
return
|
||||
c
|
||||
call uccsdt_flops_exit(9, flopcount)
|
||||
c
|
||||
end
|
||||
subroutine w_t2_mkab_int_mcji
|
||||
& (w, t2_mkab, int_mcji,
|
||||
|
|
@ -4832,6 +5118,10 @@ c
|
|||
double precision t2_mkab(mlo:mhi,klo:khi,alo:ahi,blo:bhi)
|
||||
double precision int_mcji(mlo:mhi,clo:chi,jlo:jhi,ilo:ihi)
|
||||
integer i, j, k, m, a, b, c, cend, kend
|
||||
double precision flopcnt
|
||||
c
|
||||
call uccsdt_flops_enter()
|
||||
flopcnt = 0d0
|
||||
c
|
||||
do a = alo, ahi
|
||||
do b = blo, min(bhi,a-1)
|
||||
|
|
@ -4853,12 +5143,15 @@ c
|
|||
& int_mcji(m,c,j,i)
|
||||
end do
|
||||
end do
|
||||
flopcnt = flopcnt + (kend-klo+1)*(mhi-mlo+1)
|
||||
end do
|
||||
end do
|
||||
end do
|
||||
end do
|
||||
end do
|
||||
return
|
||||
c
|
||||
call uccsdt_flops_exit(10,flopcnt)
|
||||
c
|
||||
end
|
||||
subroutine w_t2_miab_int_mcjk
|
||||
& (w, t2_miab, int_mcjk,
|
||||
|
|
@ -4876,6 +5169,10 @@ c
|
|||
double precision t2_miab(mlo:mhi,ilo:ihi,alo:ahi,blo:bhi)
|
||||
double precision int_mcjk(mlo:mhi,clo:chi,jlo:jhi,klo:khi)
|
||||
integer i, j, k, m, a, b, c, cend, kend
|
||||
double precision flopcnt
|
||||
c
|
||||
call uccsdt_flops_enter()
|
||||
flopcnt = 0d0
|
||||
c
|
||||
do a = alo, ahi
|
||||
do b = blo, min(bhi,a-1)
|
||||
|
|
@ -4897,12 +5194,15 @@ c
|
|||
& int_mcjk(m,c,j,k)
|
||||
end do
|
||||
end do
|
||||
flopcnt = flopcnt + (kend-klo+1)*(mhi-mlo+1)
|
||||
end do
|
||||
end do
|
||||
end do
|
||||
end do
|
||||
end do
|
||||
return
|
||||
c
|
||||
call uccsdt_flops_exit(11,flopcnt)
|
||||
c
|
||||
end
|
||||
subroutine w_t2_mjab_int_mcik
|
||||
& (w, t2_mjab, int_mcik,
|
||||
|
|
@ -4920,6 +5220,10 @@ c
|
|||
double precision t2_mjab(mlo:mhi,jlo:jhi,alo:ahi,blo:bhi)
|
||||
double precision int_mcik(mlo:mhi,clo:chi,ilo:ihi,klo:khi)
|
||||
integer i, j, k, m, a, b, c, cend, kend
|
||||
double precision flopcnt
|
||||
c
|
||||
call uccsdt_flops_enter()
|
||||
flopcnt = 0d0
|
||||
c
|
||||
do a = alo, ahi
|
||||
do b = blo, min(bhi,a-1)
|
||||
|
|
@ -4941,12 +5245,15 @@ c
|
|||
& int_mcik(m,c,i,k)
|
||||
end do
|
||||
end do
|
||||
flopcnt = flopcnt + (kend-klo+1)*(mhi-mlo+1)
|
||||
end do
|
||||
end do
|
||||
end do
|
||||
end do
|
||||
end do
|
||||
return
|
||||
c
|
||||
call uccsdt_flops_exit(12,flopcnt)
|
||||
c
|
||||
end
|
||||
subroutine w_t2_mkbc_int_maji
|
||||
& (w, t2_mkbc, int_maji,
|
||||
|
|
@ -4964,6 +5271,10 @@ c
|
|||
double precision t2_mkbc(mlo:mhi,klo:khi,blo:bhi,clo:chi)
|
||||
double precision int_maji(mlo:mhi,alo:ahi,jlo:jhi,ilo:ihi)
|
||||
integer i, j, k, m, a, b, c, cend, kend
|
||||
double precision flopcnt
|
||||
c
|
||||
call uccsdt_flops_enter()
|
||||
flopcnt = 0d0
|
||||
c
|
||||
do a = alo, ahi
|
||||
do b = blo, min(bhi,a-1)
|
||||
|
|
@ -4985,12 +5296,15 @@ c
|
|||
& int_maji(m,a,j,i)
|
||||
end do
|
||||
end do
|
||||
flopcnt = flopcnt + (kend-klo+1)*(mhi-mlo+1)
|
||||
end do
|
||||
end do
|
||||
end do
|
||||
end do
|
||||
end do
|
||||
return
|
||||
c
|
||||
call uccsdt_flops_exit(13,flopcnt)
|
||||
c
|
||||
end
|
||||
subroutine w_t2_mkac_int_mbji
|
||||
& (w, t2_mkac, int_mbji,
|
||||
|
|
@ -5008,6 +5322,10 @@ c
|
|||
double precision t2_mkac(mlo:mhi,klo:khi,alo:ahi,clo:chi)
|
||||
double precision int_mbji(mlo:mhi,blo:bhi,jlo:jhi,ilo:ihi)
|
||||
integer i, j, k, m, a, b, c, cend, kend
|
||||
double precision flopcnt
|
||||
c
|
||||
call uccsdt_flops_enter()
|
||||
flopcnt = 0d0
|
||||
c
|
||||
do a = alo, ahi
|
||||
do b = blo, min(bhi,a-1)
|
||||
|
|
@ -5029,12 +5347,15 @@ c
|
|||
& int_mbji(m,b,j,i)
|
||||
end do
|
||||
end do
|
||||
flopcnt = flopcnt + (kend-klo+1)*(mhi-mlo+1)
|
||||
end do
|
||||
end do
|
||||
end do
|
||||
end do
|
||||
end do
|
||||
return
|
||||
c
|
||||
call uccsdt_flops_exit(14,flopcnt)
|
||||
c
|
||||
end
|
||||
subroutine w_t2_micb_int_makj
|
||||
& (w, t2_micb, int_makj,
|
||||
|
|
@ -5052,6 +5373,10 @@ c
|
|||
double precision t2_micb(mlo:mhi,ilo:ihi,clo:chi,blo:bhi)
|
||||
double precision int_makj(mlo:mhi,alo:ahi,klo:khi,jlo:jhi)
|
||||
integer i, j, k, m, a, b, c, cend, kend
|
||||
double precision flopcnt
|
||||
c
|
||||
call uccsdt_flops_enter()
|
||||
flopcnt = 0d0
|
||||
c
|
||||
do a = alo, ahi
|
||||
do b = blo, min(bhi,a-1)
|
||||
|
|
@ -5073,12 +5398,15 @@ c
|
|||
& int_makj(m,a,k,j)
|
||||
end do
|
||||
end do
|
||||
flopcnt = flopcnt + (kend-klo+1)*(mhi-mlo+1)
|
||||
end do
|
||||
end do
|
||||
end do
|
||||
end do
|
||||
end do
|
||||
return
|
||||
c
|
||||
call uccsdt_flops_exit(15,flopcnt)
|
||||
c
|
||||
end
|
||||
subroutine w_t2_mica_int_mbkj
|
||||
& (w, t2_mica, int_mbkj,
|
||||
|
|
@ -5096,6 +5424,10 @@ c
|
|||
double precision t2_mica(mlo:mhi,ilo:ihi,clo:chi,alo:ahi)
|
||||
double precision int_mbkj(mlo:mhi,blo:bhi,klo:khi,jlo:jhi)
|
||||
integer i, j, k, m, a, b, c, cend, kend
|
||||
double precision flopcnt
|
||||
c
|
||||
call uccsdt_flops_enter()
|
||||
flopcnt = 0d0
|
||||
c
|
||||
do a = alo, ahi
|
||||
do b = blo, min(bhi,a-1)
|
||||
|
|
@ -5117,12 +5449,15 @@ c
|
|||
& int_mbkj(m,b,k,j)
|
||||
end do
|
||||
end do
|
||||
flopcnt = flopcnt + (kend-klo+1)*(mhi-mlo+1)
|
||||
end do
|
||||
end do
|
||||
end do
|
||||
end do
|
||||
end do
|
||||
return
|
||||
c
|
||||
call uccsdt_flops_exit(16,flopcnt)
|
||||
c
|
||||
end
|
||||
subroutine w_t2_mjcb_int_maki
|
||||
& (w, t2_mjcb, int_maki,
|
||||
|
|
@ -5140,6 +5475,10 @@ c
|
|||
double precision t2_mjcb(mlo:mhi,jlo:jhi,clo:chi,blo:bhi)
|
||||
double precision int_maki(mlo:mhi,alo:ahi,klo:khi,ilo:ihi)
|
||||
integer i, j, k, m, a, b, c, cend, kend
|
||||
double precision flopcnt
|
||||
c
|
||||
call uccsdt_flops_enter()
|
||||
flopcnt = 0d0
|
||||
c
|
||||
do a = alo, ahi
|
||||
do b = blo, min(bhi,a-1)
|
||||
|
|
@ -5161,12 +5500,15 @@ c
|
|||
& int_maki(m,a,k,i)
|
||||
end do
|
||||
end do
|
||||
flopcnt = flopcnt + (kend-klo+1)*(mhi-mlo+1)
|
||||
end do
|
||||
end do
|
||||
end do
|
||||
end do
|
||||
end do
|
||||
return
|
||||
c
|
||||
call uccsdt_flops_exit(17,flopcnt)
|
||||
c
|
||||
end
|
||||
subroutine w_t2_mjca_int_mbki
|
||||
& (w, t2_mjca, int_mbki,
|
||||
|
|
@ -5184,6 +5526,10 @@ c
|
|||
double precision t2_mjca(mlo:mhi,jlo:jhi,clo:chi,alo:ahi)
|
||||
double precision int_mbki(mlo:mhi,blo:bhi,klo:khi,ilo:ihi)
|
||||
integer i, j, k, m, a, b, c, cend, kend
|
||||
double precision flopcnt
|
||||
c
|
||||
call uccsdt_flops_enter()
|
||||
flopcnt = 0d0
|
||||
c
|
||||
do a = alo, ahi
|
||||
do b = blo, min(bhi,a-1)
|
||||
|
|
@ -5205,12 +5551,15 @@ c
|
|||
& int_mbki(m,b,k,i)
|
||||
end do
|
||||
end do
|
||||
flopcnt = flopcnt + (kend-klo+1)*(mhi-mlo+1)
|
||||
end do
|
||||
end do
|
||||
end do
|
||||
end do
|
||||
end do
|
||||
return
|
||||
c
|
||||
call uccsdt_flops_exit(18,flopcnt)
|
||||
c
|
||||
end
|
||||
subroutine w_t1a_int_abij
|
||||
& (v, t1a, int_abij,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue