Por exemplo, com uma matriz de três dimensões se teria:
!LOOP mais rápido
DO K=1,N3
DO J=1,N2
DO I=1,N1
A(I,J,K) = ...
END DO
END DO
END DO
Qualquer alteração da ordem desses LOOPs resulta num código mais lento.
Tomando-se o caso de duas dimensões apenas, qual seria a diferença de velocidade do loop mais rápido para o mais lento?
Na busca por respostas para essa pergunta, foi desenvolvido um pequeno projeto no Compaq Visual Fortran 6.6 ( 288Kb). Para uma matriz A de dimensão NxN, onde N=5000, foram rodados 20 vezes os códigos que permitiram colocar o valor de cada elemento da matriz como sendo
A(I,J) = A(I,J) + I**2 + J**2,
acessando linha por linha (mais lento) e coluna por coluna (mais rápido).
O tempo médio e o tempo médio relativo foram obtidos para comparação.
Os resultados foram os seguintes:

Ou seja, para este caso específico a diferença já mostrou ser muito grande. O acesso coluna por coluna chega a ser quase 5 vezes mais rápido que o acesso linha por linha. Um bom motivo para varrer seus códigos-fonte e excluir os loops coluna por coluna deles sempre que possível.
Oi, Gomes. Agora tirei minha dúvida naquela parte que tinha comentado com você.
ResponderExcluirObrigada,
Joyce.
Olá, gostaria de saber se é possível criar um vetor/matriz com tamanho definido pelo usuário e como fazer isso. Eu comecei a programar em Fortran agora e me deparei com esta dúvida, procurei mas não encontrei nenhuma explicação.
ResponderExcluirAgradeço desde já
Marcos