Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
44 changes: 41 additions & 3 deletions .github/workflows/makefile.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,19 @@ on:
branches: [ "develop" ]
pull_request:
branches: [ "develop" ]
# Manual dispatch for including all multiply kernels in matrix.
# We don't want this to run on every commit, but it's useful
# to be able to launch it manually
workflow_dispatch:
inputs:
multiply_kernel_test:
description: 'test all multiply kernels, instead of default only'
required: false
default: false

jobs:
build:
name: ${{matrix.fc}} -- ${{matrix.os}} -- ${{matrix.np}} processes -- ${{matrix.threads}} threads
name: ${{matrix.fc}} -- ${{matrix.os}} -- ${{matrix.multiply_kernel}} multiply kernel -- ${{matrix.np}} processes -- ${{matrix.threads}} threads
runs-on: ${{matrix.os}}
env:
FC: ${{matrix.fc}}
Expand All @@ -34,6 +43,35 @@ jobs:
- 2
# TODO: Could be worth testing on `mpich` in addition to `openmpi-bin`. Both are
# available in apt
multiply_kernel:
- default
- gemm
- ompDoii
- ompDoik
- ompDoji
- ompDojk
- ompGemm
- ompGemm_m
# As a work-around, copy the multiply_kernel_test variable to the matrix and
# exclude non-default multiply kernels when it's false
# https://github.com/orgs/community/discussions/26253#discussioncomment-3250989
test_all_multiply_kernels:
- ${{github.event.inputs.multiply_kernel_test}}
exclude:
- test_all_multiply_kernels: false
multiply_kernel: gemm
- test_all_multiply_kernels: false
multiply_kernel: ompDoii
- test_all_multiply_kernels: false
multiply_kernel: ompDoik
- test_all_multiply_kernels: false
multiply_kernel: ompDoji
- test_all_multiply_kernels: false
multiply_kernel: ompDojk
- test_all_multiply_kernels: false
multiply_kernel: ompGemm
- test_all_multiply_kernels: false
multiply_kernel: ompGemm_m

steps:
- uses: actions/checkout@v3
Expand Down Expand Up @@ -62,7 +100,7 @@ jobs:
- name: Build
working-directory: ${{github.workspace}}/src
run: |
make -j ${{matrix.np}} SYSTEM=gha
make -j ${{matrix.np}} SYSTEM=gha MULT_KERN=${{matrix.multiply_kernel}}

- name: Run test 001
working-directory: ${{github.workspace}}/testsuite/test_001_bulk_Si_1proc_Diag
Expand All @@ -81,7 +119,7 @@ jobs:
run: |
mpirun -np ${{matrix.np}} ../../bin/Conquest
cat Conquest_out

- name: Check test results
working-directory: ${{github.workspace}}/testsuite
run: pytest test_check_output.py
24 changes: 12 additions & 12 deletions src/multiply_kernel_default.f90
Original file line number Diff line number Diff line change
Expand Up @@ -148,12 +148,12 @@ subroutine m_kern_max(k_off, kpart, ib_nd_acc, ibaddr, nbnab, &
real(double) :: c(lenc)
integer, optional :: debug
! Remote indices
integer(integ) :: ib_nd_acc(mx_part)
integer(integ) :: ibaddr(mx_part)
integer(integ) :: nbnab(mx_part)
integer(integ) :: ibpart(mx_part*mx_absb)
integer(integ) :: ibseq(mx_part*mx_absb)
integer(integ) :: bndim2(mx_part*mx_absb)
integer(integ), intent(in) :: ib_nd_acc(:)
integer(integ), intent(in) :: ibaddr(:)
integer(integ), intent(in) :: nbnab(:)
integer(integ), intent(in) :: ibpart(:)
integer(integ), intent(in) :: ibseq(:)
integer(integ), intent(in) :: bndim2(:)
! Local variables
integer :: jbnab2ch(mx_absb) ! Automatic array
integer :: nbkbeg, k, k_in_part, k_in_halo, j, jpart, jseq
Expand Down Expand Up @@ -341,12 +341,12 @@ subroutine m_kern_min(k_off, kpart, ib_nd_acc, ibaddr, nbnab, &
real(double) :: b(lenb)
real(double) :: c(lenc)
! dimension declarations
integer :: ibaddr(mx_part)
integer :: ib_nd_acc(mx_part)
integer :: nbnab(mx_part)
integer :: ibpart(mx_part*mx_absb)
integer :: ibseq(mx_part*mx_absb)
integer :: bndim2(mx_part*mx_absb)
integer(integ), intent(in) :: ib_nd_acc(:)
integer(integ), intent(in) :: ibaddr(:)
integer(integ), intent(in) :: nbnab(:)
integer(integ), intent(in) :: ibpart(:)
integer(integ), intent(in) :: ibseq(:)
integer(integ), intent(in) :: bndim2(:)
! Local variables
integer :: jbnab2ch(mx_absb)
integer :: k, k_in_part, k_in_halo, nbkbeg, j, jpart, jseq
Expand Down
26 changes: 13 additions & 13 deletions src/multiply_kernel_gemm.f90
Original file line number Diff line number Diff line change
Expand Up @@ -149,12 +149,12 @@ subroutine m_kern_max(k_off, kpart, ib_nd_acc, ibaddr, nbnab, &
real(double) :: c(lenc)
integer, optional :: debug
! Remote indices
integer(integ) :: ib_nd_acc(mx_part)
integer(integ) :: ibaddr(mx_part)
integer(integ) :: nbnab(mx_part)
integer(integ) :: ibpart(mx_part*mx_absb)
integer(integ) :: ibseq(mx_part*mx_absb)
integer(integ) :: bndim2(mx_part*mx_absb)
integer(integ), intent(in) :: ib_nd_acc(:)
integer(integ), intent(in) :: ibaddr(:)
integer(integ), intent(in) :: nbnab(:)
integer(integ), intent(in) :: ibpart(:)
integer(integ), intent(in) :: ibseq(:)
integer(integ), intent(in) :: bndim2(:)
! Local variables
integer :: jbnab2ch(mx_absb) ! Automatic array
integer :: nbkbeg, k, k_in_part, k_in_halo, j, jpart, jseq
Expand Down Expand Up @@ -274,7 +274,7 @@ subroutine m_kern_max(k_off, kpart, ib_nd_acc, ibaddr, nbnab, &
end do ! end of k = 1, nahpart
if (allocated(tempa)) deallocate(tempa)
if (allocated(tempc)) deallocate(tempc)
!$omp end signle
!$omp end single
return
end subroutine m_kern_max
!!*****
Expand Down Expand Up @@ -398,12 +398,12 @@ subroutine m_kern_min(k_off, kpart, ib_nd_acc, ibaddr, nbnab, &
real(double) :: b(lenb)
real(double) :: c(lenc)
! dimension declarations
integer :: ibaddr(mx_part)
integer :: ib_nd_acc(mx_part)
integer :: nbnab(mx_part)
integer :: ibpart(mx_part*mx_absb)
integer :: ibseq(mx_part*mx_absb)
integer :: bndim2(mx_part*mx_absb)
integer(integ), intent(in) :: ib_nd_acc(:)
integer(integ), intent(in) :: ibaddr(:)
integer(integ), intent(in) :: nbnab(:)
integer(integ), intent(in) :: ibpart(:)
integer(integ), intent(in) :: ibseq(:)
integer(integ), intent(in) :: bndim2(:)
! Local variables
integer :: jbnab2ch(mx_absb)
integer :: k, k_in_part, k_in_halo, nbkbeg, j, jpart, jseq
Expand Down
25 changes: 12 additions & 13 deletions src/multiply_kernel_ompDoii.f90
Original file line number Diff line number Diff line change
Expand Up @@ -168,12 +168,12 @@ subroutine m_kern_max(k_off, kpart, ib_nd_acc, ibaddr, nbnab, &
real(double) :: c(lenc)
integer, optional :: debug
! Remote indices
integer(integ) :: ib_nd_acc(mx_part)
integer(integ) :: ibaddr(mx_part)
integer(integ) :: nbnab(mx_part)
integer(integ) :: ibpart(mx_part*mx_absb)
integer(integ) :: ibseq(mx_part*mx_absb)
integer(integ) :: bndim2(mx_part*mx_absb)
integer(integ), intent(in) :: ib_nd_acc(:)
integer(integ), intent(in) :: ibaddr(:)
integer(integ), intent(in) :: nbnab(:)
integer(integ), intent(in) :: ibpart(:)
integer(integ), intent(in) :: ibseq(:)
integer(integ), intent(in) :: bndim2(:)
! Local variables
integer :: jbnab2ch(mx_absb) ! Automatic array
integer :: nbkbeg, k, k_in_part, k_in_halo, j, jpart, jseq
Expand Down Expand Up @@ -250,7 +250,6 @@ subroutine m_kern_max(k_off, kpart, ib_nd_acc, ibaddr, nbnab, &
end do ! End of j = 1, nbnab
end do ! End of i = 1, at%n_hnab
end do ! End of k = 1, nahpart
!$omp end parallel
return
end subroutine m_kern_max
!!*****
Expand Down Expand Up @@ -380,12 +379,12 @@ subroutine m_kern_min(k_off, kpart, ib_nd_acc, ibaddr, nbnab, &
real(double) :: b(lenb)
real(double) :: c(lenc)
! dimension declarations
integer :: ibaddr(mx_part)
integer :: ib_nd_acc(mx_part)
integer :: nbnab(mx_part)
integer :: ibpart(mx_part*mx_absb)
integer :: ibseq(mx_part*mx_absb)
integer :: bndim2(mx_part*mx_absb)
integer(integ), intent(in) :: ib_nd_acc(:)
integer(integ), intent(in) :: ibaddr(:)
integer(integ), intent(in) :: nbnab(:)
integer(integ), intent(in) :: ibpart(:)
integer(integ), intent(in) :: ibseq(:)
integer(integ), intent(in) :: bndim2(:)
! Local variables
integer :: jbnab2ch(mx_absb)
integer :: k, k_in_part, k_in_halo, nbkbeg, j, jpart, jseq
Expand Down
24 changes: 12 additions & 12 deletions src/multiply_kernel_ompDoik.f90
Original file line number Diff line number Diff line change
Expand Up @@ -168,12 +168,12 @@ subroutine m_kern_max(k_off, kpart, ib_nd_acc, ibaddr, nbnab, &
real(double) :: c(lenc)
integer, optional :: debug
! Remote indices
integer(integ) :: ib_nd_acc(mx_part)
integer(integ) :: ibaddr(mx_part)
integer(integ) :: nbnab(mx_part)
integer(integ) :: ibpart(mx_part*mx_absb)
integer(integ) :: ibseq(mx_part*mx_absb)
integer(integ) :: bndim2(mx_part*mx_absb)
integer(integ), intent(in) :: ib_nd_acc(:)
integer(integ), intent(in) :: ibaddr(:)
integer(integ), intent(in) :: nbnab(:)
integer(integ), intent(in) :: ibpart(:)
integer(integ), intent(in) :: ibseq(:)
integer(integ), intent(in) :: bndim2(:)
! Local variables
integer :: jbnab2ch(mx_absb) ! Automatic array
integer :: nbkbeg, k, k_in_part, k_in_halo, j, jpart, jseq
Expand Down Expand Up @@ -380,12 +380,12 @@ subroutine m_kern_min(k_off, kpart, ib_nd_acc, ibaddr, nbnab, &
real(double) :: b(lenb)
real(double) :: c(lenc)
! dimension declarations
integer :: ibaddr(mx_part)
integer :: ib_nd_acc(mx_part)
integer :: nbnab(mx_part)
integer :: ibpart(mx_part*mx_absb)
integer :: ibseq(mx_part*mx_absb)
integer :: bndim2(mx_part*mx_absb)
integer(integ), intent(in) :: ib_nd_acc(:)
integer(integ), intent(in) :: ibaddr(:)
integer(integ), intent(in) :: nbnab(:)
integer(integ), intent(in) :: ibpart(:)
integer(integ), intent(in) :: ibseq(:)
integer(integ), intent(in) :: bndim2(:)
! Local variables
integer :: jbnab2ch(mx_absb)
integer :: k, k_in_part, k_in_halo, nbkbeg, j, jpart, jseq
Expand Down
42 changes: 12 additions & 30 deletions src/multiply_kernel_ompDoji.f90
Original file line number Diff line number Diff line change
Expand Up @@ -168,12 +168,12 @@ subroutine m_kern_max(k_off, kpart, ib_nd_acc, ibaddr, nbnab, &
real(double) :: c(lenc)
integer, optional :: debug
! Remote indices
integer(integ) :: ib_nd_acc(mx_part)
integer(integ) :: ibaddr(mx_part)
integer(integ) :: nbnab(mx_part)
integer(integ) :: ibpart(mx_part*mx_absb)
integer(integ) :: ibseq(mx_part*mx_absb)
integer(integ) :: bndim2(mx_part*mx_absb)
integer(integ), intent(in) :: ib_nd_acc(:)
integer(integ), intent(in) :: ibaddr(:)
integer(integ), intent(in) :: nbnab(:)
integer(integ), intent(in) :: ibpart(:)
integer(integ), intent(in) :: ibseq(:)
integer(integ), intent(in) :: bndim2(:)
! Local variables
integer :: jbnab2ch(mx_absb) ! Automatic array
integer :: nbkbeg, k, k_in_part, k_in_halo, j, jpart, jseq
Expand All @@ -184,14 +184,6 @@ subroutine m_kern_max(k_off, kpart, ib_nd_acc, ibaddr, nbnab, &
! OpenMP required indexing variables
integer :: nd1_1st(at%mx_halo), nd2_1st(mx_absb)

!$omp parallel default(none) &
!$omp shared(kpart, ibaddr, ib_nd_acc, nbnab, ibpart, ibseq, &
!$omp k_off, bndim2, mx_absb, mx_part, at, ahalo, chalo, &
!$omp a, b, c) &
!$omp private(i, j, k, j_in_halo, k_in_halo, k_in_part, nbkbeg, &
!$omp nb_nd_kbeg, nd1, nd2, nd3, jpart, jseq, jbnab2ch, &
!$omp nabeg, nbbeg, ncbeg, i_in_prim, icad, naaddr, &
!$omp nbaddr, ncaddr, n1, n2, n3, nd1_1st, nd2_1st)
! Loop over atoms k in current A-halo partn
do k = 1, ahalo%nh_part(kpart)
k_in_halo = ahalo%j_beg(kpart) + k - 1
Expand Down Expand Up @@ -259,7 +251,6 @@ subroutine m_kern_max(k_off, kpart, ib_nd_acc, ibaddr, nbnab, &
!$omp end do
end do ! End of i = 1, at%n_hnab
end do ! End of k = 1, nahpart
!$omp end parallel
return
end subroutine m_kern_max
!!*****
Expand Down Expand Up @@ -389,12 +380,12 @@ subroutine m_kern_min(k_off, kpart, ib_nd_acc, ibaddr, nbnab, &
real(double) :: b(lenb)
real(double) :: c(lenc)
! dimension declarations
integer :: ibaddr(mx_part)
integer :: ib_nd_acc(mx_part)
integer :: nbnab(mx_part)
integer :: ibpart(mx_part*mx_absb)
integer :: ibseq(mx_part*mx_absb)
integer :: bndim2(mx_part*mx_absb)
integer(integ), intent(in) :: ib_nd_acc(:)
integer(integ), intent(in) :: ibaddr(:)
integer(integ), intent(in) :: nbnab(:)
integer(integ), intent(in) :: ibpart(:)
integer(integ), intent(in) :: ibseq(:)
integer(integ), intent(in) :: bndim2(:)
! Local variables
integer :: jbnab2ch(mx_absb)
integer :: k, k_in_part, k_in_halo, nbkbeg, j, jpart, jseq
Expand All @@ -405,14 +396,6 @@ subroutine m_kern_min(k_off, kpart, ib_nd_acc, ibaddr, nbnab, &
! For OpenMP
integer :: nd1_1st(at%mx_halo), nd2_1st(mx_absb)

!$omp parallel default(none) &
!$omp shared(kpart, ibaddr, ib_nd_acc, nbnab, ibpart, ibseq, &
!$omp k_off, bndim2, mx_absb, mx_part, at, ahalo, chalo, &
!$omp a, b, c) &
!$omp private(j_in_halo, k_in_halo, k_in_part, nbkbeg, &
!$omp nb_nd_kbeg, nd1, nd2, nd3, i, j, k, jpart, jseq, &
!$omp jbnab2ch, icad, nabeg, nbbeg, ncbeg, naaddr, nbaddr, &
!$omp ncaddr, n1, n2, n3, i_in_prim, nd1_1st, nd2_1st)
! Loop over atoms k in current A-halo partn
do k = 1, ahalo%nh_part(kpart)
k_in_halo = ahalo%j_beg(kpart) + k - 1
Expand Down Expand Up @@ -472,7 +455,6 @@ subroutine m_kern_min(k_off, kpart, ib_nd_acc, ibaddr, nbnab, &
end do
!$omp end do
end do
!$omp end parallel
return
end subroutine m_kern_min
!!*****
Expand Down
24 changes: 12 additions & 12 deletions src/multiply_kernel_ompDojk.f90
Original file line number Diff line number Diff line change
Expand Up @@ -168,12 +168,12 @@ subroutine m_kern_max(k_off, kpart, ib_nd_acc, ibaddr, nbnab, &
real(double) :: c(lenc)
integer, optional :: debug
! Remote indices
integer(integ) :: ib_nd_acc(mx_part)
integer(integ) :: ibaddr(mx_part)
integer(integ) :: nbnab(mx_part)
integer(integ) :: ibpart(mx_part*mx_absb)
integer(integ) :: ibseq(mx_part*mx_absb)
integer(integ) :: bndim2(mx_part*mx_absb)
integer(integ), intent(in) :: ib_nd_acc(:)
integer(integ), intent(in) :: ibaddr(:)
integer(integ), intent(in) :: nbnab(:)
integer(integ), intent(in) :: ibpart(:)
integer(integ), intent(in) :: ibseq(:)
integer(integ), intent(in) :: bndim2(:)
! Local variables
integer :: jbnab2ch(mx_absb) ! Automatic array
integer :: nbkbeg, k, k_in_part, k_in_halo, j, jpart, jseq
Expand Down Expand Up @@ -380,12 +380,12 @@ subroutine m_kern_min(k_off, kpart, ib_nd_acc, ibaddr, nbnab, &
real(double) :: b(lenb)
real(double) :: c(lenc)
! dimension declarations
integer :: ibaddr(mx_part)
integer :: ib_nd_acc(mx_part)
integer :: nbnab(mx_part)
integer :: ibpart(mx_part*mx_absb)
integer :: ibseq(mx_part*mx_absb)
integer :: bndim2(mx_part*mx_absb)
integer(integ), intent(in) :: ib_nd_acc(:)
integer(integ), intent(in) :: ibaddr(:)
integer(integ), intent(in) :: nbnab(:)
integer(integ), intent(in) :: ibpart(:)
integer(integ), intent(in) :: ibseq(:)
integer(integ), intent(in) :: bndim2(:)
! Local variables
integer :: jbnab2ch(mx_absb)
integer :: k, k_in_part, k_in_halo, nbkbeg, j, jpart, jseq
Expand Down
Loading