b'\n_START_ARTICLE_\nInstrucciones por ciclo\n_START_PARAGRAPH_\nLas instrucciones por ciclo o IPC (en ingl\xc3\xa9s instructions per cycle) indica la cantidad de instrucciones que un procesador ejecuta en un ciclo de reloj. En otras palabras, es un indicador m\xc3\xa1s de rendimiento de un microprocesador. Otros factores de rendimiento son la frecuencia de reloj del microprocesador y la cantidad de instrucciones del programa. Por tanto tenemos que el rendimiento final de un microprocesador depende de tres factores: microarquitectura (IPC), tecnolog\xc3\xada (frecuencia de reloj) y compilador (instrucciones).\n_START_SECTION_\nDescripci\xc3\xb3n\n_START_PARAGRAPH_\nLas instrucciones de un procesador se suelen ejecutar dividas en varias etapas o fases. Cuando se tienen varias instrucciones en ejecuci\xc3\xb3n, una en cada etapa, en condiciones ideales se da el resultado aparente de obtener una instrucci\xc3\xb3n por ciclo de reloj (IPC = 1), puesto que cuando una instrucci\xc3\xb3n acaba su \xc3\xbaltima fase, la instrucci\xc3\xb3n siguiente entra en su \xc3\xbaltima fase de manera que al siguiente ciclo acaba tambi\xc3\xa9n, como si se tratara de la cadena de montaje de un coche._NEWLINE_El IPC normalmente trata de un valor medio, ya que la cantidad de instrucciones ejecutadas en un ciclo de reloj en la mayor\xc3\xada de microarquitectura de procesadores var\xc3\xada en funci\xc3\xb3n del programa ejecutado en el procesador. Sumas de n\xc3\xbameros enteros, por ejemplo, pueden ejecutarse m\xc3\xa1s r\xc3\xa1pidamente que sumas con n\xc3\xbameros reales._NEWLINE_Existen programas que realizan pruebas de rendimiento que, debido a la naturaleza del IPC y su valor en funci\xc3\xb3n del programa ejecutado, es importante seleccionar los adecuados para tener una buena indicaci\xc3\xb3n del IPC de un procesador. Con ellos el IPC medio es m\xc3\xa1s significativo y aproxima mejor el rendimiento en los entornos habituales de producci\xc3\xb3n previstos. Por ello las pruebas deben ser representativas de los programas que se van a ejecutar habitualmente con la microarquitectura del procesador medido. Por ejemplo, al dise\xc3\xb1ar un procesador multin\xc3\xbacleo los programas para medir su rendimiento no pueden consistir \xc3\xbanicamente en programas con un solo hilo de ejecuci\xc3\xb3n._NEWLINE_A la hora de medir el rendimiento de un procesador se calcula el tiempo que tarda en ejecutar un programa. Este tiempo se obtiene con base en la f\xc3\xb3rmula siguiente:_NEWLINE_Si reordenamos las variables:_NEWLINE_Donde N es el n\xc3\xbamero de instrucciones \xe2\x80\x94en c\xc3\xb3digo ensamblador compatible con el procesador\xe2\x80\x94 del programa (y sus algoritmos) y f es la frecuencia del procesador.  es el rec\xc3\xadproco del CPI o ciclos por instrucci\xc3\xb3n, usado tambi\xc3\xa9n en la bibliograf\xc3\xada especializada._NEWLINE_La N o n\xc3\xbamero de instrucciones es un valor que depende del compilador empleado, puesto que el c\xc3\xb3digo fuente de los lenguajes de niveles superiores al del c\xc3\xb3digo m\xc3\xa1quina es transformado en \xc3\xa9ste mediante un compilador. En el caso de no usar un compilador, el valor de N depender\xc3\xa1 de la pericia que tenga el programador en usar las instrucciones que ofrece la microarquitectura del procesador. Esto hace dif\xc3\xadcil la comparaci\xc3\xb3n directa entre dos modelos de procesador distintos, puesto que sin tener el c\xc3\xb3digo fuente disponible no es posible disponer de un programa en c\xc3\xb3digo m\xc3\xa1quina imparcial. El c\xc3\xb3digo fuente puede ser el escrito por un humano, ya sea en ensamblador o en un lenguaje de mayor nivel, o una representaci\xc3\xb3n intermedia (bytecode) como la usada por LLVM o Vulkan (SPIR-V\xe2\x80\x8b)._NEWLINE_Adem\xc3\xa1s, a\xc3\xban disponiendo del c\xc3\xb3digo fuente del programa, el compilador puede ser tambi\xc3\xa9n parcial, como ya ocurriera antiguamente con el compilador de Intel. El compilador de Intel generaba binarios con unas instrucciones y planificaci\xc3\xb3n de las mismas que resultaban en un pobre rendimiento usando los procesadores de AMD y VIA Technologies para el mismo algoritmo.\xe2\x80\x8b Por tanto tambi\xc3\xa9n es recomendable disponer del c\xc3\xb3digo fuente del compilador para poder comprobar que genera el mejor c\xc3\xb3digo posible para cada una de las microarquitecturas de las que obtener medidas de rendimiento. Enti\xc3\xa9ndase como mejor c\xc3\xb3digo posible la generaci\xc3\xb3n de un c\xc3\xb3digo m\xc3\xa1quina con instrucciones siguiendo una secuencia que no haga perder ciclos al procesador in\xc3\xbatilmente cuando con otro orden de ejecuci\xc3\xb3n u otras instrucciones ofrecidas por su microarquitectura desperdiciar\xc3\xada menos ciclos, obteniendo un IPC m\xc3\xa1s elevado._NEWLINE_Dise\xc3\xb1ar una microarquitectura para obtener un IPC elevado no es sencillo, y si los programas a ejecutar (incluidas las pruebas de rendimiento) no disponen de c\xc3\xb3digo fuente y/o han sido programados para unas determinadas caracter\xc3\xadsticas de microarquitectura, las opciones de los arquitectos de computadores pueden verse seriamente limitadas. \xc3\x89stos han de dise\xc3\xb1ar una microarquitectura para c\xc3\xb3digo m\xc3\xa1quina pensado para microarquitecturas de otros fabricantes. A su vez disminuye la innovaci\xc3\xb3n, puesto que todos los dise\xc3\xb1os de procesador tienden al mismo esquema con m\xc3\xadnimas variaciones. Esto favorece al dise\xc3\xb1o del fabricante con mayor cuota de mercado, que siempre contar\xc3\xa1 con la ventaja competitiva de ser el est\xc3\xa1ndar de facto para el que todos los programadores crean y prueban sus programas._NEWLINE_Los desarrolladores de software tienen por tanto influencia en el IPC de una microarquitectura, puesto que el compilador que usen y el c\xc3\xb3digo que escriban puede favorecer a unos procesadores sobre otros. Bibliotecas de funciones y de tiempo de ejecuci\xc3\xb3n sirven para abstraerse de dichos detalles del hardware obteniendo un programa m\xc3\xa1s neutral, relegando a dichas bibliotecas la optimizaci\xc3\xb3n para cada una de las arquitecturas en las que se vaya a ejecutar el programa. Los compiladores incluyen bibliotecas de este tipo como pueden ser las funciones intr\xc3\xadnsecas, OpenMP, OpenACC, OpenCL y CUDA. A su vez, con estas bibliotecas se crean abstracciones optimizadas para cada variante de arquitectura, para distintas generaciones de GPUs y CPUs. Bibliotecas de \xc3\xa1lgebra como GSL,_NEWLINE_\xe2\x80\x8b CuBLAS_NEWLINE_,\xe2\x80\x8b clFFT y clBLAS,_NEWLINE_\xe2\x80\x8b _NEWLINE_\xe2\x80\x8b ATLAS_NEWLINE_,\xe2\x80\x8b LAPACK\xe2\x80\x8b y MAGMA\xe2\x80\x8b_NEWLINE_son algunos ejemplos de abstracciones con optimizaciones por microarquitectura que utilizan las bibliotecas que incluyen los compiladores. En el campo de los videojuegos la abstracci\xc3\xb3n se corresponder\xc3\xada con el motor gr\xc3\xa1fico, que a su vez utiliza bibliotecas como OpenGL, Vulkan o Direct3D distribuidas con el controlador de dispositivo del dispositivo gr\xc3\xa1fico, el cual incluye el compilador para generar el binario compatible con la GPU a partir del c\xc3\xb3digo shader del programador. La biblioteca de tiempo de ejecuci\xc3\xb3n Java distribuida con Android (Dalvik o ART, seg\xc3\xban la versi\xc3\xb3n de Android) abstrae las caracter\xc3\xadsticas del hardware y tambi\xc3\xa9n del sistema operativo del dispositivo sobre el que se ejecuta la aplicaci\xc3\xb3n, lo que permite ejecutar las aplicaciones no s\xc3\xb3lo en dispositivos diferentes sino tambi\xc3\xa9n en sistemas operativos diferentes.'