¿En qué tipo de aprendizaje automático (supervisado, no supervisado, refuerzo) se podría clasificar la predicción de rama?

La predicción de ramificación en todos los casos que conozco es un proceso estadístico y heurístico simple, basado (si es que existe) en una ventana (pequeña) de éxitos / fracasos pasados ​​asociados con un punto de ramificación particular. El punto clave aquí es la cantidad de datos pasados ​​y la capacidad analítica que el diseñador de chips está dispuesto a dedicar a la función. Teniendo en cuenta la inevitable ley de rendimientos decrecientes.

Tener un aprendizaje automático adecuado y complejo requiere mucho almacenamiento de datos y procesamiento muscular. A menos que la implementación de dichos recursos (y, por lo tanto, hacer una CPU mucho más grande con un área de matriz sustancial dedicada a la predicción de ramificaciones) confiera una ventaja lo suficientemente grande, no tiene sentido de ingeniería ni siquiera intentarlo. Esa “propiedad inmobiliaria” se puede usar mejor como una memoria caché de instrucciones / datos más grande, más “núcleos”, un motor especulativo más complejo (uno que va en ambos sentidos y descarta la “ruta no tomada”), etc.

Tenga en cuenta que antes de comprometer un diseño de CPU con silicio, se realizan simulaciones extensas con cargas reales y se analizan para determinar qué es lo mejor para agregar y qué es lo mejor para dejar de lado. Hasta ahora, siempre ha sido mejor omitir la predicción de ramas complejas o incluso basadas en ML y dejar las clásicas estadísticas / heurísticas (con heurísticas mejoradas). Además, se ha encontrado que las formas limitadas de ejecución especulativa son útiles.

Creo que realmente depende de la técnica que utilices para hacer la predicción de rama. Creo que los costos de hardware para estos enfoques podrían ser diferentes, pero la clasificación del aprendizaje “supervisado”, “no supervisado” y “reforzado” se reduce a la información a la que tiene acceso el algoritmo / técnica.

Si intenta construir un predictor de rama que tiene un conjunto de datos de instancias previamente etiquetadas sobre dónde ir a continuación e intenta entrenar el algoritmo del predictor de rama en ese conjunto de datos, eso se consideraría aprendizaje “supervisado”.

Si intenta crear un predictor de rama que podría tener acceso a un conjunto de datos sin etiquetar, eso podría considerarse un aprendizaje “no supervisado”.

Si el algoritmo de predicción de rama tiene acceso a una señal de recompensa sobre su estado actual y posibles acciones, pero no tiene una verdad básica, eso podría considerarse aprendizaje de “refuerzo”.