Navegação : Página Inicial : Imprensa (546) : Boletins (85)

2012/01 - Edição 54 - Planejamento para Otimização Paralela

Leia aqui a 54º edição do boletim "Assespro em Destaque"



Planejamento para Otimização Paralela

Diana Byrne

 Otimizar os aplicativos para multicore  está se tornando uma exigência: computadores multi-core se popularizaram, atingindo 83% das remessas de computadores em 2010. E o número de núcleos está aumentando, com 60% dos próximos lançamentos projetados para ter quatro ou mais núcleos em 2012, de acordo com a IDC (previsão para processadores de computadores em todo o mundo no período de 2009-2013). A otimização paralela pode resultar em grande melhoria de performance, mas você precisará de um plano de ação que seja bem adequado ao seu aplicativo. Aqui estão algumas dicas para ajudá-lo a começar.
 
Redesenho ou Ajuste

  A primeira escolha a fazer é se você iniciará do zero com um projeto paralelo ou implementará um código existente. Se você já tem um aplicativo em série que está funcionando corretamente, você pode empregar isto como o seu ponto de partida e procurar maneiras para introduzir o paralelismo.
Antes de fazer alterações no código existente, certifique-se de medir a performance do software atual para estabelecer uma base. Então, conforme você faz alterações, repita a medição de modo que você possa dizer se as alterações estão, de fato, resultando em uma performance melhor.
 
A forma em que você mede a performance do seu aplicativo vai depender do que seu aplicativo é projetado para fazer. Para ser capaz de repetir as medições de performance, comece identificando a carga de trabalho que você vai medir. A carga de trabalho é uma tarefa ou conjunto de tarefas que você identifica para ser executada pelo seu aplicativo . O objetivo é definir uma carga de trabalho repetitiva e, em seguida, tomar medidas enquanto o volume de trabalho é executado. Depois de saber a quantidade de trabalho realizado durante um determinado período de tempo, você pode repetir a carga de trabalho mais tarde e ver se o seu aplicativo está realizando mais trabalho dentro do mesmo período de tempo, ou então realizando a mesma quantidade de trabalho em um curto período de tempo. Isto lhe dará uma medida direta das melhorias de performance que você consegue enquanto ajusta o aplicativo. Você pode igualmente medir o progresso de esforços de ajuste usando as ferramentas que medem os níveis de paralelismo de seu aplicativo, tais como a Intel® Concurrency Checker.
 
Decomposição de funções ou dados

  Se você começar com um aplicativo em série já existente, a estrutura do  determinará se vai empregar decomposição funcional ou de dados: se o aplicativo tem funções ou tarefas que são independentes uma da outra, então elas podem ser executadas em paralelo. Se o seu aplicativo tem funções que operam sobre grandes quantidades de dados e é possível dividir os dados em unidades menores que podem ser processadas independentemente, dessa maneira você poderá empregar a decomposição de dados.

  A natureza do aplicativo também vai determinar a granularidade de paralelismo ideal. Granularidade se refere à frequência com que as tarefas que compõe o aplicativo se comunicam entre si. Quanto menos frequência de comunicação for necessária, mais paralelismo com granulação mais grossa poderá ser usado e mais o aplicativo poderá se beneficiar do paralelismo, uma vez que exigirá menos sobrecarga de comunicação.
 
 Identificação de gargalos e hotspots
 
  É importante identificar onde estão os maiores problemas antes de começar a fazer mudanças. Ferramentas para identificar hotspots ou gargalos no código vão guiá-lo a aplicar seus esforços para as áreas que podem render mais melhorias. Hotspots são locais onde o processador gasta muito tempo, então eles podem ser boas áreas para direcionar a otimização se o código for ineficiente. No entanto, pode ser que um hotspot já seja eficiente e o motivo pelo qual o processador gasta muito tempo lá é porque uma grande quantidade de trabalho está sendo realizada. Um hotspot é um gargalo quando o tempo extra de processamento é devido à ineficiência. 
 
Escolha uma metodologia

  Uma vez que você sabe que áreas de seu código precisam de melhoria, você tem opções diferentes para continuar com a otimização paralela.
Segundo a Pesquisa de Computação Paralela da Intel (Evans Data Corp, abril 2011), as três técnicas de programação paralela mais populares usadas por desenvolvedores são múltiplas subrotinas, modelo de memória compartilhada e passagem de mensagens.

  - Múltiplas subrotinas, gera múltiplas subrotinas (tarefas a serem realizadas por uma CPU) para existir dentro de um único processo, compartilhando a memória e outros recursos, resultando em uma operação mais rápida em sistemas multi-ore. A desvantagem de múltiplas subrotinas é que introduz o não-determinismo: você pode não ser capaz de prever a ordem em que ocorre o processamento, o que poderia levar a erros.

  - Modelo de memória compartilhada um único espaço de memória é usado por vários processadores, oferece um espaço de endereçamento unificado com o qual pode ser simples trabalhar, mas requer cuidados para evitar condições de corrida quando há dependência entre os eventos.
Passagem de mensagens envolve comunicação entre processos, e pode exigir mais trabalho para implementar, mas evita condições de corrida através da sincronização.
 
Medição do progresso e verificação de erros

  Cada vez que você incorporar mais paralelismo em seu aplicativo, é uma boa idéia avaliar novamente a sua carga de trabalho para ver se você está fazendo progresso em direção à melhoria da performance de seu aplicativo. Também é importante neste momento ter a certeza de que não foram introduzidos quaisquer defeitos, empregando ferramentas que podem ajudá-lo a verificar se há erros de subrotinas, tais como o Intel® Parallel Studio. Depois de determinar que a sua etapa de otimização mais recente paralela foi um sucesso, você pode repetir o processo para buscar o paralelismo ainda mais e uma melhoria de performance ou parar quando você tiver alcançado seus objetivos.

  Para obter informações adicionais sobre a otimização paralela, visite a Intel® Software Network Parallel Programming Community (Comunidade de programação paralela em rede da Intel) onde você pode acessar ferramentas e recursos para ajudá-lo a otimizar seu aplicativo para a tecnologia multi-core.
 
Diana Byrne é gerente de produto multicore no Grupo de Software e Serviços da Intel, onde trabalha desde 2004. Diana possui mestrado em Matemática, Ciência da Computação e Gestão de Tecnologia

Página 05

 

Para visualizar o 54º Boletim clique aqui

Retornar ao Topo da Página


Esta página já foi visitada 71 vezes

Editar esta página (na área restrita)