Otimização de loop é o processo de aumentar a velocidade de execução e reduzir os overheads associados a loops. Ele desempenha um papel importante na melhoria do desempenho do cache e no uso eficaz dos recursos de processamento paralelo. A maior parte do tempo de execução de um programa científico é gasto em loops.

A Otimização de Loop é uma otimização independente da máquina.

Diminuir o número de instruções em um loop interno melhora o tempo de execução de um programa, mesmo que a quantidade de código fora desse loop seja aumentada.

Técnicas de otimização de loop:

  1. Redução de frequência (Code Motion):
    Na redução de frequência, a quantidade de código no loop é diminuída. Uma instrução ou expressão, que pode ser movida para fora do corpo do loop sem afetar a semântica do programa, é movida para fora do loop.

    Exemplo:

    Código inicial:
    
    enquanto (i <100)
    {
     a = Sin (x) / Cos (x) + i;
     i ++;
    }
    
    Código otimizado:
    
    t = Sin (x) / Cos (x);
    enquanto (i <100)
    {
     a = t + i;
     i ++;
    } 
  2. Loop Unrolling:
    Loop Unrolling é uma técnica de transformação de loop que ajuda a otimizar o tempo de execução de um programa. Basicamente, removemos ou reduzimos as iterações. O desenrolamento do loop aumenta a velocidade do programa, eliminando a instrução de controle do loop e as instruções de teste do loop.

    Exemplo:

    Código inicial:
    
    para (int i = 0; i <5; i ++)
        printf ("Pankaj \ n");
    
    Código otimizado:
    
    printf ("Pankaj \ n");
    printf ("Pankaj \ n");
    printf ("Pankaj \ n");
    printf ("Pankaj \ n");
    printf ("Pankaj \ n"); 
  3. Loop Jamming:
    Loop jamming é a combinação de dois ou mais loops em um único loop. Isso reduz o tempo necessário para compilar o grande número de loops.

    Exemplo:

    Código Inicial:
    
    para (int i = 0; i <5; i ++)
        a = i + 5;
    para (int i = 0; i <5; i ++)
        b = i + 10;
    
    Código otimizado:
    para (int i = 0; i <5; i ++)
    {
     a = i + 5;
     b = i + 10;
    } 

Aprenda todos os conceitos do GATE CS com aulas gratuitas ao vivo em nosso canal do youtube.