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