| Summary: | 'IMPLICIT' rule may slow down program up to 100 times | ||
|---|---|---|---|
| Product: | Sisyphus | Reporter: | serpiph <serpiph> |
| Component: | gcc4.1-fortran | Assignee: | Dmitry V. Levin <ldv> |
| Status: | CLOSED WONTFIX | QA Contact: | qa-sisyphus |
| Severity: | major | ||
| Priority: | P3 | CC: | glebfm, mike |
| Version: | unstable | ||
| Hardware: | all | ||
| OS: | Linux | ||
Предлагаю тоже в http://gcc.gnu.org/bugzilla/ Очевидно, неактуально. |
Имеется набор программ, которые изначально были написаны с использованием умолчаний при использовании переменных (т.е. если имя переменной начинается на 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) замедление цикла прекратилось.