Localidade de Dados e Janela de Referências




A importância de se melhorar a localidade de dados está relacionado ao uso eficiente da hierarquia de memória. O princípio da localidade de referência diz que o dado usado mais recentemente tem grande probabilidade de ser acessado novamente num futuro próximo (localidade temporal). Favorecendo-se o acesso a tais dados, aumenta-se o desempenho do sistema. Então, na medida do possível, os elementos recentemente acessados devem ser mantidos em memórias mais rápidas. Devido ao fato de que memórias mais rápidas são menores, seu uso como memória de armazenamento dos dados de recente acesso, num nível próximo ao processador, e a utilização de memórias maiores (e mais lentas) em níveis mais distantes do processador, permite que se alcance um melhor compromisso entre custo e desempenho. Este tipo de organização é denominada de hierarquia de memória.

Um gerenciamento adequado da memória local ou da memória cache, associado a um código que faça uso mais intensivo de dados localizados, e portanto, passíveis de serem mantidos na memória local, favorece a melhoria de desempenho na medida em que provoca uma reutilização maior de dados que estão nas memórias rápidas. A otimização da localidade de dados, focalizada aqui, é baseado em transformação de programa direcionada à melhoria da localidade.

Note-se que é prioritário que se estabeleça uma métrica ou índice para se caracterizar quantitativamente essa localidade. Tendo disponibilidade dessa ferramenta, pode-se proceder à manipulação do código fonte através de transformações de programa, de modo a se chegar a uma estrutura com localidade ótima. O parâmetro a ser utilizado para a obtenção quantitativa da localidade de dados é o custo da janela de referência, tal como definido em [EISE90].

Neste caso, concentraremos a análise sobre a reutilização de elementos em uma matriz, o que não constitue grave restrição, uma vez que em programação para análise científica, a maior carga computacional está na manipulação de matrizes.

As transformações de programa tratadas aqui ficarão limitadas às transformações unimodulares, particularmente o loop interchange.





Pedro Vaz Artigas
E-mail: artigas@lsi.usp.br

LSI Laboratory of Integrated Systems