Skip to content

LucasDiasJorge/Concorrencia-e-Paralelismo

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

33 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Concorrência e Paralelismo

Estudos em Concorrência e Paralelismo na linguagem C e desenvolvimento de algoritmos de alta eficiência.

Material utilizado

Busca Linear paralela

A estrutura 'thread_data' é definida nesse código para armazenar os dados que serão passados como argumento para a função linear_search, que será executada por cada thread criada no programa.

Essa estrutura é utilizada para armazenar as seguintes informações:

  • thread_id: identificador da thread;
  • start_index: índice inicial do trecho do vetor que a thread irá pesquisar;
  • end_index: índice final do trecho do vetor que a thread irá pesquisar.
  • resut: índice que retorna o index do valor encontrado.
  • mutex: índice que se comunica com as demais threads para interromper a busca caso o valor seja encontrado.

Benchmarking

Tempo de contrução do array de inteiros de tamanho "1410065408" em média de 27 a 31 segundos, já subtraidos no tempo de processamento.

O valor a ser encontrado está localizado na última posição do array, valor "1981202369", com finalidade de simular o pior cenário do algoritmo.

Complexidade linear, ou sejá, O(N).

Dados de uso de threads em buscas lineares:

Threads Tempo
1 4,335s
4 1,258s
8 0,851s
16 0,209s

Vale a pena ressaltar que são apenas tempos medios, e a criação excessiva de threads pode ter um impacto negativo no desempenho do sistema como um todo, pois cada thread usa recursos do sistema, como memória e CPU. No meu caso (Ryzen 7 2700 e 16gb de ram com Ubuntu 22.04).

OpenMP lib (in progress)

https://curc.readthedocs.io/en/latest/programming/OpenMP-C.html

g++ parallel_search.cpp -o parallel -fopenmp

g++ count_sort_parallel.cpp -o count_sort_parallel -fopenmp

O Counting Sort não é naturalmente paralelizável, pois a ordenação é baseada na contagem de ocorrências dos elementos. No entanto, podemos explorar técnicas de paralelização para melhorar o desempenho em algumas etapas do algoritmo.

Uma abordagem para paralelizar o Counting Sort é dividir o array em partes e realizar a contagem paralelamente para cada parte. No entanto, a etapa de combinar os resultados parciais em uma contagem global e atualizar o array original ainda precisa ser feita sequencialmente, o que limita o ganho de desempenho.

About

Estudos iniciais em conceitos de paralelismo

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published