Bug 10905

Summary: 'IMPLICIT' rule may slow down program up to 100 times
Product: Sisyphus Reporter: serpiph <serpiph>
Component: gcc4.1-fortranAssignee: Dmitry V. Levin <ldv>
Status: CLOSED WONTFIX QA Contact: qa-sisyphus
Severity: major    
Priority: P3 CC: glebfm, mike
Version: unstable   
Hardware: all   
OS: Linux   

Description serpiph 2007-02-22 12:25:27 MSK
Имеется набор программ, которые изначально были написаны с использованием
умолчаний при использовании переменных (т.е. если имя переменной начинается на
I,J,K,L,M,N, то переменная будет типа INTEGER, если на другие буквы, то REAL).
То есть программа:
=============
program test
ii=5
x1=8.1
write(*,*)ii,x1
end
============
выдаст
    5 8.10000
То есть программа быдет эквивалентна такой:
============
program test
integer ii
real x1
ii=5
x1=8.1
write(*,*)ii,x1
end
=============
Так вот при определённых условиях (какие конкретно, не знаю, может набор из
них): использование в COMMON-блоках таких переменных, использование таких
переменных в функциях и процедурах программа может начать тормозиться до 100 раз
даже на строках вида
A=B
В моей программе цикл вида (X - необъявленная переменная)
============
do l=1,50
do k=1,50
do j=1,50
do i=1,50
if(условие)then
x(i,j,k)=выражение, состоящее тольлко из сложения и перемножения элементов массива x
end if
end do
end do
end do
end do
=========
поначалу исполнялся 50мс, а через некоторое время - 5с, причём в дальнейшем
время выполнения цикла всё увеличивалось.

Всю программу предоставить не могу.

После выставления
IMPLICIT NONE
и принудительного объявления
REAL X(50,50,50)
замедление цикла прекратилось.
Comment 1 Michael Shigorin 2010-10-30 22:48:51 MSD
Предлагаю тоже в http://gcc.gnu.org/bugzilla/
Comment 2 Dmitry V. Levin 2018-07-13 04:30:58 MSK
Очевидно, неактуально.