Skip to content

Uma prática simples e elegante para demonstrar a utilização de paralelismo com CPU através da multiplicação matriz por vetor

Notifications You must be signed in to change notification settings

KaikeWesleyReis/threads-OpenMP

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 

Repository files navigation

Paralelismo com OpenMP

logo

OpenMP é uma interface API que suporta multiprocessamento de memória compartilhada em CPU para desenvolvimento de aplicações paralelas que utilizem ao máximo a capacidade do computador.

Prática

Para entender melhor como funciona essa biblioteca e seus conceitos foi avaliado o desempenho de um código em paralelismo com um sequencial para a resolução de um simples problema matemático de multiplicação de matrix e vetor dado por:

problema

Para definir o desempenho avalia-se o speedup da aplicação em paralelo em comparação com a sequencial.

Como utilizar o código

É recomendado a utilização do sistema Linux (para este código, foi usado o Ubuntu 18.04) para a construção e manuseio desse material visto a facilidade que este sistema possui com o openMP que já vem instalado nativamente.

Dado a limitação do sistema UNIX para o tamanho da memória stack, usado bastante neste código, é necessário aumentar o limite de memória (8mb) para permitir que o código calcule para uma alta quantidade de linhas e colunas. Para isso, basta rodar em um terminal:

ulimit -S 2048000

Esse comando permite um limite máximo de 2gb para a memória stack e evita erros de core dumped.

Agora, após fazer git clone ou baixar em zip este material, basta em um terminal (na mesma pasta que o código em C):

gcc -o code -fopenmp multiplication_matrix_vector_parallel_openMP.c

E em seguida rodar o executável:

./code 1

Resultados

Ao executar, será imprimido na tela:

image

No cabeçalho está a quantidade de linhas (r) e colunas (c) testadas seguida por uma tabela onde a primeira coluna mostra os N testes realizados, a segunda mostra o tempo para aplicação sequencial e a terceira o tempo para a aplicação em paralelo.

Fazendo diversos testes para diferentes números de linha e coluna, pode-se gerar um gráfico de speedup como o abaixo:

image

Onde a ordenada é o valor do Speedup e a abscissa é a quantidade de linha (r) X quantidade de coluna (c).

About

Uma prática simples e elegante para demonstrar a utilização de paralelismo com CPU através da multiplicação matriz por vetor

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages