|
A mentalidade de programação também constituiu um empecilho à medida que criou-se aquela idéia de sequencialidade, uma instrução após a outra, "step-by-step"... Com esta política de programação, o código fica, por vezes, impossibilitado de executar em paralelo por causa da dependência de dados e de controle gerado. Dependência de dados é quando, por exemplo, um dado gerado por uma instrução é usado pela instrução seguinte. Neste caso, ambas não podem ser executadas em paralelo, pois a segunda é dependente da primeira. Dependência de controle é quando a ordem de execução é "desrespeitada", ou seja, quando uma instrução atualiza manualmente o PC, fazendo com que a próxima a ser executada não seja a instrução seguinte, mas qualquer uma em qualquer lugar da memória!! Neste caso, como o processador irá executar duas ou mais instruções ao mesmo tempo se não pode garantir que a instrução subseqüente será a próxima?
|
Técnicas muito sofisticas foram desenvolvidas para resolver
estes problemas na velha e conhecida Von Neumann, mas cada uma
introduz um custo diretamente proporcional ao número de dependências
existentes no código. Estas técnicas trabalham desde a nível de compilador (evitando as dependências) até o nível de hardware (reorganizando as instruções e tentando "prever" qual é a próxima instrução). O melhor mesmo é que estas dependências não existissem e por esta razão que novas arquiteturas, chamadas de Non Von Neumann, foram pesquisadas. Uma destas arquiteturas propõe que a execução não seja mais baseada em instruções, mas controladas pelo fluxo de dados. São as chamadas máquinas DataFlow. Uma destas, chamada de ADAM, tentou incorporar características tanto da Von Neumann (execução ordenada) quanto a do dataflow (execução ordenada pela disponibilidade dos dados). Inicialmente vamos conhecer um pouco mais desta nova arquitetura. Após, será apresentada a máquina ADAM e de como os seus construtores misturaram estas duas arquiteturas completamente diferentes em uma única. |