#LyX 2.3 created this file. For more info see http://www.lyx.org/ \lyxformat 544 \begin_document \begin_header \save_transient_properties true \origin unavailable \textclass book \use_default_options true \begin_modules algorithm2e \end_modules \maintain_unincluded_children false \language spanish \language_package default \inputencoding auto \fontencoding global \font_roman "default" "default" \font_sans "default" "default" \font_typewriter "default" "default" \font_math "auto" "auto" \font_default_family default \use_non_tex_fonts false \font_sc false \font_osf false \font_sf_scale 100 100 \font_tt_scale 100 100 \use_microtype false \use_dash_ligatures true \graphics default \default_output_format default \output_sync 0 \bibtex_command default \index_command default \paperfontsize default \spacing single \use_hyperref false \papersize default \use_geometry false \use_package amsmath 1 \use_package amssymb 1 \use_package cancel 1 \use_package esint 1 \use_package mathdots 1 \use_package mathtools 1 \use_package mhchem 1 \use_package stackrel 1 \use_package stmaryrd 1 \use_package undertilde 1 \cite_engine basic \cite_engine_type default \biblio_style plain \use_bibtopic false \use_indices false \paperorientation portrait \suppress_date false \justification true \use_refstyle 1 \use_minted 0 \index Index \shortcut idx \color #008000 \end_index \secnumdepth 3 \tocdepth 3 \paragraph_separation indent \paragraph_indentation default \is_math_indent 0 \math_numbering_side default \quotes_style french \dynamic_quotes 0 \papercolumns 1 \papersides 1 \paperpagestyle default \tracking_changes false \output_changes false \html_math_output 0 \html_css_as_file 0 \html_be_strict false \end_header \begin_body \begin_layout Standard Para reducir por debajo de 1 los CPI de un núcleo del procesador, debemos lanzar y ejecutar varias instrucciones en cada ciclo de reloj, pero esto implica más presión sobre la memoria y los registros, más posibilidad de riesgos, más área de silicio y más consumo. Distinguimos: \end_layout \begin_layout Itemize \series bold Arquitecturas superescalares \series default : Lanzan un número variable de instrucciones por ciclo, de 0 a 8, planificadas de forma \series bold estática \series default por el compilador y \series bold dinámica \series default por el \emph on \lang english hardware \emph default \lang spanish . La ejecución puede ser en orden o fuera de orden, especulativa o no. \end_layout \begin_layout Itemize \series bold VLIW \series default ( \series bold \emph on \lang english Very Long Instruction Word \series default \emph default \lang spanish ): En cada ciclo se carga una \series bold macro-instrucción \series default , formada por varias instrucciones independientes agrupadas por el compilador. El \emph on \lang english hardware \emph default \lang spanish es más simple, lo que permite una mayor frecuencia de reloj y un menor consumo, pero no se beneficia de las técnicas de planificación dinámica y el código suele ser más grande e incompatible entre distintas versiones del procesador, por lo que actualmente está casi en desuso. \end_layout \begin_layout Standard Un núcleo superescalar tiene un sistema de memoria de alto rendimiento y unidades funcionales redundantes, que administra con técnicas como: \end_layout \begin_layout Itemize Renombrado de registros para eliminar las dependencias de nombre. \end_layout \begin_layout Itemize \series bold Planificación dinámica \series default : Reorganizar la secuencia de instrucciones separando la decodificación de la comprobación de dependencias y la emisión. \end_layout \begin_layout Itemize Ejecución fuera de orden para mitigar la degradación de rendimiento por dependencias de datos. \end_layout \begin_layout Itemize Ejecución especulativa para mitigar los riesgos de control. \end_layout \begin_layout Standard \begin_inset Separator plain \end_inset \end_layout \begin_layout Enumerate \series bold Obtención de instrucciones \series default ( \series bold IF \series default ): Lee varias instrucciones por ciclo en orden y las añade a una \series bold cola de instrucciones \series default , que suaviza los fallos de la caché de instrucciones. También hace \emph on \lang english prefetching \emph default \lang spanish de instrucciones. La predicción de saltos de puede hacer aquí o en ID, y es estática si siempre se predice el mismo comportamiento para el mismo salto o dinámica si no. \end_layout \begin_layout Enumerate \series bold Decodificación \series default ( \series bold ID \series default ): Decodifica varias instrucciones por ciclo en orden para conocer su tipo, las añade decodificadas en una \series bold ventana de instrucciones \series default y renombra los registros para evitar riesgos. Si se quiere terminación en orden se almacenan las instrucciones en un \series bold ROB \series default ( \emph on \lang english Re-Order Buffer \emph default \lang spanish ), un \emph on \lang english buffer \emph default \lang spanish circular FIFO que almacena las instrucciones y posteriormente los resultados hasta que se escriben en orden. \end_layout \begin_layout Enumerate \series bold Emisión \series default ( \series bold \emph on \lang english Issue \series default \emph default \lang spanish ): Se comprueba que los operandos y recursos (unidades funcionales y puestos de E/S) de cada instrucción estén disponibles y, cuando lo están, se manda a ejecutar la instrucción. Puede ser fuera de orden, permitiendo que instrucciones cuyos operandos y recursos estén disponibles adelanten a otras más antiguas. \end_layout \begin_layout Enumerate \series bold Ejecución \series default ( \series bold EX \series default , \series bold X \series default ): Fuera de orden, con varias unidades funcionales de cada tipo a ser posible totalmente segmentadas. Para que la latencia sea lo menor posible, se usa \series bold adelantamiento \series default , difundiendo el resultado de una operación a las pendientes tan pronto esta termina, y técnicas como la predicción de valor o la reutilización de valores. \end_layout \begin_layout Enumerate \series bold Pos-escritura \series default ( \series bold WB \series default ): Se difunden los resultados sobre un \series bold bus de resultados \series default , actualizando el ROB, del que otras instrucciones pueden tomar sus operandos. Los almacenamientos no hacen nada. \end_layout \begin_layout Enumerate \series bold Confirmación \series default ( \series bold \emph on \lang english Commit \series default \emph default \lang spanish ): Actualiza el estado de la máquina (registros y almacenamientos en memoria) en orden de programa desde el ROB, comprobando también las excepciones. La terminación en orden facilita deshacer las instrucciones mal especuladas y tratar las excepciones.` \end_layout \begin_layout Section Algoritmo de Tomasulo \end_layout \end_body \end_document