Seja um conjunto perfeitamente aninhado de loops, cujo interior contém referências atômicas em variáveis estruturadas:
for (i1=1; i1<=N1; i1++) for (i2=1; i2<=N2; i2++) ... for (ik=1; ik<=Nk; ik++) { <S1> ... A[h(i1,i2,...,ik)] ... <S2> ... A[g(i1,i2,...,ik)] ... }definimos:
· A: matriz de dimensão d
· h e g: mapeamento Zk em Zd
· C=
,
C Zk : espaço de iterações com tamanho igual a N =
· I = (i1,i2,...,ik) C : vetor de iteração que especifica os valores correntes dos índices dos loops
Há um tipo especial de dependência muito comum e que será usado na formulação matemática do resultado do custo da janela:
Definição 4: Dependência Uniformente Gerada é a dependência existente entre dois comandos S1 e S2 da forma:
<S1> ...... X(h(I)
+ d1)
<S2> ...... X(h(I)
+ d2)
onde h é um mapeamento de Zk em Zd.
A ordem em que as diferentes ocorrências da instrução S são executadas podem ser caracterizadas pela timing function, que é um mapeamento um-a-um entre C e {1,...,N}. A timing function é formalmente definida por:
T : C {1,... N} -> I
T(I)
= T(i1,i2,...,ik) = I
onde Pj = I e Pk = 1. Em casos onde nenhuma ambigüidade é possível, o vetor de iterações I e o correspondente passo de tempo t = T(I) serão identificados.