Processing math: 100%

15 votos

¿Cuántos ciclos de reloj tarda en ejecutarse una instrucción RISC/CISC?

Según Diseño digital y arquitectura de ordenadores de Harris y Harris, hay varias formas de implementar un procesador MIPS, entre ellas las siguientes:

El microarquitectura de ciclo único ejecuta una instrucción completa en un ciclo. (...)

El microarquitectura multiciclo ejecuta las instrucciones en una serie de ciclos más cortos. (...)

El microarquitectura de canalización aplica el pipelining a la microarquitectura de ciclo único.

Las arquitecturas suelen clasificarse como RISC o CISC. En RISC vs. CISC :

Los procesadores RISC sólo utilizan instrucciones simples que pueden ejecutarse en un ciclo de reloj.

Dado que MIPS es una arquitectura RISC, estoy un poco confundido por las definiciones anteriores y me pregunto si no hay algún tipo de contradicción entre ellas. Más concretamente:

  1. Si una instrucción RISC puede dividirse en ciclos más cortos (Fetch, Decode, ...), ¿cómo podemos decir que sólo se necesita un ciclo de reloj para ejecutar la instrucción completa? ¿No se necesita un ciclo de reloj para ejecutar cada de los pasos?
  2. ¿Es así? realmente ¿se necesita un ciclo de reloj para ejecutar una instrucción RISC? ¿Qué ocurre, por ejemplo, si se produce un fallo en la caché y el procesador tiene que esperar a la DRAM lenta? ¿No debería esto prolongar bastante la ejecución de la instrucción?
  3. ¿Qué es exactamente un ciclo de instrucción? ¿Es el tiempo que tarda una instrucción en terminar (es decir, uno/múltiples ciclos de reloj)?
  4. ¿Cuánto dura una instrucción CISC en ciclos de reloj/instrucción?

2 votos

Normalmente no menos de uno :-).

24voto

crgrace Puntos 1486

Las definiciones prácticas de RISC y CISC son tan confusas y borrosas que casi no tienen sentido. Ahora es mejor pensar que se trata más bien de una "filosofía", en el sentido de que una arquitectura CISC tiene un conjunto de instrucciones más rico, con instrucciones individuales más potentes (por ejemplo, DIV y similares), mientras que un conjunto de instrucciones RISC es básico y rápido, y deja en manos del compilador la implementación de operaciones complejas. Incluso los conjuntos de instrucciones supuestamente CISC (como el x86) se traducen en instrucciones internas en los chips de Intel y AMD y se implementan más como procesadores RISC. Para responder a tus preguntas:

  1. Los procesadores RISC académicos originales (y creo que también las primeras versiones comerciales) ejecutaban una instrucción por ciclo, incluyendo la búsqueda y la decodificación. Esto era posible porque las rutas de datos eran superlimpias porque las operaciones de cada etapa eran simples y estaban bien definidas. (la contrapartida es que sólo se pueden implementar instrucciones muy sencillas de este modo). Una vez que se llegó al mundo real, las cosas se difuminaron. Cosas como el pipelining y la arquitectura superescalar hacen imposible la dicotomía RISC/CISC.

  2. Los chips RISC originales intentaban ejecutar una instrucción por ciclo y podían hacerlo si los datos estaban disponibles en el archivo de registro. Por supuesto, si el procesador tenía que ir a la DRAM, tardaba mucho más. RISC consiste en "intentar" ejecutar una instrucción por ciclo.

  3. Un ciclo de instrucción es el tiempo que se necesita entre los fetches.

  4. En depende enormemente de la instrucción y de la arquitectura del conjunto de instrucciones. Incluso en una arquitectura CISC algunas instrucciones pueden ejecutarse muy rápidamente (como un desplazamiento a la izquierda o a la derecha, por ejemplo). Otras se ejecutan muy lentamente (10s de ciclos o más). La arquitectura VAX (probablemente la cúspide de la filosofía CISC) tenía instrucciones que eran realmente complejas. Por cierto, una arquitectura CISC suele ser más fácil de programar en ensamblador que una arquitectura RISC porque es casi como un lenguaje de alto nivel.

0 votos

> en el sentido de que una arquitectura CISC tiene un conjunto de instrucciones más rico. No, muchos risc tienen instrucciones más ricas que los cisc

7voto

Paul R Puntos 146

La respuesta corta

  1. Los pasos de decodificación y ejecución de la instrucción se ejecutan en paralelo con el siguiente paso de la instrucción anterior. Esta técnica se conoce como pipelining. Véase En los procesadores RISC abajo.

  2. Una arquitectura RISC de un solo tema suele tener una media de algo menos de una instrucción por ciclo debido a los estados de espera y al tiempo que tardan las operaciones de carga/almacenamiento que llegan a la memoria en lugar de ir de registro en registro. Las ranuras de retardo ofrecen un gancho arquitectónico que permite recuperar parte de este tiempo. Véase En los procesadores RISC abajo.

  3. Un ciclo de instrucción es el tiempo necesario para ejecutar una instrucción. Varía en función de la arquitectura y (en algunos casos) de las instrucciones. Por ejemplo, la mayoría de las instrucciones en un MIPS R2000/3000 tardan un ciclo. Las instrucciones que implican acceso a la memoria (carga/almacenamiento, bifurcación) tardan más de un ciclo, aunque las ranuras de retardo significan que puedes ejecutar algo más (posiblemente sólo un NOP) en la ranura de retardo. Las arquitecturas no alineadas pueden tener ciclos de instrucción de varios ciclos de reloj, que a menudo varían con el modo de direccionamiento. Véase En los procesadores RISC, las arquitecturas CISC tradicionales y Arquitecturas de cableado abajo.

    Los diseños de emisión múltiple pueden difuminar un poco este concepto ejecutando más de una instrucción en paralelo.

  4. Los procesadores CISC pueden tener instrucciones que tardan más o menos tiempo. El número exacto de ciclos de reloj depende de la arquitectura y las instrucciones. El número variable de ciclos de reloj que tardan los ISA de CISC es una de las razones por las que son difíciles de integrar en arquitecturas fuertemente canalizadas. Véase Arquitecturas CISC tradicionales abajo.

La respuesta más larga

En una CPU MIPS, SPARC o de otro tipo, todas las instrucciones (por una primera aproximación) se emiten en un solo ciclo, aunque pueden tener algo conocido como "ranura de retardo".

En los procesadores RISC

En este contexto, una CPU de un solo tema es aquella en la que la CPU no hace ningún análisis de dependencia sobre la marcha ni emite instrucciones en paralelo de la forma en que lo hacen las CPUs modernas, es decir, sólo tienen una unidad de ejecución que ejecuta las instrucciones en el orden en que se leen de la memoria. Más adelante se hablará de esto.

La mayoría de los procesadores RISC más antiguos son diseños de un solo elemento, y estos tipos se siguen utilizando ampliamente en los sistemas embebidos. Un núcleo RISC entero de 32 bits puede implementarse en unas 25.000-30.000 puertas, por lo que los núcleos de CPU de este tipo tienen un consumo de energía muy bajo y un tamaño muy reducido. Esto hace que sean fáciles y baratos de integrar en productos SOC (sistema en chip).

Los diseños de las CPUs RISC están canalizados: el procesamiento de la instrucción se realiza en varias etapas, y cada instrucción pasa por la canalización a la siguiente etapa en cada ciclo de reloj. En la mayoría de los casos, una CPU de una sola fase ejecutará algo parecido a una instrucción por ciclo de reloj.

Algunas arquitecturas tienen instrucciones como bifurcación o carga/almacenamiento desde la memoria, en las que el ciclo adicional que se produce por el acceso a la memoria es visible para el código.

Por ejemplo, en un SPARC V7/V8 diseñar la siguiente instrucción después de una bifurcación se ejecuta realmente antes de que la propia bifurcación tenga lugar. Normalmente se pone un NOP en la ranura después de la bifurcación, pero se puede poner otra instrucción en ella si se encuentra algo útil que hacer.

El MIPS R2000/R3000 tenía una ranura de retardo similar en las instrucciones de carga/almacenamiento. Si se cargaba un valor de la memoria, no aparecería realmente en el registro hasta otro ciclo. Podías poner un NOP en la ranura o hacer otra cosa si encontrabas algo útil que hacer que no dependiera de la operación de carga que acababas de emitir.

Si la memoria era más lenta que la CPU, lo que ocurría a menudo, podría obtener estados de espera en los accesos a la memoria. Los estados de espera congelan la CPU durante uno o más ciclos de reloj hasta que se completa el acceso a la memoria. En la práctica, estos estados de espera y el tiempo extra para los accesos a la memoria significan que los diseños de CPU de un solo tema tienen un promedio de algo menos de una instrucción por ciclo de reloj. Las ranuras de retardo ofrecen algunas oportunidades posibles para optimizar el código mediante la ejecución de alguna otra instrucción mientras se realiza una operación de memoria.

Procesadores CISC tradicionales

Procesadores CISC eran diseños que podían tener instrucciones de duración variable. A menudo tenían instrucciones más complejas implementadas directamente en el hardware que tendrían que hacerse en el software en una CPU RISC.

La mayoría de las arquitecturas de mainframe y prácticamente todos los diseños de PC hasta el M68K y el intel 386 eran CPUs CISC microcodificadas tradicionales. Estos diseños demostraron ser más lentos por reloj y utilizar más puertas que las CPUs RISC.

Microcódigo

Un ejemplo de microcódigo arquitectura (MOS 6502) puede verse en la emulación aquí . El microcódigo puede verse en la parte superior de la imagen.

El microcódigo controla los flujos de datos y las acciones que se activan en la CPU para ejecutar las instrucciones. Al recorrer los pasos del microcódigo se pueden activar las partes de una CPU, moviendo los datos a través de las ALU o realizando otros pasos. Los componentes reutilizables de la CPU pueden coordinarse a lo largo de varios ciclos de reloj para ejecutar una instrucción. En el caso del 6502, el microcódigo también puede ejecutar algunas acciones en cadena.

Los diseños microcodificados utilizaban menos silicio que los chips cableados a costa de tardar potencialmente varios ciclos de reloj en completar una instrucción. Dependiendo del diseño, estas CPUs tardarían más o menos tiempo en completar una instrucción.

Arquitecturas de cableado

Diseños de cableado (no necesariamente excluyentes con el microcódigo) ejecutan una instrucción de forma sincrónica, o pueden tener sus propios coordinadores para hacer algo a lo largo de varios ciclos de reloj. Suelen ser más rápidos a expensas de más hardware dedicado y, por tanto, son más caros de implementar que un diseño microcodificado de funcionalidad equivalente.

Un ejemplo famoso de esto fue el original CPU Amdahl 470/6 que era un sustituto de la CPU en ciertos modelos de IBM System/370. La CPU de Amdahl era un diseño de cableado en una época en la que las CPUs 370 de IBM se basaban en gran medida en el microcódigo. La CPU de Amdahl era unas 3 veces más rápida que las CPUs de IBM a las que sustituía.

Ni que decir tiene que a IBM no le hizo ninguna gracia y esto dio lugar a una batalla judicial que acabó obligando a IBM a abrir su arquitectura de mainframe hasta que el decreto de consentimiento expiró hace unos años.

Normalmente, un diseño cableado de este tipo no era tan rápido reloj a reloj como una CPU RISC, ya que los diferentes tiempos y formatos de las instrucciones no permitían el uso de pipelines como en un diseño RISC.

Diseños de emisión múltiple

La mayoría de las CPUs modernas son arquitecturas de emisión múltiple que puede procesar más de una instrucción a la vez dentro de un mismo hilo. El chip puede realizar un análisis de dependencia dinámico del flujo de instrucciones entrantes y emitir instrucciones en paralelo cuando no hay dependencia del resultado de un cálculo anterior.

El rendimiento de estos chips depende del grado de paralelismo que pueda alcanzarse en el código, pero la mayoría de las CPUs modernas tienen una media de varias instrucciones por ciclo en la mayor parte del código.

Las CPUs modernas de Intel y otras x86/X64 ISA tienen una capa que interpreta el conjunto de instrucciones CISC de la vieja escuela en microinstrucciones que puede ser alimentado a través de un núcleo de emisión múltiple de estilo RISC. Esto añade una sobrecarga que no está presente en las CPU con ISA diseñadas para la canalización (es decir, arquitecturas RISC como ARM o PowerPC).

Diseños VLIW

diseños VLIW, de los cuales el Intel Itanium es quizás el más conocido, nunca despegó como arquitecturas de corriente principal, pero IIRC hay una serie de arquitecturas DSP que utilizan este tipo de diseño. Un diseño VLIW hace explícita la emisión múltiple con una palabra de instrucción que contiene más de una instrucción que se emite en paralelo.

Estos dependían de buenos compiladores de optimización, que identificaba las dependencias y las oportunidades de paralelismo, colocando las instrucciones en las múltiples ranuras disponibles en cada palabra de instrucción.

Las arquitecturas VLIW funcionan bastante bien para las aplicaciones numéricas, ya que las operaciones de matrices/arreglos tienden a ofrecer oportunidades para un amplio paralelismo. El Itanium tuvo un nicho de mercado en aplicaciones de supercomputación durante un tiempo, y hubo al menos una arquitectura de supercomputación - el Multiflow TRACE - se produjo utilizando un ISA de este tipo.

Memoria y caché

Las CPUs modernas son mucho, mucho más rápidas que la memoria, por lo que las lecturas directas de la memoria pueden generar cientos de estados de espera que bloquean la CPU hasta que el acceso a la memoria se completa. El almacenamiento en caché, que ahora se realiza en múltiples capas, mantiene en la caché las ubicaciones de memoria utilizadas más recientemente. Como las CPUs suelen pasar la mayor parte del tiempo ejecutando código en bucles, esto significa que se obtienen buenas tasas de acierto al reutilizar las ubicaciones de memoria que se han usado recientemente. Esta propiedad se llama "localidad de referencia".

Cuando se consigue la localidad de referencia, la CPU puede funcionar a una velocidad cercana a la óptima. Los fallos de la caché en el siguiente nivel conllevan un número de estados de espera; los fallos de la caché en la memoria principal pueden conllevar cientos.

Así, el rendimiento real de los chips de la CPU puede depender en gran medida de la eficiencia de los patrones de acceso a la memoria. Se han escrito libros enteros sobre la optimización del código en este sentido, y es un tema complejo en sí mismo.

3voto

jns Puntos 449

Es una simplificación para los estudiantes.

Todos los procesadores no triviales están conectados en cadena. Hay una unidad de prefetch que transporta las instrucciones en un extremo, un número de unidades de ejecución en el medio haciendo el trabajo real, y un unidad de emisión responsable de declarar las instrucciones terminadas después de que la escritura en el registro o en la memoria haya terminado. Si hay varias unidades de ejecución (por ejemplo, una ALU de enteros, una ALU de coma flotante y una unidad vectorial) puede ser posible emitir (a veces llamado "retirar") múltiples instrucciones por ciclo de reloj. ¿Cómo puede una CPU proporcionar más de una instrucción por ciclo? entra en muchos más detalles sobre esto.

Como dices, ¿qué pasa si hay un retardo en la caché? Intel Hyperthreading es una solución novedosa para esto: dos lotes de registros de estado de la CPU, un lote de lógica de control y unidades de emisión. En cuanto una de las CPUs virtuales se cala, se pasa al estado de la otra. (esto es una gran simplificación)

El resultado de esto es que los manuales de las CPUs modernas dan tiempos de instrucción mucho más vagos, y es mucho más difícil escribir un código de temporización preciso en cuanto al ciclo, si por ejemplo estás tratando de salida de vídeo en tiempo real desde un hardware que no debería ser capaz de ello .

(La respuesta concreta a "¿Cuánto tiempo tarda una instrucción CISC en ciclos de reloj/instrucción?" es "busca en el manual de referencia del fabricante y tendrá los tiempos por instrucción")

0voto

user76329 Puntos 11

Los demás han escrito mucho material bueno, así que seré breve en mi respuesta: En los viejos tiempos, (años 80 aquí), los procesadores de 8 bits de la época (6800, 6502, Z80, 6809 y otros) eran considerados CISC. Algunas instrucciones podían ejecutarse en 2 ciclos de reloj, pero se trataba de instrucciones sencillas, como establecer/borrar bits de bandera en un registro de estado del procesador. Otras instrucciones podían tardar entre 2 y 6 e incluso hasta 9 ciclos de reloj en ejecutarse. Estos procesadores tenían algunas instrucciones bastante potentes, el Z80 tenía algunas instrucciones de borrado de bloques de memoria que escribían el mismo valor en una serie de bytes en la memoria, borrando efectivamente un gran bloque en una sola instrucción, sólo hay que configurar algunos registros y ejecutar la instrucción LDIR (cargar, incrementar y repetir).

El procesador 6502 (de memoria) tenía 56 instrucciones pero 13 modos de direccionamiento, creando un potente conjunto de instrucciones.

Los RISC llegaron hace mucho tiempo y adoptaron un enfoque diferente, tienen un puñado de instrucciones que se ejecutan todas en un solo ciclo de reloj. Los programas tienden a ser más largos y a ocupar más memoria porque las instrucciones son sencillas en cuanto a las operaciones que realizan, por lo que se necesitan más.

Si no recuerdo mal, el primer intento de arquitectura RISC fue el transputer o el procesador Acorn Risc.

0 votos

Podría decirse que la primera arquitectura de tipo RISC con pipelines fue el CDC 6600 diseñado por Seymour Cray. Eso fue un par de décadas antes de que el término RISC se generalizara. Los diseños de MIPS, ARM y otros microprocesadores RISC se remontan al periodo 1980-1985, y el primer hardware comercial que utilizó estos chips apareció a mediados de la década de 1980.

0 votos

Los chips individuales de los ordenadores eran bastante rápidos, pero no tenían el mismo tipo de arquitectura que se asocia normalmente a un chip RISC. es.wikipedia.org/wiki/Ordenador#Arquitectura

0 votos

Tengo un par de transpiladores en un estuche antiestático, como parte de una colección de microprocesadores históricos. Nunca los usé, habría sido muy divertido en aquellos tiempos experimentar con ellos.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X