La descarga de cómputo es la transferencia de tareas computacionales que consumen muchos recursos a un procesador independiente, como un acelerador de hardware , o una plataforma externa, como un clúster , una red o una nube . La descarga a un coprocesador se puede utilizar para acelerar aplicaciones que incluyen: renderización de imágenes y cálculos matemáticos. La descarga de cómputo a una plataforma externa a través de una red puede proporcionar potencia de cómputo y superar las limitaciones de hardware de un dispositivo, como potencia de cómputo, almacenamiento y energía limitados.
Los primeros conceptos de las computadoras con programa almacenado se desarrollaron en el diseño de la ENIAC , la primera computadora digital de propósito general. La ENIAC estaba limitada en su rendimiento a tareas individuales, lo que llevó al desarrollo de la EDVAC , que se convertiría en la primera computadora diseñada para ejecutar instrucciones de varios tipos. El desarrollo de tecnologías informáticas facilitó el aumento del rendimiento de las computadoras y, posteriormente, dio lugar a una variedad de configuraciones y arquitecturas.
Los primeros casos de descarga de cálculo fueron el uso de subprocesadores simples para manejar el procesamiento de entrada/salida a través de un sistema separado llamado E/S de canal . Este concepto mejoró el rendimiento general del sistema, ya que el mainframe solo necesitaba establecer parámetros para las operaciones, mientras que los procesadores de canal realizaban el formateo y el procesamiento de E/S. Durante la década de 1970, se comenzaron a utilizar coprocesadores para acelerar la aritmética de punto flotante más rápido que los procesadores anteriores de 8 y 16 bits que usaban software. Como resultado, los coprocesadores matemáticos se volvieron comunes para los cálculos científicos y de ingeniería. Otra forma de coprocesador fue el coprocesador gráfico. A medida que el procesamiento de imágenes se hizo más popular, se comenzaron a utilizar chips gráficos especializados para descargar la creación de imágenes de la CPU. Los coprocesadores eran comunes en la mayoría de las computadoras, sin embargo, disminuyeron en uso debido al desarrollo de tecnologías de microprocesadores que integraban muchas funciones de coprocesador. Sin embargo, las unidades de procesamiento gráfico dedicadas todavía se usan ampliamente por su efectividad en muchas tareas, incluidas; procesamiento de imágenes, aprendizaje automático, computación paralela, visión artificial y simulación física.
El concepto de compartir el tiempo, es decir, compartir los recursos informáticos, fue implementado por primera vez por John McCarthy . En ese momento, la computación mainframe no era práctica debido a los costos asociados con la compra y el mantenimiento de computadoras mainframe. El tiempo compartido era una solución viable para este problema, ya que el tiempo de computación podía estar disponible para empresas más pequeñas. En la década de 1990, las empresas de telecomunicaciones comenzaron a ofrecer servicios de red privada virtual (VPN) . Esto permitió a las empresas equilibrar el tráfico en los servidores, lo que resultó en un uso efectivo del ancho de banda. El símbolo de la nube se convirtió en sinónimo de la interacción entre proveedores y usuarios. Esta computación se extendió más allá de los servidores de red y permitió que la potencia informática estuviera disponible para los usuarios a través del tiempo compartido. La disponibilidad de computadoras virtuales permitió a los usuarios descargar tareas de un procesador local. [1]
En 1997, distributed.net buscó obtener computación voluntaria para resolver tareas de computación intensiva utilizando el rendimiento de las computadoras en red. Este concepto, conocido como computación en red, se asoció con los sistemas de computación en la nube.
El primer concepto de vincular grandes mainframes para proporcionar una forma eficaz de paralelismo fue desarrollado en la década de 1960 por IBM . La computación en clúster fue utilizada por IBM para aumentar el rendimiento del hardware, el sistema operativo y el software, al tiempo que permitía a los usuarios ejecutar aplicaciones existentes. Este concepto ganó impulso durante la década de 1980, cuando surgieron los microprocesadores de alto rendimiento y las redes de alta velocidad, herramientas para la computación distribuida de alto rendimiento. Los clústeres podían dividir y descargar de manera eficiente la computación en nodos individuales para aumentar el rendimiento y, al mismo tiempo, ganar escalabilidad . [2]
Las tareas computacionales son manejadas por un procesador central que ejecuta instrucciones mediante la realización de operaciones aritméticas rudimentarias , lógica de control y de entrada/salida. La eficiencia de las tareas computacionales depende de las instrucciones por segundo que una CPU puede realizar, que varían según los diferentes tipos de procesadores. [3] Ciertos procesos de aplicación pueden acelerarse descargando tareas del procesador principal a un coprocesador , mientras que otros procesos pueden requerir una plataforma de procesamiento externa.
El hardware ofrece un mayor rendimiento posible para ciertas tareas en comparación con el software. El uso de hardware especializado puede realizar funciones más rápido que el software procesado en una CPU. El hardware tiene la ventaja de la personalización, lo que permite utilizar tecnologías dedicadas para funciones distintas. Por ejemplo, una unidad de procesamiento gráfico (GPU) , que consta de numerosos núcleos de bajo rendimiento, es más eficiente en el cálculo gráfico que una CPU que cuenta con menos núcleos de alta potencia. [4] Sin embargo, los aceleradores de hardware son menos versátiles en comparación con una CPU.
La computación en la nube se refiere tanto a las aplicaciones transportadas a través de Internet como al hardware y software en los centros de datos que brindan servicios, que incluyen el almacenamiento de datos y la computación. [5] Esta forma de computación depende del acceso a Internet de alta velocidad y de la inversión en infraestructura. [6] A través del acceso a la red, una computadora puede migrar parte de su computación a la nube. Este proceso implica enviar datos a una red de centros de datos que tienen acceso a la potencia de computación necesaria para el cálculo.
La computación en clúster es un tipo de sistema de procesamiento paralelo que combina computadoras independientes interconectadas para funcionar como un único recurso informático. [7] Los clústeres emplean un modelo de programación paralela que requiere tecnologías de interconexión rápidas para soportar un alto ancho de banda y baja latencia para la comunicación entre nodos. [2] En un modelo de memoria compartida, los procesos paralelos tienen acceso a toda la memoria como un espacio de direcciones global. Múltiples procesadores tienen la capacidad de operar independientemente pero comparten la misma memoria, por lo tanto, los cambios en la memoria de un procesador se reflejan en todos los demás procesadores. [7]
La computación en red es un grupo de computadoras en red que trabajan juntas como una supercomputadora virtual para realizar tareas computacionales intensivas, como analizar grandes conjuntos de datos. A través de la nube, es posible crear y utilizar redes de computadoras para propósitos y períodos específicos. Dividir las tareas computacionales en varias máquinas reduce significativamente el tiempo de procesamiento para aumentar la eficiencia y minimizar el desperdicio de recursos. A diferencia de la computación paralela, las tareas de computación en red generalmente no tienen una dependencia temporal asociada con ellas, sino que usan computadoras que son parte de la red solo cuando están inactivas, y los usuarios pueden realizar tareas no relacionadas con la red en cualquier momento. [8]
Existen varias ventajas en delegar el cálculo a un procesador externo:
Existen varias limitaciones a la hora de descargar el cálculo a un procesador externo:
Los servicios en la nube se pueden describir mediante tres modelos principales de servicios en la nube: SaaS , PaaS e IaaS . El software como servicio (SaaS) es un servicio alojado externamente al que un consumidor puede acceder fácilmente a través de un navegador web. La plataforma como servicio (PaaS) es un entorno de desarrollo donde se puede crear, probar e implementar software sin que el usuario tenga que centrarse en crear y mantener la infraestructura computacional. La infraestructura como servicio (IaaS) es el acceso a los recursos de una infraestructura, la tecnología de red y el cumplimiento de la seguridad que las empresas pueden utilizar para crear software. Los servicios de computación en la nube brindan a los usuarios acceso a grandes cantidades de potencia computacional y almacenamiento que no son viables en computadoras locales sin tener que hacer un gasto significativo. [6]
Los dispositivos móviles, como los teléfonos inteligentes y los dispositivos portátiles, tienen limitaciones en términos de potencia computacional, almacenamiento y energía. A pesar del desarrollo constante de componentes clave, como CPU, GPU, memoria y tecnologías de acceso inalámbrico, los dispositivos móviles deben ser portátiles y energéticamente eficientes. La computación en la nube móvil es la combinación de computación en la nube y computación móvil, en la que los dispositivos móviles realizan una descarga computacional para equilibrar la potencia de la nube para acelerar la ejecución de aplicaciones y ahorrar consumo de energía. En esta descarga computacional, un dispositivo móvil migra parte de su computación a la nube. Este proceso implica la partición de aplicaciones, la toma de decisiones sobre la descarga y la ejecución distribuida de tareas. [11] [12]
Los videojuegos son juegos electrónicos que implican una entrada, una interacción con una interfaz de usuario y generan una salida, generalmente una retroalimentación visual en un dispositivo de visualización de video. Estas operaciones de entrada/salida dependen de una computadora y sus componentes, incluida la CPU, la GPU, la RAM y el almacenamiento. Los archivos del juego se almacenan en una forma de memoria secundaria que luego se carga en la memoria principal cuando se ejecuta. La CPU es responsable de procesar la entrada del usuario y pasar información a la GPU. La GPU no tiene acceso a la memoria principal de una computadora, por lo que, en su lugar, los recursos gráficos deben cargarse en la VRAM , que es la memoria de la GPU. La CPU es responsable de dar instrucciones a la GPU mientras que la GPU usa la información para renderizar una imagen en un dispositivo de salida. Las CPU pueden ejecutar juegos sin una GPU a través de la renderización de software; sin embargo, la descarga de la renderización a una GPU que tiene hardware especializado da como resultado un rendimiento mejorado. [13]