I see more and more cases where we do strange memory partition decisions
that end up pessimizing loop constructs a lot. For example the fatigue
(polyhedron) benchmark has a loop like
do n = 1, number_of_sample_points
coefficient = (radius(n) / radius_of_curvature) *
sin(twopi * &
real(spin_frequency,LONGreal) * time)
strain_tensor(1,1,n) = - coefficient * Poissons_ratio
strain_tensor(2,2,n) = - coefficient * Poissons_ratio
strain_tensor(3,3,n) = coefficient
!
coefficient = twopi * real(spin_frequency,LONGreal) *
(radius(n) / &
radius_of_curvature) *
cos(twopi * &
real(spin_frequency,LONGreal) * time)
strain_rate_tensor(1,1,n) = -coefficient *
Poissons_ratio
strain_rate_tensor(2,2,n) = - coefficient *
Poissons_ratio
strain_rate_tensor(3,3,n) = coefficient
end do
where we end up putting the induction variable 'n' into a MPT together
with 'spin_frequency' (both are integers) which makes the calls to
sin and cos no longer loop invariant.