Translate

lunes, 14 de mayo de 2012


Unidad central de procesamiento.




¿Que es?


La unidad central de procesamiento, UCP o CPU (central processing unit), o simplemente el procesador o microprocesador, es el componente del computador que interpreta las instrucciones contenidas en los programas y procesa los datos, es un circuito integrado que esta constituido por millones de componentes electrónicos.


Es el encargado de ejecutar los programas; desde el sistema operativo hasta las aplicaciones de usuario; sólo ejecuta instrucciones programadas en lenguaje de bajo nivel, realizando operaciones aritméticas y lógicas simples, tales como sumar, restar, multiplicar, dividir, las lógicas binarias y accesos a memoria.




El microprocesador está conectado, mediante un zócalo específico a la placa base de la computadora. Normalmente, para su correcto y estable funcionamiento, se le adosa un sistema de refrigeración, que consta de un disipador de calor fabricado en algún material de alta conductividad térmica, como cobre o aluminio, y de uno o más ventiladores que fuerzan la expulsión del calor absorbido por el disipador; entre éste último y la cápsula del microprocesador suele colocarse pasta térmica para mejorar la conductividad térmica. Existen otros métodos más eficaces, como la refrigeración líquida o el uso de células peltier para refrigeración extrema, aunque estas técnicas se utilizan casi exclusivamente para aplicaciones especiales, tales como en las prácticas de overclocking.


Un sistema informático de alto rendimiento puede estar equipado con varios microprocesadores trabajando en paralelo, y un microprocesador puede, a su vez, estar constituido por varios núcleos físicos o lógicos. Un núcleo físico se refiere a una porción interna del microprocesador cuasi-independiente que realiza todas las actividades de una CPU solitaria, un núcleo lógico es la simulación de un núcleo físico a fin de repartir de manera más eficiente el procesamiento. Existe una tendencia de integrar el mayor número de elementos dentro del propio procesador, aumentando así su eficiencia energética y la miniaturización. 


Esta unidad central de procesamiento está constituida esencialmente, por registros, cache, una unidad de control, una unidad aritmético lógica (ALU) , una unidad de cálculo en coma flotante(conocida como co-procesador matemático o FPU) y en algunos una unidad de procesamiento gráfico (GPU).




Registros del procesador.

Un registro es una memoria de alta velocidad y poca capacidad, integrada en el microprocesador, que permite guardar transitoriamente y acceder a valores muy usados, generalmente en operaciones matemáticas.
Los registros están en la cumbre de la jerarquía de memoria, y son la manera más rápida que tiene el sistema de almacenar datos. Los registros se miden generalmente por el número de bits que almacenan; por ejemplo, un "registro de 8 bits" o un "registro de 32 bits". Los registros generalmente se implementan en un banco de registros, pero antiguamente se usaban biestables individuales, memoria SRAM o formas aún más primitivas.


Tipos de registros
-Los registros de datos son usados para guardar números enteros. En algunas computadoras antiguas, existía un único registro 
  donde se guardaba toda la información, llamado acumulador.

-Los registros de memoria son usados para guardar exclusivamente direcciones de memoria. Eran muy usados en la  
  arquitectura harvard, ya que muchas veces las direcciones tenían un tamaño de palabra distinto que los datos.


-Los registros de propósito general (en inglés GPRs o General Purpose Registers) pueden guardar tanto datos como 
  direcciones. Son fundamentales en la arquitectura de von Neumann. La mayor parte de las computadoras modernas usa GPR.

-Los registros de coma flotante son usados para guardar datos en formato de coma flotante.

-Los registros constantes tienen valores creados por hardware de sólo lectura. Por ejemplo, en MIPS el registro cero siempre 
  vale 0.

-Los registros de propósito específico guardan información específica del estado del sistema, como el puntero de pila o el 
  registro de estado. 


Cache del procesador.


Básicamente, la memoria caché de un procesador es un tipo de memoria volátil (del tipo RAM), pero de una gran velocidad.

Su función es almacenar una serie de instrucciones y datos a los que el procesador accede continuamente, con la finalidad de que estos accesos sean instantáneos. Estas instrucciones y datos son aquellas a las que el procesador necesita estar accediendo de forma continua, por lo que para el rendimiento del procesador es imprescindible que este acceso sea lo más rápido y fluido posible.

Hay tres tipos diferentes de memoria caché para procesadores:


Caché de 1er nivel (L1):
Esta caché está integrada en el núcleo del procesador, trabajando a la misma velocidad que este. La cantidad de memoria caché L1 varía de un procesador a otro. Esta memoria suele a su vez estar dividida en dos partes dedicadas, una para instrucciones y otra para datos.


Caché de 2º nivel (L2):
Integrada también en el procesador, aunque no directamente en el núcleo de este, tiene las mismas ventajas que la caché L1, aunque es algo más lenta que esta. La caché L2 suele ser mayor que la caché L1.
A diferencia de la caché L1, esta no está dividida, y su utilización está más encaminada a programas que al sistema.


Caché de 3er nivel (L3):
Es un tipo de memoria caché más lenta que la L2, muy poco utilizada en la actualidad.
En un principio esta caché estaba incorporada a la placa base, no al procesador, y su velocidad de acceso era bastante más lenta que una caché de nivel 2 o 1, ya que si bien sigue siendo una memoria de una gran rapidez (muy superior a la RAM, y mucho más en la época en la que se utilizaba), depende de la comunicación entre el procesador y la placa base.
Para hacernos una idea más precisa de esto, imaginemos en un extremo el procesador y en el otro la memoria RAM. Pues bien, entre ambos se encuentra la memoria caché, más rápida cuanto más cerca se encuentre del núcleo del procesador (L1).
Las memorias caché son extremadamente rápidas (su velocidad es unas 5 veces superior a la de una RAM de las más rápidas), con la ventaja añadida de no tener latencia, por lo que su acceso no tiene ninguna demora... pero es un tipo de memoria muy cara.
Esto, unido a su integración en el procesador (ya sea directamente en el núcleo o no) limita bastante el tamaño, por un lado por lo que encarece al procesador y por otro por el espacio disponible.
En cuanto a la utilización de la caché L2 en procesadores multinucleares, existen dos tipos diferentes de tecnologías a aplicar.

Por un lado está la habitualmente utilizada por Intel, que consiste en que el total de la caché L2 está accesible para ambos núcleos y por otro está la utilizada por AMD, en la que cada núcleo tiene su propia caché L2 dedicada solo para ese núcleo.
La caché L2 apareció por primera vez en los Intel Pentium Pro, siendo incorporada a continuación por los Intel Pentium II, aunque en ese caso no en el encapsulado del procesador, sino externamente (aunque dentro del procesador).







Unidad de control.


La unidad de control (UC) es uno de los tres bloques funcionales principales en los que se divide una unidad central de procesamiento (CPU). Los otros dos bloques son la unidad de proceso y el bus de entrada/salida.
Su función es buscar las instrucciones en la memoria principal, decodificarlas (interpretación) y ejecutarlas, empleando para ello la unidad de proceso.
Las funciones realizadas por la unidad de control varían grandemente por la arquitectura interna del CPU, pues la unidad de control realmente implementa esta arquitectura. En un procesador regular que ejecuta las instrucciones x86 nativamente, la unidad de control realiza las tareas de leer (fetch), decodificar, manejo de la ejecución y almacenamiento de los resultados. En un procesador x86 con un núcleo RISC, la unidad de control tiene considerablemente más trabajo que hacer. Ella maneja la traducción de las instrucciones x86 a las microinstrucciones del RISC, maneja la planificación de las microinstrucciones entre las varias unidades de ejecución, y maneja la salida de estas unidades para cerciorarse de que terminen donde supuestamente deben ir. En uno de estos procesadores la unidad de control está dividida en otras unidades debido a la complejidad del trabajo que debe realizar (tales como una unidad de planificación para manejar la planificación y una unidad de retiro para ocuparse de los resultados que vienen de la tubería (pipe)). almacena los datos mas utilizados de modo que se buscan primero en la computadora y luego en la RAM. 

Componentes.

-Registro de instrucción: Es el encargado de almacenar la instrucción que se está ejecutando.


-Registro acumulador de programas: Contiene la dirección de memoria de la siguiente instrucción a ejecutar

-Controlador y decodificador: Se encarga de interpretar la instrucción para su posterior proceso. Es el encargado de extraer el código de operación de la instrucción en curso.

-Secuenciador: Genera microórdenes necesarias para ejecutar la instrucción.

-Reloj: Proporciona una sucesión de impulsos eléctricos a intervalos constantes.




Unidad aritmética lógica.

En computación, la unidad aritmético lógica, también conocida como ALU, es un circuito digital que calcula operaciones aritméticas (como suma, resta, multiplicación, etc.) y operaciones lógicas (si, y, o, no), entre dos números.
La ALU se compone básicamente de: Circuito Operacional, Registros de Entradas, Registro Acumulador y un Registros de Estados, conjunto de registros que hacen posible la realización de cada una de las operaciones.

La mayoría de las acciones de la computadora son realizadas por la ALU. La ALU toma datos de los registros del procesador. Estos datos son procesados y los resultados de esta operación se almacenan en los registros de salida de la ALU. Otros mecanismos mueven datos entre estos registros y la memoria.
Una unidad de control controla a la ALU, al ajustar los circuitos que le señala a la ALU qué operaciones realizar.





Operaciones simples.
La mayoría de las ALU pueden realizar las siguientes operaciones:

Operaciones aritméticas de números enteros (adición
, sustracción, y a veces multiplicación y división, aunque ésto es más complejo)

Operaciones lógicas de bits (AND, NOT, OR, XOR, XNOR)

Operaciones de desplazamiento de bits (Desplazan o rotan una palabra en un número específico de bits hacia la izquierda o la derecha, con o sin extensión de signo). Los desplazamientos pueden ser interpretados como multiplicaciones o divisiones por 2.



Operaciones complejas.
Un ingeniero puede diseñar una ALU para calcular cualquier operación, sin importar lo compleja que sea; el problema es que cuanto más compleja sea la operación, tanto más costosa será la ALU, más espacio usará en el procesador, y más energía disipará, etc.

Por lo tanto, los ingenieros siempre calculan un compromiso, para proporcionar al procesador (u otros circuitos) una ALU suficientemente potente para calcular rápido, pero no de una complejidad de tal calibre que haga una ALU económicamente prohibitiva. Imagina que necesitas calcular, digamos, la raíz cuadrada de un número; el ingeniero digital examinará las opciones siguientes para implementar esta operación:
Diseñar una ALU muy compleja que calcule la raíz cuadrada de cualquier número en un solo paso. Esto es llamado cálculo en un solo ciclo de reloj.
Diseñar una ALU compleja que calcule la raíz cuadrada con varios pasos (como el algoritmo que aprendimos en la escuela). Esto es llamado cálculo interactivo, y generalmente confía en el control de una unidad de control compleja con microcódigo incorporado.
Diseñar una ALU simple en el procesador, y vender un procesador separado, especializado y costoso, que el cliente pueda instalar adicional al procesador, y que implementa una de las opciones de arriba. Esto es llamado co-procesador o unidad de coma flotante.
Emular la existencia del coprocesador, es decir, siempre que un programa intente realizar el cálculo de la raíz cuadrada, hacer que el procesador compruebe si hay presente un coprocesador y usarlo si lo hay; si no hay uno, interrumpir el proceso del programa e invocar al sistema operativo para realizar el cálculo de la raíz cuadrada por medio de un cierto algoritmo de software. Esto es llamado emulación por software.
Decir a los programadores que no existe el coprocesador y no hay emulación, así que tendrán que escribir sus propios algoritmos para calcular raíces cuadradas por software. Esto es realizado por bibliotecas de software.




Entradas y salidas.
Las entradas a la ALU son los datos en los que se harán las operaciones (llamados operandos) y un código desde la unidad de control indicando qué operación realizar. Su salida es el resultado del cómputo de la operación.
En muchos diseños la ALU también toma o genera como entradas o salidas un conjunto de códigos de condición desde o hacia un registro de estado. Estos códigos son usados para indicar casos como acarreo entrante o saliente, overflow, división por cero, etc.




Unidad de coma flotante (FPU).

Una unidad de coma flotante o también conocido como co-procesador matemático, es un componente de la unidad central de procesamiento especializado en el cálculo de operaciones en coma flotante. Las operaciones básicas que toda FPU puede realizar son la suma y multiplicación usuales, si bien algunos sistemas más complejos son capaces también de realizar cálculos trigonométricos o exponenciales.

No todas las unidades centrales de procesamiento tienen una FPU dedicada. En ausencia de FPU, la CPU puede utilizar programas en microcódigo para emular una función en coma flotante a través de la unidad aritmético lógica (ALU), la cual reduce el coste del hardware a cambio de una sensible pérdida de velocidad.
En algunas arquitecturas, las operaciones en coma flotante se tratan de forma completamente distinta a las operaciones enteras, con registros dedicados y tiempo de ciclo diferentes. Incluso para operaciones complejas, como la división, podrían tener un circuito dedicado a dicha operación.
Hasta mediados de la década de 1990, era común que las CPU no incorporasen una FPU en los ordenadores domésticos, sino que eran un elemento opcional conocido como co-procesador.




Unidad de procesamiento gráfico (GPU).








La unidad de procesamiento gráfico o GPU es un co-procesador dedicado al procesamiento de gráficos u operaciones de coma flotante, para aligerar la carga de trabajo del procesador central en aplicaciones como los videojuegos y o aplicaciones 3D interactivas. De esta forma, mientras gran parte de lo relacionado con los gráficos se procesa en la GPU, la unidad central del procesamiento (CPU) puede dedicarse a otro tipo de cálculos (como la inteligencia artificial o los cálculos mecánicos en el caso de los video juegos). 






Funcionamiento del procesador. 


Desde el punto de vista lógico, singular y funcional, el microprocesador está compuesto básicamente por: varios registros, una unidad de control, una unidad aritmético lógica, y dependiendo del procesador, puede contener una unidad de coma flotante.

El microprocesador ejecuta instrucciones almacenadas como números binarios organizados secuencialmente en la memoria principal. La ejecución de las instrucciones se puede realizar en varias fases:

 -Prefetch, prelectura de la instrucción desde la memoria principal.

 -Fetch, envío de la instrucción al decodificador

 -Decodificación de la instrucción, es decir, determinar qué instrucción es y por tanto qué se debe   
  hacer. 
 -Lectura de operandos (si los hay).

 -Ejecución, lanzamiento de las máquinas de estado que llevan a cabo el procesamiento.

 -Escritura de los resultados en la memoria principal o en los registros.

Cada una de estas fases se realiza en uno o varios ciclos de CPU, dependiendo de la estructura del procesador, y concretamente de su grado de segmentación. La duración de estos ciclos viene determinada por la frecuencia de reloj, y nunca podrá ser inferior al tiempo requerido para realizar la tarea individual (realizada en un solo ciclo) de mayor coste temporal. El microprocesador se conecta a un circuito PLL, normalmente basado en un cristal de cuarzo capaz de generar pulsos a un ritmo constante, de modo que genera varios ciclos (o pulsos) en un segundo. Este reloj, en la actualidad, genera miles de megahercios.


Historia de los microprocesadores. 


La evolución del microprocesador.

El microprocesador es producto surgido de la evolución de distintas tecnologías predecesoras, básicamente, de la computación y de la tecnología de semiconductores. El inicio de esta última data de mitad de la década de 1950; estas tecnologías se fusionaron a principios de los años 70, produciendo el primer microprocesador. Dichas tecnologías iniciaron su desarrollo a partir de la segunda guerra mundial; en este tiempo los científicos desarrollaron computadoras específicas para aplicaciones militares. En la posguerra, a mediados de la década de 1940, la computación digital emprendió un fuerte crecimiento también para propósitos científicos y civiles. La tecnología electrónica avanzó y los científicos hicieron grandes progresos en el diseño de componentes de estado sólido(semiconductores). En 1948 en los laboratorios Bell crearon el transistor.

En los años 1950, aparecieron las primeras computadoras digitales de propósito general. Se fabricaron utilizando tubos al vacío o bulbos como componentes electrónicos activos. Módulos de tubos al vacío componían circuitos lógicos básicos, tales como compuertas y flip-flops. Ensamblandolos en módulos se construyó la computadora electrónica (la lógica de control, circuitos de memoria, etc.). Los tubos de vacío también formaron parte de la construcción de máquinas para la comunicación con las computadoras.

Para la construcción de un circuito sumador simple se requiere de algunas compuertas lógicas. La construcción de una computadora digital precisa numerosos circuitos o dispositivos electrónicos. Un paso trascendental en el diseño de la computadora fue hacer que el dato fuera almacenado en memoria. Y la idea de almacenar programas en memoria para luego ejecutarlo fue también de fundamental importancia.

La tecnología de los circuitos de estado sólido evolucionó en la década de 1950. El empleo del silicio, de bajo costo y con métodos de producción masiva, hicieron del transistor el componente más usado para el diseño de circuitos electrónicos. Por lo tanto el diseño de la computadora digital tuvo un gran avance con el reemplazo del tubo al vacío por el transistor, a finales de la década de 1950.

A principios de la década de 1960, el estado de arte en la construcción de computadoras de estado sólido sufrió un notable avance; surgieron las tecnologías en circuitos digitales como: RTL (Lógica Transistor Resistor), DTL (Lógica Transistor Diodo), TTL (Lógica Transistor Transistor), ECL (Lógica Complementada Emisor).

A mediados de los años 1960 se producen las familias de circuitos de lógica digital, dispositivos integrados en escala SSI y MSI que corresponden a baja y mediana escala de integración de componentes. A finales de los años 1960 y principios de los 70 surgieron los sistemas a alta escala de integración o LSI. La tecnología LSI fue haciendo posible incrementar la cantidad de componentes en los circuitos integrados. Sin embargo, pocos circuitos LSI fueron producidos, los dispositivos de memoria eran un buen ejemplo.

Las primeras calculadoras electrónicas requerían entre 75 y 100 circuitos integrados. Después se dio un paso importante en la reducción de la arquitectura de la computadora a un circuito integrado simple, resultando uno que fue llamado microprocesador, unión de las palabras «Micro» del griego μικρο-, «pequeño», y procesador. Sin embargo, es totalmente válido usar el término genérico procesador, dado que con el paso de los años, la escala de integración se ha visto reducida de micrométrica a nanométrica; y además, es, sin duda, un procesador.

-El primer microprocesador fue el Intel 4004 producido en 1971. Se desarrolló originalmente para una calculadora, y resultó revolucionario para su época. Contenía 2.300 transistores, era un microprocesador de arquitectura de 4 bits que podía realizar hasta 
60.000 operaciones por segundo, trabajando a una frecuencia de reloj de alrededor de 700 KHz.




   









-El primer microprocesador de 8 bits fue el Intel 8008, desarrollado a mediados de 1972 para su uso en terminales informáticos. El Intel 8008 integraba 3300 transistores y podía procesar a frecuencias máximas de 800Khz.

-El primer microprocesador realmente diseñado para uso general, desarrollado en 1974, fue el Intel 8080 de 8 bits, que contenía 4500 transistores y podía ejecutar 200.000 instrucciones por segundo trabajando a alrededor de 2 MHz.
-Los primeros microprocesadores de 16 bits fueron el 8086 y el 8088, ambos de Intel. Fueron el inicio y los primeros miembros de la popular arquitectura x86, actualmente usada en la mayoría de los computadores. El chip 8086 fue introducido al mercado en el verano de 1978, en tanto que el 8088 fue lanzado en 1979. Llegaron a operar a frecuencias mayores de 4Mhz.

-El microprocesador elegido para equipar al IBM Personal Computer/AT, que causó que fuera el más empleado en los PC-AT compatibles entre mediados y finales de los años 80 fue el Intel 80286 (también conocido simplemente como 286); es un microprocesador de 16 bits, de la familia x86, que fue lanzado al mercado en 1982. Contaba con 134.000 transistores. Las versiones finales alcanzaron velocidades de hasta 25 MHz.
 -Uno de los primeros procesadores de arquitectura de 32 bits fue el 80386 de Intel, fabricado a mediados y fines de la década de 1980; en   sus diferentes versiones llegó a trabajar a frecuencias del orden de los 40Mhz. 

-El microprocesador DEC Alpha se lanzó al mercado en 1992, corriendo a 200 MHz en su primera versión, en tanto que el Intel Pentium surgió en 1993 con una frecuencia de trabajo de 66Mhz. El procesador Alpha, de tecnología RISC y arquitectura de 64 bits, marcó un hito, declarándose como el más rápido del mundo, en su época. Llegó a 1Ghz de frecuencia hacia el año 2001. Irónicamente, a mediados del 2003, cuando se pensaba quitarlo de circulación, el Alpha aun encabezaba la lista de los microprocesadores más rápidos de Estados Unidos.



   




-Los microprocesadores modernos tienen una capacidad y velocidad mucho mayores, trabajan en arquitecturas de 64 bits, integran más de 700 millones de transistores, como es en el caso de las serie Core i7, y pueden operar a frecuencias normales algo superiores a los 3GHz (3000MHz). 

Hasta los primeros años de la década de 1970 los diferentes componentes electrónicos que formaban un procesador no podían ser un único circuito integrado, era necesario utilizar dos o tres "chips" para hacer una CPU (un era el "ALU" - Arithmetical Logic Unido, el otro la " control Unido", el otro el " Register Bank", etc ..). En 1971 la compañía Intel consiguió por primera vez poner todos los transistores que constituían un procesador sobre un único circuito integrado, el"4004 "', nacía el microprocesador.


Instrucciones y tecnologías de procesadores.


SSE.

SSE (Streaming SIMD Extensions) es una extensión al grupo de instrucciones MMX para procesadores Pentium III, introducida por Intel en febrero de 1999. Las instrucciones SSE son especialmente adecuadas para decodificación de MPEG2, que es el códec utilizado normalmente en los DVD, procesamiento de gráficos tridimensionales y software de reconocimiento de voz. Estas fueron inicialmente conocidas como "KNI" por Katmai New Instructions (Katmai fue el nombre código de la primera revisión del núcleo del Pentium III, Intel estaba interesada en distinguir su nueva línea de procesadores de la generación anterior, el Pentium II. En febrero de 2001, AMD agregó esta tecnología en su procesador Athlon XP.
Estas instrucciones operan con paquetes de operandos en coma flotante de precisión simple (FP).
Hay varios tipos de instrucciones SSEInstrucciones SSE de Transferencia de datos.Instrucciones SSE de Conversión.Instrucciones SSE Aritméticas.Instrucciones SSE lógicas.
Con la tecnología SSE, los microprocesadores x86 fueron dotados de setenta nuevas instrucciones y de ocho registros nuevos: del xmm0 al xmm7. Estos registros tienen una extensión de 128 bits (es decir que pueden almacenar hasta 16 bytes de información cada uno). A diferencia de su antecesor, MMX, la utilización de SSE no implicaba la inhabilitación de la unidad de coma flotante (FPU) por lo que no era necesario habilitarla nuevamente, lo que significaba para MMX una significativa pérdida de velocidad.

Versiones Posteriores;
SSE2, esta extensión fue introducida con el Pentium 4, y luego incorporada por AMD en los procesadores Opteron y Athlon 64, y es una gran mejora con respecto a la extensión original de SSE. SSE2 incorpora nuevas instrucciones matemáticas de coma flotante de doble precisión (64-bit) y de enteros de 8/16/32, las cuales trabajan con los mismos registros de la versión anterior. SSE2 permite trabajar con todos estos tipos de datos sin emplear las instrucciones de la FPU ni de la extensión MMX. En total, se agregaron 144 instrucciones, siendo ésta una de las mejoras más significativas de la tecnología SSE.

SSE3, esta extensión fue introducida con el núcleo del Pentium 4 5xx, llamado "Prescott", brindando nuevas instrucciones matemáticas y manejo de procesos (threads). En los procesadores AMD se incorporó en el núcleo llamado "Venice". SSSE3 (Supplemental SSE3), es una mejora menor de esta extensión. Fue presentada en los procesadores Intel Core 2 Duo y Xeon. Fueron agregadas 32 nuevas instrucciones con el fin de mejorar la velocidad de ejecución.


SSE4 es una mejora importante del conjunto de ins
trucciones SSE. Intel ha trabajado con fabricantes de aplicaciones y de sistemas operativos, con el fin de establecer esta extensión como un estándar en la industria del software. Fue presentada en 2007. Los procesadores Intel Core 2 Duo de 45nm ya disponen de éstas instrucciones.

   

 

3DNow!

3DNow! es el nombre que recibe una extensión multimedia diseñada por AMD para sus procesadores, introducida por AMD en febrero de 1998 con sus procesadores K6-2. En términos más técnicos, es un añadido de instrucciones SIMD al tradicional conjunto de instrucciones x86, para obtener más rendimiento en el procesamiento de vectores, es decir, operaciones que son realizadas sobre un vector de datos al mismo tiempo (y no sobre un único dato). Este tipo de operaciones son empleadas frecuentemente por muchas aplicaciones multimedia.
Fue desarrollado originalmente como una mejora del conjunto de instrucciones MMX de Intel, haciendo que pudiera manejar datos en coma flotante además de enteros. Posteriormente, Intel creó un conjunto de instrucciones (SSE) similares a las 3DNow! de AMD, el cual fue incluido por AMD en sus Athlon XP. SSE es incompatible con 3DNow!
La extensión 3DNow! consta de 21 instrucciones que soportan operaciones de punto flotante tipo SIMD e incluyen operaciones de enteros SIMD, la prerrecuperación de datos por hardware (conocida en inglés como prefetch) y cambio rápido MMX-punto flotante.
En agosto de 2010, AMD considera estas instrucciones, menos dos, como obsoletas.


 

MMX.

MMX es un Conjunto de instrucciones SIMD diseñado por Intel e introducido en 1997 en sus microprocesadores Pentium MMX. Fue desarrollado a partir de un set introducido en el Intel i860. Ha sido soportado por la mayoría de fabricantes de microprocesadores x86 desde entonces.
MMX agregó 8 nuevos registros a la arquitectura, conocidos como MM0 al MM7 (en adelante llamados MMn). En realidad, estos nuevos registros son meros alias de los registros de la pila de la FPU x87. Por ello cualquier cosa que se haga con la pila de la FPU afecta a los registros MMX. A diferencia de la pila de coma flotante, los registros MMn son fijos en vez de relativos, por lo que pueden accederse aleatoriamente.

Dado que los registros MMX son sólo alias de la pila FPU, y que cada uno de los registros de la pila tiene un ancho de 80 bits, los 16 bit superiores de los registros de pila no son utilizados por MMX, y esos bits se ponen todos a 1, aparecen como NaN o infinitos desde el punto de vista de la coma flotante. Esto hace más fácil decir si se está trabajando con datos en coma flotante o en MMX.
Otro problema para MMX es que sólo soporta operaciones con números enteros. Cada uno de los ocho registros de 64 bits del vector MMX, alias de los ocho registros existentes de coma flotante, pueden representar 2 números de 32 bits, cuatro de 16 u 8 de 8 bits. Durante el diseño original del i860, el uso de matemáticas de vector entero tenía sentido (las operaciones 2D y 3D requieren de ambas), pero cuando esta funcionalidad se pasa a las GPUs, MMX pierde interés y la coma flotante se vuelve mucho más importante. Por otra parte, sus nuevas operaciones aritméticas incluyen las operaciones aritméticas de saturación, lo que podría acelerar perceptiblemente el procesamiento digital de señales. Por ello mejora el rendimiento de la multimedia.
Intel solucionó esos problemas más adelante con SSE, un conjunto de instrucciones SIMD más ampliado con soporte de coma flotante de 32 bits y un sistema adicional de vectores de registros de 128 bits que hacen más sencillo usar SIMD y FPU al mismo tiempo. SSE es a su vez ampliado por SSE2, que también extiende las instrucciones MMX que pueden operar con registros XMM de 128 bits y recientemente con SSE3, introducido con la Intel Core Microarchitecture. Incluir cualquiera de estos conjuntos implica incluir MMX.
Intel y su mayor competidor AMD llegaron a un acuerdo de compatibilidad por el que éste último sacó al mercado microprocesadores con el juego de instrucciones MMX, los procesadores AMD K6.

 

x86-64.


x86-64 es una arquitectura basada en la extensión del conjunto de instrucciones x86 para manejar direcciones de 64 bits. Además de una simple extensión contempla mejoras adicionales como duplicar el número y el tamaño de los registros de uso general y de instrucciones SSE.
Se trata de una arquitectura desarrollada por AMD e implementada bajo el nombre de AMD64. El primer procesador (para computadoras personales) con soporte para este conjunto de instrucciones fue el Opteron, lanzado en abril de 2003. Posteriormente ha sido implementado en múltiples variantes delAthlon 64 y posteriores; y del Pentium 4 y posteriores de Intel, en éste último caso bajo una versión de Intel llamada Intel 64 (antes EM64T).

El conjunto de instrucciones del AMD x86-64 (renombrado posteriormente como AMD64) es una extensión directa de la arquitectura del x86 a una arquitectura de 64 bits, motivado por el hecho de que los 4GB de memoria que son direccionables directamente por una CPU de 32 bits ya no es suficiente para todas las aplicaciones. Algunos de los cambios:Nuevos registros. El número de registros de propósito general se ha incrementado de 8 en los procesadores x86-32 a 16, y el tamaño de todos estos registros se ha incrementado de 32 bits a 64 bits. Adicionalmente, el número de registros MMX de 128 bits (usados para las instrucciones extendidas SIMD) se ha incrementado de 8 a 16. Los registros adicionales incrementan el rendimiento.Registros XMM (SSE) adicionales: Igualmente el número de registros de 128 bits (usados para las instrucciones SSE) han aumentado de 8 a 16.Espacio de direcciones mayor. Debido a la arquitectura de 64 bits, la arquitectura AMD64 puede direccionar hasta 16 hexabytes de memoria. Las implementaciones futuras de la arquitectura del AMD64 puede proporcionar hasta 2 hexabytes de memoria disponible. Si la paginación de memoria se utiliza correctamente, los sistemas operativos de 32 bits podrían tener acceso a algunas de las extensiones de dirección físicas sin tener que realizar la ejecución en modo largo (long).Instrucción de acceso a datos relativa al puntero: Las instrucciones ahora pueden hacer referencias relativas al puntero de instrucciones (registro RIP). Esto permite crear código independiente de la posición que permite un código mucho más eficiente en bibliotecas dinámicas y código cargado en tiempo de ejecución.Llamadas al sistema más rápidas. Debido a que la segmentación no está soportada en el modo de 64 bits, las llamadas al sistema no tienen las latencias asociadas con almacenar y recuperar la información de segmentación ni tienen que realizar las comprobaciones necesarias de protección a nivel de segmentación. Por lo tanto, AMD ha introducido una nueva interfaz de llamadas al sistema, al que se accede utilizando solamente la instrucción "SYSCALL". Aunque los sistemas operativos todavía pueden utilizar el sistema de interrupciones para las llamadas al sistema, en el modo de 64 bits utilizar "SYSCALL" es más rápido.Instrucciones SSE. La arquitectura AMD 64 incluye las extensiones de Intel SSE y SSE2, las últimas cpus incluyen SSE3 también. También están soportadas las instrucciones del x86 y MMX.






AMD Fusion.
AMD Fusion es el nombre comercial, para una serie de Unidades de Procesamiento Acelerado (APUs), que están siendo desarrolladas desde 2006. El diseño final es una fusión entre AMD y ATI, combinando poder de procesamiento, Northbridge, aceleración 3D y otras funciones de GPUs actuales en un mismo encapsulado. Esta tecnología fue mostrada al gran público en enero de 2011 en el CES.



Bit NX.


Bit NX. El bit NX es una característica del procesador que permite al sistema operativo prohibir la ejecución del código en área de datos, mejorando la seguridad. Esta características está disponible en los modos de 32 y 64 bits, y está soportada por Linux, Solaris, Windows XP SP2, Windows Server 2003 SP1.

El bit NX se refiere específicamente al bit número 63 (al último bit, si el primer bit empieza en el 0, en enteros de 64 bits) en la entrada de la tabla de páginas de un procesador x86. Si este bit está marcado a 0, entonces el código puede ser ejecutado desde esa página; si está marcado a 1, el código no puede ser ejecutado desde esa página, y todo lo que ahí resida será considerado como datos. Hay que tener en cuenta que estas páginas tienen que cumplir el formato de tabla de páginas PAE (extensión de dirección física), en lugar del formato de tabla de páginas original del x86. Esta característica primero fue implementada en los procesadores AMD64, ya que la arquitectura AMD64 es una extensión directa de la arquitectura x86, pero esta característica no requiere que el procesador funcione en modo 64 bits - también funcionará en modo 32 bits. Como funciona en modo 32 bits, otros fabricantes de x86, como VIA Technologies, Transmeta, y por supuesto Intel están portando esta función a sus últimas implementaciones de x86.
Intel ha decidido llamarlo XD bit, que significa Execute Disable (Deshabilitar ejecución). Sin embargo, está implementado exactamente de la misma manera que el bit NX de AMD, así que realmente es lo mismo.



HyperThreading.

HyperThreading (también conocido como HT Technology) es una marca registrada de la empresa Intel para denominar su implementación de la tecnología Multithreading Simultáneo también conocido como SMT. Permite a los programas preparados para ejecutar múltiples hilos (multi-threaded) procesarlos en paralelo dentro de un único procesador, incrementando el uso de las unidades de ejecución del procesador.


Esta tecnología consiste en simular dos procesadores lógicos dentro de un único procesador físico. El resultado es una mejoría en el rendimiento del procesador, puesto que al simular dos procesadores se pueden aprovechar mejor las unidades de cálculo manteniéndolas ocupadas durante un porcentaje mayor de tiempo. Esto conlleva una mejora en la velocidad de las aplicaciones que según Intel es aproximadamente de un 30%.