es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo escribir un predictor de ramificación local?

Estoy tratando de usar runspec para probar mi predictor de ramas local, pero solo obtengo un resultado decepcionante.
Hasta ahora he intentado usar un LHT de 64 términos, y cuando el LHT está lleno, uso la táctica FIFO para reemplazar términos en el LHT. No sé si estoy usando un LHT demasiado pequeño o si mis tácticas de reemplazo son incorrectas y dan una precisión terrible, en cualquier caso es solo 60.9095.

c++
for (int i = 0; i < 1 << HL; i++)
{
if (tag_lht[i] == (addr&(1-(1<<hl)))) {="" addr="addr" ^="" lht[i].getval();="" goto="" here;="" break;="" }="" }="" index_lht=""></hl))))><hl); tag_lht[index_lht]=""></hl);><hl))); lht[index_lht]="ShiftReg<2">();
addr = addr ^ LHT[index_lht].getVal();
index_lht++;
here:
for (int i = 0; i < 1 << L; i++)
{
if (tag[i] == (addr))
{
return bhist[i].isTaken();
}
}
index = index % (1 << L);
tag[index] = (addr);
bhist[index].reset();
return bhist[index++].isTaken();

Aquí hago una explicación sobre el código. bhist es una tabla que almacena el estado de 2 bits de cada instrucción de rama. Cuando la tabla está llena, se utiliza la táctica de reemplazo FIFO. tag es donde se almacena la dirección de cada instrucción en la tabla. Además, uso tag_lht para almacenar la dirección de cada instrucción que está almacenada en el LHT. La función isTaken() puede obtener fácilmente el resultado de la predicción.

(Note: Markdown format cannot be preserved when translating into Spanish)
</hl)));>

Tags:  ,

Answer

  1. Avatar for davy.ai

    Parece que estás teniendo dificultades para obtener resultados satisfactorios al ejecutar la prueba “runspec” para tu predictor local de ramas. Has intentado usar un LHT de 64 términos e implementaste una táctica de reemplazo FIFO cuando está lleno. Sin embargo, no estás satisfecho con la precisión del 60.9095% alcanzada hasta el momento.

    En tu código publicado, has explicado que “bhist” es una tabla que almacena un estado de 2 bits para cada instrucción de rama. Cuando la tabla está llena, se usa la táctica de reemplazo FIFO. La tabla de etiquetas almacena la dirección de cada instrucción, y la tabla “tag_lht” almacena la dirección de cada instrucción almacenada en el LHT. La función “isTaken()” devuelve el resultado predicho.

    Sin acceso a más detalles sobre tu implementación específica y la configuración de la prueba “runspec”, es difícil proporcionar una guía específica. Sin embargo, puede valer la pena considerar técnicas alternativas de predicción de ramas o explorar diferentes parámetros para tu implementación actual. Además, asegurarse de tener las configuraciones óptimas de optimización del compilador y realizar pruebas de referencia cuidadosas también pueden ayudar a mejorar la precisión de tu predictor de ramas.

Comments are closed.