Programação
-
-
Outra possibilidade para otimizar o desempenho das aplicações é o uso de bibliotecas otimizadas. Essas bibliotecas possuem funções que são comumente utilizadas implementadas de maneira otimizada para algumas arquiteturas.
Aula 10 - Bibliotecas Otimizadas (17/06/2020)
Um exemplo de biblioteca otimizada é a BLAS (Basic Linear Algebra Subprogram) (https://en.wikipedia.org/wiki/Basic_Linear_Algebra_Subprograms e http://www.netlib.org/blas/), que define várias funções para operações de álgebra linear sobre vetores e matrizes. Existem várias implementações dessas funções, como por exemplo, a MKL (Math Kernel Library) (https://software.intel.com/content/www/us/en/develop/documentation/mkl-developer-reference-c/top.html) da Intel e a GSL CBLAS (GNU Scientific Library) (https://www.gnu.org/software/gsl/doc/html/).
Arquivos da aula
- kernel4-mat_mul_naive.c: multiplicação de matrizes tradicional
- kernel5-mat_mul_blas.c: multiplicação de matrizes com a função cblas_gemm()
- kernel6-inner_prod.c: produto interno tradicional
- kernel7-inner_prod_blas.c: produto interno com a função cblas_ddot()
- kernel8-add_index.c: multiplicação dos elementos de um vetor por uma constante
- kernel9-add_index_blas.c: multiplicação dos elementos de um vetor com a função cblas_dscal()
Para compilar os arquivos com funções da biblioteca BLAS, basta acrescentar a diretiva -lblas.Os códigos foram desenvolvidos pelo Prof. Edson Borin (UNICAMP), com algumas adaptações para introdução das funções da biblioteca BLAS.Outra biblioteca interessante é a VOLK (Vector Optimized Library of Kernels) (https://www.libvolk.org/doxygen/index.html). Ela possui a implementação de várias operações sobre vetores/matrizes utilizando instruções SIMD. Trata-se de uma biblioteca muito bem definida e bem feita. Pode ser utilizada no desenvolvimento da Atividade 5.Tarefa da aula: Atividade 6 - kernel4-mat_mul_naive.c: multiplicação de matrizes tradicional
-