Por se tratar de uma proposta para uma arquitetura paralela, pressup˜oe-se que quanto mais blocos funcionais idˆenticos trabalhando juntos, melhor a resposta em desempenho. Por´em, ´e preciso estudar a rela¸c˜ao de ´area de hardware × desempenho, comparando-se o aumento de ´area e da l´ogica de controle contra os benef´ıcios de tempo de resposta, antes de paralelizar alguma estrutura. Nesse trabalho, foi determinado o n´umero de cada um dos componentes principais que melhor responde a essa rela¸c˜ao custo/benef´ıcio. Foi determinado o n´umero de blocos paralelos para a semeadura e o n´umero de blocos paralelos para a extens˜ao. No Cap´ıtulo 6 s˜ao justificados, atrav´es de resultados de s´ıntese e simula¸c˜ao, o motivo da escolha desses valores.
Para a extens˜ao, foi poss´ıvel verificar que um n´umero fixo de processadores de extens˜ao, entre 2 e 5, atende na maior parte dos casos, independente do tamanho de w. Quando se ultrapassa o n´umero de 5 processadores, o tempo ocioso de alguns processadores aumenta abruptamente e consequentemente, a melhora do tempo de execu¸c˜ao ´e irrelevante, quando comparada ao acr´escimo de ´area de hardware. Logo, optou-se por paralelizar os processadores de extens˜ao, mas com um n´umero fixo determinado de forma emp´ırica: 2 < p < 5.
3.1 Macro Arquitetura 62
A partir da determina¸c˜ao do n´umero de processadores de extens˜ao, h´a a possibilidade do n´umero de sementes geradas, de at´e (n − w + 1) por ciclos, ser diferente da quantidade de processadores de extens˜ao existentes. Por esse motivo, fez-se necess´ario desenvolver um componente para controlar o acesso das sementes encontradas e balancear o tr´afego entre os processadores de extens˜ao, de modo a distribuir a carga de forma otimizada entre os processa- dores de extens˜ao. Esse componente, ´e o ´arbitro que est´a descrito a seguir.
A inser¸c˜ao de m´ultiplos processadores que podem ser compartilhados por mais de uma linha de dados traz consigo, al´em da divis˜ao da carga de trabalho, a necessidade de controle de acesso dos barramentos de entrada e sa´ıda, assunto amplamente abordado nos protocolos de comunica¸c˜oes (TANENBAUM, 2000).
Para a tarefa de divis˜ao da carga de trabalho, importou-se da teoria de sistemas opera- cionais, os conceitos necess´arios para a constru¸c˜ao do ´arbitro, que ´e tamb´em um escalonador. Versa a teoria de sistemas operacionais que, numa arquitetura paralela, ´e fact´ıvel 2 ou mais processos estarem aptos a utilizar um processador para ser executado. Nesse instante, o sistema operacional deve decidir qual dos processos aptos, armazenados em uma fila, ser´a escolhido para rodar primeiro. Essa tarefa e a tomada de decis˜ao ´e feita pelo escalonador de processos atrav´es da implementa¸c˜ao de alguns algoritmos de sele¸c˜ao, denominados algoritmos de escalonamento. O escalonador ´e a entidade do sistema operacional respons´avel por selecionar um processo apto a executar no processador e dividir o tempo do processador de forma justa entre os processos que est˜ao aptos (OLIVEIRA; CARISSIMI; TOSCANI, 2010).
A Figura 5, mostra que s˜ao (n−w +1) blocos que executam a semeadura paralelamente. Na sa´ıda de cada um desses blocos h´a uma fila, que armazena as sementes encontradas ao longo do processo at´e que haja um processador dispon´ıvel. Essas (n − w + 1) filas, foram constru´ıdas no padr˜ao fifo (first in first out). Cada semente armazenada, ´e um processo apto aguardando o processador para ser executado, e quando selecionadas, precisam ser roteadas para um dos processadores de extens˜ao atrav´es do barramento de dados.
O ´arbitro destaca-se por realizar trˆes importantes fun¸c˜oes simultaneamente. Para os processadores que realizam a extens˜ao, executa a fun¸c˜ao de escalonador. H´a tamb´em a interface entre semeadura e extens˜ao, com os barramentos dados, exercendo a fun¸c˜ao de controlador de barramentos. Para as filas localizadas na sa´ıda de cada um dos (n−w +1) blocos que executam a semeadura paralelamente, o ´arbitro monitora a ocupa¸c˜ao essa filas, na fun¸c˜ao de gerenciador de filas.
3.1 Macro Arquitetura 63
Tabela 11: L´ogica de desempate entre filas
Requisi¸c˜ao da Fila Resposta do Balanceador Opera¸c˜ao Resultante
XXX1 0001 POP na fila 1
XX1X 0010 POP na fila 2
X1XX 0100 POP na fila 3
1XXX 1000 POP na fila 4
dade para enviar sua etiqueta para o processador de extens˜ao dispon´ıvel. O ganho obtido com esse gerenciador de fila permite que o n´umero de processadores seja independente do numero de filas e m´odulos de compara¸c˜ao.
Como descrito acima, foi necess´ario inserir uma mem´oria do tipo fifo (first in first out) para armazenar as sementes at´e que essas fossem estendidas pelos processadores. A largura da fifo ´e determinada pelo tamanho das palavras, enquanto sua profundidade ´e derivada do n´umero de processadores de extens˜ao inclu´ıdos, de modo que quando h´a um tempo m´edio necess´ario para os processadores liberarem os dados, h´a necessidade de uma fila mais profunda. A menos que a fifo esteja cheia, a etapa de semeadura n˜ao vai interferir no processo de extens˜ao, pois as sementes ser˜ao gradativamente armazenadas na fifo.
Entre a sa´ıda das filas no padr˜ao fifo e os processadores de extens˜ao, h´a o ´arbitro que monitora as filas e toda vez que um processador est´a dispon´ıvel, direciona a semente contida na fila priorit´aria para ser estendida. Esse monitoramento ´e feito atrav´es de flags oriundos dos processadores e das filas. Para escalonar os processadores, o algoritmo utilizado ´e o round-robin, que direciona trabalho aos processadores de forma circular, a cada rodada. Caso o processador da rodada ainda esteja ocupado, o pr´oximo processador ´e escolhido.
A l´ogica de controle para escolher a fila priorit´aria, ´e sempre escolher a fila mais cheia, isto ´e, com mais posi¸c˜oes ocupadas. Caso duas ou mais filas estejam igualmente ocupadas, o crit´erio de desempate ´e a fila de menor n´umero, como ´e visto na Tabela 11.
O princ´ıpio de funcionamento da fun¸c˜ao do gerenciador de filas do ´arbitro ´e monitorar os sinais de flag de cada fila identificando qual deve ser a priorit´aria, por estar mais cheia. Caso mais de uma fila esteja cheia e n˜ao haja processadores de extens˜ao dispon´ıveis para todas elas, o ´arbitro gera uma interrup¸c˜ao para o controlador global, que ir´a desabilitar o clk da etapa de semeadura at´e que as filas tenham posi¸c˜oes dispon´ıveis para receber novas sementes. A Figura 6 mostra a l´ogica combinacional para conceder do barramento `a uma fila, a partir da requisi¸c˜ao do processador da rodada, repassado pelo ´arbitro. O ´arbitro determina o id da fila a ser usada, baseado nas posi¸c˜oes das filas. Esse id fornecido pelo ´arbitro ´e comparado com o id de cada fila, e quando h´a a requisi¸c˜ao, a l´ogica habilita o buffer tri-state somente da fila escolhida.
3.1 Macro Arquitetura 64 fifo& out posições& comp& prior'( n fila)*+', = ≠ rqst Árbitro rqst in fifo - out posições- comp- prior '( 0 fila) *+', = ≠ rqst in ... prior'(
Figura 6: Controle de barramento e prioridade
A escolha da fila a ser utilizada s´o acontece quando existe um processador livre, soli- citando atrav´es de um sinal de requisi¸c˜ao uma nova semente para ent˜ao process´a-la. No caso de todos os processadores de extens˜ao estarem livres ao mesmo tempo, o ´arbitro, na fun¸c˜ao de escalonador, prioriza o processador de menor n´umero, em detrimento dos demais. A escolha do processador de extens˜ao que ser´a utilizado, quando mais de um estiver requisitando dados, ´e como descrito, feito atrav´es do algoritmo round-robin.
Todas as mem´orias contidas na semeadura, s˜ao do padr˜ao de fila fifo, first in first out. Para o gerenciamento dessas filas, importou-se um bloco IP (Intellectual Property), artif´ıcio utilizado sempre que um componente ou bloco ´e devidamente difundido, como ´e o caso dos m´odulos de mem´oria, sem que seja acrescentada nenhuma especificidade para o projeto em quest˜ao.