Técnicas para desenvolvimento e aceleração de códigos científicos


Prof. Edson Borin
Instituto de Computação
Universidade Estadual de Campinas
Raul Baldin
Faculdade de Engenharia Civil, Arquitetura e Urbanismo
Universidade Estadual de Campinas

Atividade Prática: Bibliotecas otimizadas

Nesta atividade, verificaremos como bibliotecas otimizadas podem ser utilizadas para acelerar a execução de seu programa.

Conceitos Básicos

Fabricantes de processadores e de alguns compiladores disponibilizam para seus clientes bibliotecas com rotinas ajustadas manualmente para executar de forma eficiente em processadores modernos. Estas bibliotecas incluem geralmente rotinas conhecidas que são utilizadas em diversos tipos de software, como rotinas para gerenciamento de memória (por exemplo: malloc e free) e rotinas para aceleração de código científico e de simulação numérica, como rotinas básicas para álgebra linear, ou BLAS (do inglês: basic linear algebra subroutines).

Nesta atividade, compararemos o desempenho de um algoritmo de multiplicação de matrizes ingênua com o desempenho do algoritmo de multiplicação de matrizes de uma biblioteca otimizada.

Atividades

Cada atividade possui um arquivo com código fonte para executar o algoritmo, medir o tempo de execução e reportar o tempo e o desempenho do acesso à memória, em Gigabytes por segundo (GB/s) e o desempenho em Gigaflops por segundo (GFlops/s). O algoritmo é executado múltiplas vezes e os tempos médio, menor e maior são reportados.

Multiplicação de matrizes ingênua

Ao inspecionar o código do programa, você pode observar que:

Qual foi a maior vazão da memória atingida em seu computador?

Multiplicação de matrizes com CBLAS

Ao inspecionar o código do programa, você pode observar que:

Execute este kernel e compare o desempenho do mesmo com o desempenho da multiplicação de matrizes ingênua.

Qual a relação de desempenho entre este algoritmo e o algoritmo de multiplicação de matrizes ingênua?

Qual a relação da vazão da memória obtida com o algoritmo de multiplicação de matrizes da biblioteca otimizada e a vazão de memória obtida na cópia de matrizes?