quinta-feira, 5 de abril de 2012

Sumário e Crítica do paper “You Don’t Know Jack About Shared Variables or Memory Models”

Neste artigo, os autores chamam a atenção a respeito da ineficiência das técnicas empregadas atualmente quando do tratamento da competição das threads pelo acesso às variáveis de memória compartilhada e a necessidade de se pensar em novas técnicas que evitem as condições de corrida.

A pesquisa inicia propondo uma discussão acerca de qual o método ou métodos podem ser considerados eficazes e precisos sem que condições de corrida afetem o resultado do programa. Os autores destacam problemas de alguns métodos utilizados como Mutex, Barreiras OpenMP, Threads POSIX e Pthreads, que tentam evitar as condições de corrida, ora com bloqueios ora com a sincronização dos processos, mas sem garantias de bons resultados. Ainda afirmam que, o problema fundamental está justamente no ponto, em que, vários threads tentando acessar “x” ao mesmo tempo sem que um thread se certifique que o trabalho de outro thread terminou.

Na sequência, e sem trazer maiores detalhes sobre o assunto, os autores destacam o conceito de Consistência Sequencial que na visão dos mesmos, é “fundamental na compreensão do comportamento das variáveis compartilhadas”. Na execução Sequencialmente Consistente, “Um programa Multi-thread é executado, intercalando passos de cada segmento do código. Logicamente, o computador executa um passo de um segmento, então escolhe outro segmento, executa o passo seguinte e assim por diante”.

Boehm e Adve mencionam que, o modelo de programação básica é escrever o código de tal forma que as condições de corrida se tornem impossíveis, pressupondo que a aplicação segue as regras de consistência sequencial. Neste trecho é inserido método que chamam de variáveis de sincronização, que a princípio, permitem que threads não escrevam na mesma variável.

Apesar de não darem garantias de que as Condições de Corrida jamais ocorrerão, os autores sugerem que, quando se escreve um programa, não há necessidade de se pensar explicitamente sobre o compilador ou hardware (ordenação de memória); mas, ao invés disso, pode-se raciocinar em termos de Consistência Sequencial, contanto que se sigam as regras para evitar as condições de corrida. Tornando mais claro, para tentar garantir uma execução livre, qualquer seção do código que não contém as operações de sincronização se comporta como se executado atomicamente (isto é, de uma só vez) sem ser afetado por outros segmentos e sem outra thread ser capaz de ver qualquer valor da variável que ocorre no meio da seção do código.

Os autores ainda enfatizam que o emprego de variáveis de sincronização é difícil de usar para estruturas de dados complexas uma vez que, não há nenhuma maneira fácil de fazer várias atualizações para uma estrutura de dados em uma operação atômica. Além do mais, estas variáveis não substituem os semáforos.

Atividade realizada durante as aulas de Processamento Paralelo

Curso Básico e Avançado de Java é na DevMedia!!!

Aprenda Java com a DevMedia!!! Para aqueles que desejam aprender sobre Java e ter sucesso nos estudos e na profissão, não perca o excelen...