Soluções de hardware e software
Existem muitos métodos para reduzir o custo do hardware. Um método é integrar a assistência de comunicação e a rede com menos firmeza no nó de processamento, aumentando a latência e a ocupação da comunicação.
Outro método é fornecer replicação automática e coerência em software, em vez de hardware. O último método fornece replicação e coerência na memória principal e pode ser executado em uma variedade de granularidades. Ele permite o uso de peças de mercadoria prontas para uso para os nós e interconexão, minimizando o custo de hardware. Isso pressiona o programador para obter um bom desempenho.
Modelos de consistência de memória relaxada
O modelo de consistência de memória para um espaço de endereço compartilhado define as restrições na ordem em que as operações de memória nos mesmos locais ou em locais diferentes parecem estar sendo executados em relação um ao outro. Na verdade, qualquer camada de sistema que suporte um modelo de nomenclatura de espaço de endereço compartilhado deve ter um modelo de consistência de memória que inclui a interface do programador, a interface do sistema do usuário e a interface do hardware-software. O software que interage com essa camada deve estar ciente de seu próprio modelo de consistência de memória.
Especificações do sistema
A especificação do sistema de uma arquitetura especifica a ordenação e reordenação das operações de memória e quanto desempenho pode realmente ser obtido com isso.
A seguir estão alguns modelos de especificação usando os relaxamentos na ordem do programa -
Relaxing the Write-to-Read Program Order- Essa classe de modelos permite que o hardware suprima a latência das operações de gravação que foram perdidas na memória cache de primeiro nível. Quando a falha de gravação está no buffer de gravação e não é visível para outros processadores, o processador pode concluir as leituras que ocorrem em sua memória cache ou até mesmo uma única leitura que falha em sua memória cache.
Relaxing the Write-to-Read and Write-to-Write Program Orders- Permitir que as gravações ignorem as gravações pendentes anteriores em vários locais permite que várias gravações sejam mescladas no buffer de gravação antes de atualizar a memória principal. Assim, vários erros de gravação serão sobrepostos e se tornarão visíveis fora de ordem. A motivação é minimizar ainda mais o impacto da latência de gravação no tempo de interrupção do processador e aumentar a eficiência da comunicação entre os processadores, tornando novos valores de dados visíveis para outros processadores.
Relaxing All Program Orders- Nenhum pedido de programa é garantido por padrão, exceto dados e dependências de controle dentro de um processo. Assim, a vantagem é que as várias solicitações de leitura podem ser pendentes ao mesmo tempo e, na ordem do programa, podem ser contornadas por gravações posteriores e podem ser concluídas fora de ordem, permitindo ocultar a latência de leitura. Esse tipo de modelo é particularmente útil para processadores agendados dinamicamente, que podem continuar após as perdas de leitura para outras referências de memória. Eles permitem muitos dos reordenamentos, até mesmo a eliminação de acessos que são feitos por otimizações do compilador.
A Interface de Programação
As interfaces de programação assumem que as ordens do programa não precisam ser mantidas entre as operações de sincronização. É garantido que todas as operações de sincronização sejam explicitamente rotuladas ou identificadas como tal. A biblioteca de tempo de execução ou o compilador traduz essas operações de sincronização em operações adequadas de preservação de ordem exigidas pela especificação do sistema.
O sistema então garante execuções sequencialmente consistentes, embora possa reordenar as operações entre as operações de sincronização de qualquer maneira que desejar, sem interromper as dependências de um local dentro de um processo. Isso permite ao compilador flexibilidade suficiente entre os pontos de sincronização para os reordenamentos que ele deseja, e também permite que o processador execute tantos reordenamentos quantos forem permitidos por seu modelo de memória. Na interface do programador, o modelo de consistência deve ser pelo menos tão fraco quanto o da interface de hardware, mas não precisa ser o mesmo.
Mecanismos de Tradução
Na maioria dos microprocessadores, traduzir rótulos em mecanismos de manutenção de ordem equivale a inserir uma instrução de barreira de memória adequada antes e / ou depois de cada operação rotulada como uma sincronização. Isso salvaria instruções com carregamentos / armazenamentos individuais, indicando quais pedidos cumprir e evitando instruções extras. No entanto, como as operações geralmente não são frequentes, esse não é o caminho que a maioria dos microprocessadores fez até agora.
Superando Limitações de Capacidade
Discutimos os sistemas que fornecem replicação automática e coerência em hardware apenas na memória cache do processador. Um cache de processador, sem que seja replicado primeiro na memória principal local, replica os dados alocados remotamente diretamente na referência.
Um problema com esses sistemas é que o escopo da replicação local é limitado ao cache do hardware. Se um bloco for substituído da memória cache, ele deverá ser obtido da memória remota quando for necessário novamente. O objetivo principal dos sistemas discutidos nesta seção é resolver o problema da capacidade de replicação, mas ainda fornecendo coerência no hardware e na granularidade fina dos blocos de cache para eficiência.
Caches Terciários
Para resolver o problema da capacidade de replicação, um método é usar um cache de acesso remoto grande, mas mais lento. Isso é necessário para a funcionalidade, quando os nós da máquina são multiprocessadores em pequena escala e podem simplesmente ser aumentados para desempenho. Ele também conterá blocos remotos replicados que foram substituídos da memória cache do processador local.
Arquiteturas de memória somente cache (COMA)
Em máquinas COMA, cada bloco de memória em toda a memória principal tem uma etiqueta de hardware vinculada a ele. Não há um nó fixo onde sempre há garantia de espaço alocado para um bloco de memória. Os dados migram dinamicamente ou são replicados nas memórias principais dos nós que os acessam / atraem. Quando um bloco remoto é acessado, ele é replicado na memória de atração e trazido para o cache, sendo mantido consistente em ambos os locais pelo hardware. Um bloco de dados pode residir em qualquer memória de atração e pode mover-se facilmente de um para o outro.
Reduzindo o custo do hardware
Reduzir custos significa mover algumas funcionalidades de hardware especializado para software executado no hardware existente. É muito mais fácil para o software gerenciar a replicação e a coerência na memória principal do que no cache do hardware. Os métodos de baixo custo tendem a fornecer replicação e coerência na memória principal. Para que a coerência seja controlada de forma eficiente, cada um dos outros componentes funcionais do assistente pode se beneficiar da especialização e integração de hardware.
Os esforços de pesquisa visam reduzir o custo com diferentes abordagens, como por meio do controle de acesso em hardware especializado, mas atribuindo outras atividades a software e hardware comum. Outra abordagem é realizar o controle de acesso em software e é projetada para distribuir uma abstração de espaço de endereço compartilhado coerente em nós de mercadoria e redes sem suporte de hardware especializado.
Implicações para software paralelo
O modelo de consistência de memória relaxada precisa que programas paralelos rotulem os acessos conflitantes desejados como pontos de sincronização. Uma linguagem de programação fornece suporte para rotular algumas variáveis como sincronização, que serão então traduzidas pelo compilador para a instrução de preservação de ordem adequada. Para restringir a própria reordenação dos acessos do compilador à memória compartilhada, o compilador pode usar rótulos sozinho.