Optimizacion De Recursos Empleados En La Informatica

Optimizacion De Recursos Empleados En La Informatica

En ciencias de la computación, programa de optimización o software de optimización es el proceso de modificación de un sistema de software para hacer algún aspecto de que funcione con mayor de manera eficiente o utilizar menos recursos.[1] En general, un programa de ordenador se puede optimizar para que se ejecute más rápidamente, o es capaz de operar con menos memoria de almacenamiento u otros recursos, o consumen menos energía.

Contenido [ocultar]

    * 1 General
          o 1.1 “Niveles” de la optimización
          o 1.2 Plataforma dependientes e independientes optimizaciones
    * 2 Diferentes algoritmos
    * 3 Ventajas y desventajas
    * 4 Cuellos de botella
    * 5 Cuando para optimizar
    * 6 Macros
    * 7 Automatizado y manual de optimización
    * 8 Tiempo necesario para la optimización
    * 9 Cotizaciones
    * 10 Véase también
    * 11 Referencias
    * 12 Enlaces externos

General

Aunque la palabra “optimización” comparte la misma raíz que “óptima”, es raro que el proceso de optimización para producir un sistema verdaderamente óptima. El sistema optimizado normalmente sólo será óptima en una solicitud o para una audiencia. Se podría reducir la cantidad de tiempo que un programa se necesita para realizar alguna tarea en el precio de lo que consumen más memoria. En una aplicación donde el espacio de memoria es un lujo, una puede elegir deliberadamente un ritmo más lento algoritmo a fin de utilizar menos memoria. A menudo no existe una “talla única” de diseño que funciona bien en todos los casos, por lo que ingenieros hacer ventajas y desventajas para optimizar las características de mayor interés. Además, el esfuerzo requerido para hacer una pieza de software totalmente óptimo-incapaz de cualquier mejora es más, casi siempre más de lo razonable de los beneficios que se devengan; por lo que el proceso de optimización puede ser detenido antes de una solución completamente óptimo ha sido alcanzado. Afortunadamente, a menudo es el caso de que las mejoras más llegar temprano en el proceso. “Niveles” de la optimización

La optimización puede ocurrir en una serie de “niveles”:

    * Diseño de los niveles

Al más alto nivel, el diseño puede ser optimizado para aprovechar al máximo los recursos disponibles. La aplicación de este diseño se beneficiarán de una buena selección de algoritmos eficientes y la aplicación de estos algoritmos se beneficiarán de la escritura de código de buena calidad. El diseño arquitectónico de un sistema mayoritariamente afecta a su rendimiento. La elección de los algoritmo afecta a la eficacia más que cualquier otro elemento del diseño y, dado que la elección del algoritmo generalmente es la primera cosa que debe ser decidido, argumentos en contra de “optimización prematura” antes o puede ser difícil de justificar.

En algunos casos, sin embargo, la optimización se basa en el uso de algoritmos más elaborados, haciendo uso de “casos especiales” y especial “trucos” y la realización de compromisos complejos comerciales. programa totalmente optimizado ‘A podría ser más difícil de comprender y, por tanto puede contener más fallas de versiones no optimizadas.

    * Nivel de código fuente

Evitar la mala calidad de codificación también puede mejorar el rendimiento, evitando obvios “desaceleración”. Después de eso, sin embargo, algunas optimizaciones es posible que en realidad disminuir el mantenimiento. Algunos, pero no todas, las optimizaciones en la actualidad se puede realizar por la optimización de los compiladores.

    * Compilar nivel

El uso de un optimización del compilador tiende a garantizar que el programa ejecutable se ha optimizado al menos tanto como el compilador puede predecir.

    * Asamblea nivel

En el nivel inferior, la escritura de código mediante un en lenguaje ensamblador, Diseñado para un determinado de hardware plataforma puede producir el código más eficiente y compacto si el programador se aprovecha de todo el repertorio de instrucciones de la máquina. Muchos sistemas operativos utilizados en sistemas embebidos tradicionalmente se han escrito en código ensamblador por esta razón, cuando la eficiencia y el tamaño son una gran parte menos importante puede ser escrito en un lenguaje de alto nivel.

Con más moderna la optimización de los compiladores y la mayor complejidad de los últimos CPU, Es más difícil de escribir código que se optimiza mejor que el compilador se genera, y algunos proyectos necesidad de recurrir a esta medida “extrema” de optimización.

Sin embargo, una gran cantidad de código escrito hoy en día sigue siendo compilado con la intención de ejecutar en el mayor porcentaje de máquinas posible. Como consecuencia, los programadores y compiladores no siempre se aprovechan de las instrucciones más eficiente siempre por nuevas CPUs o peculiaridades de los modelos más antiguos. Además, el código ensamblador en sintonía para un procesador determinado sin necesidad de utilizar estas instrucciones todavía puede ser subóptima en un procesador diferente, esperando un ajuste diferente del código.

    * Tiempo de ejecución

Just-in-time compiladores y programadores de ensamblador puede ser capaz de realizar tiempo de ejecución superior a la optimización de la capacidad de los compiladores estática, ajustando dinámicamente los parámetros de acuerdo a la entrada actual o de otros factores. Plataforma dependientes e independientes optimizaciones

La optimización del código puede ser también una categoría de plataforma-Dependientes y técnicas independientes de la plataforma. Mientras que estas últimas son eficaces en las plataformas de la mayoría o todas, las técnicas dependientes de la plataforma de usar propiedades específicas de una plataforma, o dependen de los parámetros en función de la plataforma única o incluso en el procesador. Escribir o producir diferentes versiones del mismo código para los procesadores diferentes por lo tanto podrían ser necesarias. Por ejemplo, en el caso de la optimización del nivel de compilación, técnicas independientes de la plataforma son técnicas genéricas (tales como el despliegue de bucles, la reducción en las llamadas a funciones, rutinas eficiente de la memoria, la reducción en las condiciones, etc), que más impacto arquitecturas de CPU en una situación similar manera. En general, estos sirven para reducir el total de Instrucción longitud del camino necesarios para completar el programa y / o reducir el uso total de memoria durante el proceso. Por otro lado, las técnicas dependientes de la plataforma implica planificación de instrucciones, paralelismo a nivel de instrucción, el paralelismo a nivel de datos, técnicas de optimización de memoria caché (es decir, parámetros que difieren entre las distintas plataformas ) y la óptima planificación de instrucciones pueden ser diferentes incluso en diferentes procesadores de la misma arquitectura. Diferentes algoritmos

tareas de cómputo se puede realizar de diferentes maneras con diferentes eficiencia. Por ejemplo, considere lo siguiente C fragmento de código cuya intención es obtener la suma de todos los números enteros de 1 a N:

int i, suma = 0; de (i = 1; i <= N; i++)

  suma += i;

printf (“Suma:% d\ N”, suma);

Este código puede (suponiendo que no desbordamiento aritmético) Volver a escribir utilizando una fórmula matemática como:

int suma = (N * (N+1)) / 2; printf (“Suma:% d\ N”, suma);

La optimización, a veces se realiza de forma automática por un compilador de optimización, es seleccionar un método (algoritmo) Que es más de cómputo eficiente, manteniendo la misma funcionalidad. Ver Algorítmica eficiencia para una discusión de algunas de estas técnicas. Sin embargo, una mejora significativa en el rendimiento a menudo se puede lograr mediante la eliminación de funciones extrañas.

La optimización no es siempre un proceso obvio ni evidente. En el ejemplo anterior, el “optimizado” versión en realidad podría ser más lento que la versión original si N son lo suficientemente pequeños y el hardware en particular pasa a ser mucho más rápido en otra parte del espectáculo y bucle operaciones de multiplicación y desplazamiento de bits. Ventajas y desventajas

Optimización general se centrará en la mejora de uno o dos aspectos de rendimiento: tiempo de ejecución, uso de memoria, espacio en disco, ancho de banda, el consumo de energía o algún otro recurso. Para ello se requiere un trade-off - donde uno de los factores se optimiza a expensas de los demás. Por ejemplo, el aumento del tamaño de caché mejora el rendimiento en tiempo de ejecución, sino que también aumenta el consumo de memoria. Otras ventajas y desventajas comunes incluyen la claridad del código y la concisión.

Hay casos en que el programador de realizar la optimización de tomar la decisión de hacer el software más óptima para algunas operaciones, pero a costa de hacer otras operaciones menos eficientes. Estas compensaciones a veces puede ser de carácter no técnico - por ejemplo, cuando un competidor ha publicado un punto de referencia resultado que debe ser golpeada con el fin de mejorar el éxito comercial, sino que viene tal vez con la carga de hacer uso normal de los programas menos eficientes. Estos cambios son a veces en broma a que se refiere como pessimizations. Cuellos de botella

Optimización puede incluir la búsqueda de una embotellamiento, Una parte crítica del código que es el principal consumidor de los recursos necesarios - a veces conocido como un punto caliente. A menudo, el principio de Pareto se aplica. es decir, el 20% del código es responsable del 80% de los resultados.[cita requerida]

En informática, el Principio de Pareto puede ser aplicada a la optimización de recursos mediante la observación de que el 80% de los recursos se utilizan normalmente en un 20% de las operaciones. En la ingeniería de software, a menudo es una mejor aproximación que el 90% del tiempo de ejecución de un programa de ordenador es empleado en la ejecución del 10% del código (conocido como el la ley 90/10 en este contexto).

algoritmos más complejos y estructuras de datos funcionan bien con muchos elementos, mientras que los algoritmos sencillos son más adecuados para pequeñas cantidades de datos, la configuración, el tiempo de inicialización, y los factores constantes del algoritmo más complejo puede superar el beneficio.

En algunos casos, la adición de más memoria puede ayudar a hacer un programa que funciona más rápido. Por ejemplo, un programa de filtro comúnmente se lee cada línea y el filtro y la salida de esa línea de inmediato. Esto sólo se utiliza la memoria suficiente para que una línea, pero el rendimiento suele ser pobre. El rendimiento puede ser mejorado mediante la lectura de todo el archivo a continuación, escribir el resultado de la filtración, aunque utiliza la memoria mucho más. El almacenamiento en caché el resultado es igual de efectivas, aunque también requieren mayor uso de la memoria. Cuando para optimizar

La optimización puede reducir legibilidad y agregar código que se utiliza sólo para mejorar la rendimiento. Esto puede complicar los programas o sistemas, haciendo que sea más difícil mantener y depurar. Como resultado, la optimización o el ajuste de rendimiento se realiza a menudo en el final de la fase de desarrollo.

Donald Knuth formuló las siguientes dos declaraciones sobre optimización:

    “Debemos olvidar la eficiencia pequeño, digamos el 97% del tiempo: la optimización prematura es la raíz de todo mal” [2]

    (Él también se atribuye la cita a Tony Hoare varios años después,[3] aunque esto podría haber sido un error como Hoare se exime de haber acuñado la frase.[4])

    “En las disciplinas de ingeniería de una mejora del 12%, fácil de obtener, nunca es considerada marginal y creo que el mismo punto de vista debe prevalecer en la ingeniería de software”[5]

“La optimización prematura” es una frase utilizada para describir una situación en la que un programador permite consideraciones de rendimiento afectan al diseño de una pieza de código. Esto puede dar lugar a un diseño que no es tan limpio como podría haber sido o código que es incorrecto, ya que el código se complica por la optimización y el programador se distrae con la optimización.

Un enfoque alternativo es diseñar el primer código, desde el diseño y, a continuación Ver el perfil/punto de referencia el código resultante para ver qué partes deben ser optimizados. Un diseño simple y elegante es a menudo más fácil de optimizar, en esta fase, y el perfil puede revelar problemas inesperados de rendimiento que no han sido abordados por la optimización prematura.

En la práctica, a menudo es necesario para mantener las metas de desempeño en cuenta a la hora de diseñar el software primero, pero el programador de los saldos de los objetivos de diseño y optimización. Macros

Optimización en el desarrollo de código usando macros adopta formas diferentes en idiomas diferentes.

En algunas lenguas de procedimiento, tales como C y C + +, Las macros se implementa mediante la sustitución simbólica. Hoy en día, las funciones en línea puede ser utilizado como un seguridad de tipos alternativa en muchos casos. En ambos casos, el cuerpo de la función entre líneas puede someterse a optimizaciones en tiempo de compilación por el compilador, incluyendo plegamiento constante, Lo que puede mover algunos cálculos para el tiempo de compilación.

En muchos programación funcional macros idiomas se implementan mediante la sustitución en tiempo de análisis de los árboles de análisis y árboles de sintaxis abstracta, que se afirma hace más seguro de usar. Dado que en muchos casos la interpretación se utiliza, que es una manera de garantizar que tales cálculos se realizan solamente en tiempo de análisis, ya veces la única manera.

Ceceo se originó este tipo de macro[cita requerida]Y macros son a menudo llamados “macros Lisp como.” Un efecto similar puede lograrse mediante el uso de Plantilla metaprogramación en C + +.

En ambos casos, el trabajo se mueve a tiempo de compilación. La diferencia entre C macros, por un lado, y las macros de Lisp-like y C + + Plantilla metaprogramación en el otro lado, es que las herramientas de este último permite realizar cálculos arbitrarios en compile-time/parse-time, mientras que la expansión de C las macros no lleva a cabo cualquier cálculo, y se basa en la capacidad optimizador para llevarla a cabo. Además, C las macros no apoyan directamente la recursividad o iteración, por lo que no se Turing completa.

Como con cualquier optimización, sin embargo, a menudo es difícil predecir dónde herramientas de este tipo tienen el mayor impacto que un proyecto se ha completado. Automatizado y manual de optimización Artículo principal: Compilador de optimización

Véase también Categoría: optimizaciones del compilador

La optimización puede ser automatizado por los compiladores o realizadas por los programadores. Las ganancias son por lo general limitada para la optimización local, y más grande para optimizaciones globales. Por lo general, la optimización más potente es encontrar un superior algoritmo.

Optimización de un sistema es por lo general realizado por los programadores, ya que es demasiado complejo para los optimizadores automatizados. En esta situación, los programadores o administradores de sistema de cambio de código de forma explícita para que el sistema en general funciona mejor. A pesar de que puede producir una mayor eficiencia, es mucho más caro que optimizaciones automáticas.

Utilice un de perfiles (O rendimiento de los analizadores) Para encontrar las secciones del programa que están tomando la mayoría de los recursos - el embotellamiento. Los programadores a veces creen que tienen una idea clara de dónde está el cuello de botella, pero la intuición es con frecuencia mal. Optimización de una pieza sin importancia de código normalmente hacen poco para ayudar al rendimiento general.

Cuando el cuello de botella está localizado, optimización generalmente comienza con un replanteamiento del algoritmo usado en el programa. A menudo, un algoritmo en particular puede ser adaptado específicamente a un problema particular, dando mejor rendimiento que un algoritmo genérico. Por ejemplo, la tarea de ordenar una lista enorme de artículos se hace generalmente con un quicksort de rutina, que es uno de los algoritmos genéricos más eficiente. Pero si alguna característica de los elementos es aprovechable (por ejemplo, ya están dispuestos en un orden particular), un método que pueden utilizar diferentes, o incluso una especie de rutina a medida.

Después de que el programador está razonablemente seguro de que el mejor algoritmo se selecciona, la optimización del código se puede iniciar. Loops se puede desenrollar (para sobrecarga lazo inferior, aunque esto a menudo puede conducir a menor velocidad si se sobrecarga el CPU caché), Tipos de datos lo más pequeño posible se puede utilizar, aritmética entera se puede utilizar en lugar de punto flotante, y así sucesivamente. (Véase Algorítmica eficiencia artículo para estas y otras técnicas).

cuellos de botella de rendimiento puede ser debido a las limitaciones del lenguaje en lugar de algoritmos o estructuras de datos utilizadas en el programa. A veces, una parte fundamental del programa puede ser re-escrita en otro lenguaje de programación que proporciona un acceso más directo a la máquina subyacente. Por ejemplo, es común que muy de alto nivel lenguas como el Python tener módulos escritos en C para una mayor velocidad. Programas ya escrito en C puede tener módulos escritos en asamblea. Los programas escritos en D Puede utilizar el ensamblador en línea.

secciones de reescritura de “paga” en estas circunstancias a causa de un general “regla de oro”Conocido como el la ley 90/10, Que establece que el 90% del tiempo se gasta en el 10% del código, y sólo el 10% del tiempo en el 90% restante del código. Por lo tanto, poner esfuerzo intelectual en la optimización de sólo una pequeña parte del programa puede tener un efecto enorme en la velocidad total - si la parte correcta (s) puede ser localizado.

Manual de optimización a veces tiene el efecto secundario de socavar la legibilidad. Así, las optimizaciones de código debe ser cuidadosamente documentado (preferentemente con comentarios en línea), y su efecto sobre el desarrollo futuro evaluados.

El programa que realiza una optimización automática es llamado optimizador. La mayoría de los optimizadores se incrustan en los compiladores y operar durante la compilación. Optimizadores puede a menudo adaptar el código generado para los procesadores específicos.

En la actualidad, las optimizaciones automáticas se limita casi exclusivamente a compilador de optimización. Sin embargo, debido a las optimizaciones del compilador se limitan generalmente a un conjunto fijo de las optimizaciones más bien general, hay una considerable demanda de optimizadores que puede aceptar descripciones de problemas y optimizaciones específicas del idioma, lo que permite a un ingeniero para especificar optimizaciones. Herramientas que aceptan las descripciones de las optimizaciones se llaman programa de transformación sistemas y están comenzando a ser aplicado a sistemas de software reales, tales como C + +.

Algunos lenguajes de alto nivel (Eiffel, Esterel) Optimizar sus programas mediante el uso de una intermedios de la lengua.

Grid computing o computación distribuida tiene como objetivo optimizar el sistema en su conjunto, moviendo las tareas de los equipos con alto uso de equipos con tiempo de inactividad.

¿Qué son los Recursos Informáticos?

Todos aquellos componentes de Hardware y programas (Software) que son necesarios para el buen funcionamiento y la Optimización del trabajo con Ordenadores y Periféricos, tanto a nivel Individual, como Colectivo u Organizativo, sin dejar de lado el buen funcionamiento de los mismos.

Por defecto, en un hogar no se tendrán las mismas necesidades que en una Empresa. Un hogar medio tendría suficiente con un PC, una impresora, un Scanner, Conexión a Internet, Windows, Word, Excel y un acceso único a todos estos Recursos.

Pero cuando hablamos de Recursos Informáticos en una empresa, entran en juego muchos más factores a tener en cuenta a la hora de adaptar los Recursos Informáticos y acotar la inversión económica que se hace en éstos.

¿Es necesaria una conexión a Internet para agilizar las comunicaciones?

¿Es necesario un Server o basta con un Grupo de Trabajo?

¿Cuántos trabajadores tenemos en la empresa que necesiten un PC?

¿Cuántos de estos usuarios / trabajadores necesitan una conexión a Internet?

¿En caso de necesitar conexión a Internet, la montaremos con Cable o Wireless?

¿Se comunicarán entre Usuarios?

¿Será necesaria la Creación de Recursos Compartidos para compartir ficheros, impresoras, unidades lectoras?

¿Quiénes necesitan Impresora Realmente?

¿Quién necesita Scanner?

¿Necesitamos programas específicos de Gestión, Grabación, Comunicación?

¿Sistemas de Back Up?’s para datos imprescindibles?

¿Necesitamos un Dominio?

La persona que se encargue de analizar e implementar los recursos informáticos que necesita una empresa tendrá que tener en cuenta estos puntos y alguno que otro más con tal de Obtener un máximo Rendimiento a mínima Inversión.


Mis sitios nuevos:
Emprendedores
Politica de Privacidad