Programação Paralela

(5 minutos de leitura) Autora: Jessica Dagostini - beecrowd Programação paralela é a capacidade de realizarmos o processamento de uma mesma atividade em diferentes recursos de computação ao mesmo tempo para, assim, reduzirmos seu tempo de execução

Programação Paralela

Autora: Jessica Dagostini – beecrowd

(5 minutos de leitura)


Você provavelmente já deve ter se perguntado do porquê os processadores de notebooks e celulares agora vem com dual, quad ou octa core, certo? Afinal, no que essa quantidade diferente de cores vai me beneficiar? A resposta mais simples é: desempenho. Porém, isso depende.

Estamos chegando cada vez mais próximos do limite da Lei de Moore, que determina a taxa de crescimento da quantidade de transistores(1) em um mesmo chip de processamento. Cada salto que demos em sua arquitetura trouxe, para o consumidor final (seja ele desenvolvedor ou não), um enorme ganho de desempenho nos processos realizados pelo computador. Todavia, como comentado, estamos chegando no limite máximo de otimizações em um único hardware de processamento. Isso fez com que outras possibilidades se abrissem. É nesse contexto que a programação paralela ganha destaque.

Já bastante estudada por volta dos anos 1960, muitos anos antes de chegarmos ao limite de arquitetura, esse paradigma de programação vem ganhando espaço e destaque nos últimos anos. Mas, afinal, o que é programar de forma paralela? São dois programadores codificando juntos o mesmo programa?  Ou ainda dois programadores dividindo o mesmo teclado? Acho que não... :)

Programação paralela é a capacidade de realizarmos o processamento de uma mesma atividade em diferentes recursos de computação ao mesmo tempo para, assim, reduzirmos seu tempo de execução. Pense, por exemplo, no tradicional exemplo da receita de bolo. Nesta receita, não há necessidade de uma sequência exata de adição de ingredientes, o que nos permite adicioná-los ao recipiente de mistura em qualquer ordem. Para fazer este bolo precisamos de 2 ovos, 2 xícaras de farinha de trigo, 1 xícara de leite, 1 xícara de açúcar e duas colheres de chocolate em pó. Além de você, mais três pessoas vieram lhe ajudar a preparar a receita e você vai pedir que elas lhe ajudem. Logo de cara, você percebe que não precisa ficar responsável sozinho por coletar todos os ingredientes e pede ajuda delas. Vocês quatro ficarão responsáveis por um ingrediente cada e, assim, buscarão os mesmos ao mesmo tempo, ou seja, de forma paralela. Depois disso, para misturar, você não precisa de seus ajudantes e irá executar a ação sozinho(a). Mas, lembra que precisa untar a forma para adicionar a mistura e também precisa ligar o forno para pré-aquecer. O que você faz? Pede novamente ajuda para que, enquanto você mistura os ingredientes, dois de seus ajudantes fiquem responsáveis por uma dessas duas novas atividades. Ao final, você percebe que demorou muito menos tempo para fazer esse bolo com ajuda do que sozinho. Este pensamento é a mesma base da programação paralela!

Lembra dos many cores presentes em nossos dispositivos que comentamos no início do texto? Eles podem ser nossos ajudantes da receita de bolo na execução de um programa de computador! Assim, ao programar um software em paralelo, o desenvolvedor precisa identificar regiões do código que possam ser executadas de forma paralela (como a coleta dos ingredientes para o bolo) e delega tais atividades para que cada um dos cores façam esse trabalho em paralelo e entreguem a você, que irá gerenciar o restante. Mas é preciso que o programador diga para seu software de fato fazer uso de todo esse paralelismo disponível. Assim como se você não tivesse delegado atividades para seus ajudantes executarem na receita de bolo eles ficariam parados, o mesmo acontece com os múltiplos cores no seu dispositivo. O desenvolvedor do software em execução precisa ter delegado funções para esses recursos paralelos para que de fato ganhamos tal melhoria de desempenho desses many cores.

Vale ressaltar que essa paralelização não fica somente restrita aos cores de um único processador. Podemos realizar computação paralela usando diferentes computadores completos, agregados por uma conexão de alta velocidade, que é o que chamamos de clusters de computadores. Nestes clusters, podemos fazer uso não só dos núcleos paralelos como também de toda a estrutura desse outro nó de computação, como memória, disco, etc. E, por mais longe que isso possa parecer da sua realidade, está mais perto do que você imagina! Softwares de previsão do tempo, por exemplo, praticamente não existiriam sem a computação paralela (ou até existiriam, mas ficaríamos sabendo da previsão do tempo de hoje só no mês que vem). Cada vez mais temos a necessidade de alto processamento para computarmos cálculos complexos e assim temos resultados de simulações que impactam nossa vida, como a previsão do tempo, em tempo hábil para uso. Nesses casos, os nossos cores paralelos sozinhos não resolvem, e precisamos de um grande conglomerado de computadores para execução em paralelo desses cálculos, que é o que chamamos de supercomputadores. Mas esse tópico fica para o próximo texto.


Gostou do nosso conteúdo? Então siga-nos nas redes sociais para ficar por dentro de mais informações e acompanhe o nosso blog.


(1) A Lei de Moore determina que o número de componentes em um chip de processamento dobra a cada 18 meses. Os processadores mais modernos podem ter mais de um bilhão de transistores em uma única placa de silício. Quanto mais se coloca transistores em uma única placa, maior é o poder de processamento que ela tem.

Jessica Dagostini é Principal System Architect na beecrowd. Ela possui mestrado em Ciência da Computação pela Universidade Federal do Rio Grande do Sul e já teve a oportunidade de participar de Maratonas de Programação ao redor da América Latina

Compartilhe este artigo em suas redes sociais:
Avalie este artigo:
[yasr_visitor_votes size=”medium”]

Conteúdo

Nossos artigos mais recentes
Leia sobre as últimas tendências na área de tecnologia
Blog 13-06
O trabalho remoto tem se tornado cada vez mais comum na indústria...
Blog 11-06
A programação competitiva não é apenas um hobby, mas uma ferramenta poderosa...
Blog 04-06 v2
Competições de programação são campos de treinamento que preparam devs para desafios...

Extra, extra!

Assine nossa newsletter

Fique sempre atualizado com as novidades em tecnologia, transformação digital, mercado de trabalho e oportunidades de carreira

Gostaria de falar com um Representante de Vendas?

Interessado em:

Lorem ipsum dolor sit amet consectetur. Venenatis facilisi.