RAM paralela - Parallel RAM
Na ciência da computação , uma máquina paralela de acesso aleatório ( RAM paralela ou PRAM ) é uma máquina abstrata de memória compartilhada . Como o próprio nome indica, a PRAM tem o objetivo de ser a analogia da computação paralela à máquina de acesso aleatório (RAM) (não deve ser confundida com a memória de acesso aleatório ). Da mesma forma que a RAM é usada por designers de algoritmos sequenciais para modelar o desempenho algorítmico (como complexidade de tempo), a PRAM é usada por designers de algoritmos paralelos para modelar o desempenho algorítmico paralelo (como complexidade de tempo, onde o número de processadores assumido normalmente também é declarado). Semelhante à maneira como o modelo de RAM negligencia questões práticas, como tempo de acesso à memória cache versus memória principal, o modelo PRAM negligencia questões como sincronização e comunicação , mas fornece qualquer número de processadores (dependente do tamanho do problema). O custo do algoritmo, por exemplo, é estimado usando dois parâmetros O (tempo) e O (tempo × número_processador).
Conflitos de leitura / gravação
Conflitos de leitura / gravação, comumente chamados de intertravamento no acesso ao mesmo local de memória compartilhada simultaneamente, são resolvidos por uma das seguintes estratégias:
- Leitura exclusiva, gravação exclusiva (EREW) - cada célula de memória pode ser lida ou gravada por apenas um processador por vez
- Leitura simultânea, gravação exclusiva (CREW) - vários processadores podem ler uma célula de memória, mas apenas um pode escrever por vez
- Leitura exclusiva e gravação simultânea (ERCW) - nunca considerada
- Leitura simultânea, gravação simultânea (CRCW) - vários processadores podem ler e gravar. Um CRCW PRAM às vezes é chamado de máquina de acesso aleatório simultâneo .
Aqui, E e C representam 'exclusivo' e 'simultâneo' respectivamente. A leitura não causa discrepâncias, enquanto a gravação simultânea é ainda definida como:
- Comum - todos os processadores gravam o mesmo valor; caso contrário é ilegal
- Arbitrário - apenas uma tentativa arbitrária é bem-sucedida, outras se aposentam
- Prioridade - a classificação do processador indica quem pode escrever
- Outro tipo de operação de redução de array , como SUM, Logical AND ou MAX.
Várias suposições de simplificação são feitas ao considerar o desenvolvimento de algoritmos para PRAM. Eles são:
- Não há limite para o número de processadores na máquina.
- Qualquer local de memória é uniformemente acessível a partir de qualquer processador.
- Não há limite para a quantidade de memória compartilhada no sistema.
- A contenção de recursos está ausente.
- Os programas escritos nessas máquinas são, em geral, do tipo SIMD .
Esses tipos de algoritmos são úteis para entender a exploração da simultaneidade, dividindo o problema original em subproblemas semelhantes e resolvendo-os em paralelo. A introdução do modelo formal 'P-RAM' na tese de Wyllie de 1979 teve o objetivo de quantificar a análise de algoritmos paralelos de uma forma análoga à Máquina de Turing . A análise se concentrou em um modelo MIMD de programação usando um modelo CREW, mas mostrou que muitas variantes, incluindo a implementação de um modelo CRCW e a implementação em uma máquina SIMD, eram possíveis apenas com sobrecarga constante.
Implementação
Os algoritmos PRAM não podem ser paralelizados com a combinação de CPU e memória dinâmica de acesso aleatório (DRAM) porque a DRAM não permite acesso simultâneo; mas eles podem ser implementados em hardware ou ler / escrever nos blocos internos de memória de acesso aleatório (SRAM) de uma matriz de portas programáveis em campo (FPGA), isso pode ser feito usando um algoritmo CRCW.
No entanto, o teste de relevância prática de algoritmos PRAM (ou RAM) depende se seu modelo de custo fornece uma abstração eficaz de algum computador; a estrutura desse computador pode ser bem diferente do modelo abstrato. O conhecimento das camadas de software e hardware que precisam ser inseridas está além do escopo deste artigo. Mas, artigos como Vishkin (2011) demonstram como uma abstração semelhante a PRAM pode ser suportada pelo paradigma multi-threading explícito (XMT) e artigos como Caragea & Vishkin (2011) demonstram que um algoritmo PRAM para o problema de fluxo máximo pode fornecem acelerações fortes em relação ao programa serial mais rápido para o mesmo problema. O artigo Ghanim, Vishkin & Barua (2018) demonstrou que os algoritmos PRAM no estado em que se encontram podem atingir um desempenho competitivo, mesmo sem nenhum esforço adicional para convertê-los como programas multithread no XMT.
Código de exemplo
Este é um exemplo de código SystemVerilog que encontra o valor máximo na matriz em apenas 2 ciclos de clock. Ele compara todas as combinações dos elementos na matriz no primeiro relógio e mescla o resultado no segundo relógio. Ele usa memória CRCW; m[i] <= 1
e maxNo <= data[i]
são escritos simultaneamente. A simultaneidade não causa conflitos porque o algoritmo garante que o mesmo valor seja gravado na mesma memória. Este código pode ser executado em hardware FPGA .
module FindMax #(parameter int len = 8)
(input bit clock, resetN, input bit[7:0] data[len], output bit[7:0] maxNo);
typedef enum bit[1:0] {COMPARE, MERGE, DONE} State;
State state;
bit m[len];
int i, j;
always_ff @(posedge clock, negedge resetN) begin
if (!resetN) begin
for (i = 0; i < len; i++) m[i] <= 0;
state <= COMPARE;
end else begin
case (state)
COMPARE: begin
for (i = 0; i < len; i++) begin
for (j = 0; j < len; j++) begin
if (data[i] < data[j]) m[i] <= 1;
end
end
state <= MERGE;
end
MERGE: begin
for (i = 0; i < len; i++) begin
if (m[i] == 0) maxNo <= data[i];
end
state <= DONE;
end
endcase
end
end
endmodule
Veja também
- Análise de algoritmos PRAM
- Taxonomia de Flynn
- Algoritmos sem bloqueio e sem espera
- Máquina de acesso aleatório
- Modelo de programação paralela
- XMTC
- Memória externa paralela (modelo)
Referências
- Eppstein, David; Galil, Zvi (1988), "Parallel algorítmicas técnicas para computação combinatória", Annu. Rev. Comput. Sci. , 3 : 233-283, doi : 10.1146 / annurev.cs.03.060188.001313
- JaJa, Joseph (1992), An Introduction to Parallel Algorithms , Addison-Wesley, ISBN 0-201-54856-9
- Karp, Richard M .; Ramachandran, Vijaya (1988), A Survey of Parallel Algorithms for Shared-Memory Machines , University of California, Berkeley, Department of EECS, Tech. Rep. UCB / CSD-88-408
- Keller, Jörg; Christoph Keßler; Jesper Träff (2001). Programação prática de PRAM . John Wiley and Sons. ISBN 0-471-35351-5.
- Vishkin, Uzi (2009), Thinking in Parallel: Some Basic Data-Parallel Algorithms and Techniques, 104 páginas (PDF) , notas de aula de cursos sobre algoritmos paralelos ministrados desde 1992 na Universidade de Maryland, College Park, Universidade de Tel Aviv e o Technion
- Vishkin, Uzi (2011), "Using simple abstraction to reinvent computing for parallelism", Communications of the ACM , 54 : 75-85, doi : 10.1145 / 1866739.1866757
- Caragea, George Constantin; Vishkin, Uzi (2011), "Anúncio breve: Melhores acelerações para fluxo máximo paralelo", Proceedings of the 23rd ACM symposium on Parallelism in algoritms and architectures - SPAA '11 , p. 131, doi : 10.1145 / 1989493.1989511 , ISBN 9781450307437
- Ghanim, Fady; Vishkin, Uzi; Barua, Rajeev (2018), "Easy PRAM-based High-performance Parallel Programming with ICE", IEEE Transactions on Parallel and Distributed Systems , 29 (2): 377–390, doi : 10.1109 / TPDS.2017.2754376 , hdl : 1903 / 18521
links externos
- PRAM protótipo da Universidade de Saarland
- Protótipo PRAM-On-Chip da Universidade de Maryland . Este protótipo busca colocar muitos processadores paralelos e a estrutura para interconectá-los em um único chip
- XMTC: Programação semelhante a PRAM - versão de software