! { dg-do run } | |
! { dg-options "-finline-matmul-limit=0" } | |
! Stress-test the matmul blocking code with sizes close to or | |
! equal to powers ot two. | |
program main | |
implicit none | |
integer, dimension(*), parameter :: nn = & | |
& [2,3,4,5, 7,8,9, 15,16,17, 31,32,33, 63,64,65, & | |
127 ,228,129, 255,256,257]; | |
integer, parameter :: s = size(nn) | |
real, dimension(:,:),allocatable :: a, b, c | |
integer :: i1, i2, i3 | |
integer :: nx, ny, count | |
real :: sm | |
sm = 0.0 | |
do i1=1, s | |
nx = nn(i1) | |
do i2=1,s | |
ny = nn(i2) | |
do i3=1,s | |
count = nn(i3) | |
allocate (a(nx,ny), b(ny,count), c(nx,count)) | |
call random_number(a) | |
call random_number(b) | |
c = matmul(a,b) | |
sm = sm + sum(c) | |
deallocate(a,b,c) | |
end do | |
end do | |
end do | |
end program main |