- Comprovar a melhora de desempenho do processador com a utilização de um mecanismo de predição e reforçar os conceitos de pipeline.
ADD , ADDI, SUB, SUBI, BEQ, B
- 32 registradores inicializados com '0' em todas as posições
- indica qual a próxima instrução a ser buscada
- em caso de instruções condicionais, o compilador não sabe que caminho o código vai seguir antes de ele ser realmente executado, então o mecanismo de predição vai auxiliar nisso)
- na etapa de fetch (busca) identifica se é uma instrução condicional
- quando chegar uma instrução condicional na etapa execute, é feita a verificação se ela é ou não tomada
- se foi tomada, a tabela é atualizada
- se ela não foi tomada, a tabela é atualizada e a instrução é marcada como inválida
- Por default, a predição é habilitada
- Foi adicionado o parâmetro isPredictionEnabled
npm start
- Total cycles: 176
- Valid instructions: 109 (61,9%)
- Invalid instructions: 67
- Total cycles: 128
- Valid instructions: 109 (85,1%)
- Invalid instructions: 19
- 48 ciclos, referentes às instruções inválidas, a menos (27,3% dos ciclos sem predição)
Executando o seguinte código no DrMips com o pipeline.cpu:
addi $t2, $t0, 2
addi $t3, $t0, 10
addi $t4, $t0, 10
nop
nop
nop
beq $t0, $t3, 5
addi $t3, $t3, -1 # *
addi $t1, $t0, 1
addi $t2, $t0, 1
b -5 # **
beq $t0, $t4, 5
addi $t4, $t4, -1 # *
addi $t1, $t0, 1
addi $t2, $t0, 1
b -5 # **
nop
Para compatibilização com o DrMips:
- (*) Estava convertendo incorretamente a pseudo-instrução 'subi'
- (**) O branch retroativo ainda incrementa o pc em uma instrução
As estatísticas resultantes foram as seguintes: