Acovea

Software captura de pantalla:
Acovea
Detalles de software:
Versión: 1.0.1
Fecha de carga: 3 Jun 15
Licencia: Libre
Popularidad: 176

Rating: 2.7/5 (Total Votes: 3)

Acovea implementa un algoritmo genético para encontrar las "mejores" opciones para compilar programas con el GCC C y C ++ compiladores.
Acovea (Análisis de Opciones del compilador vía evolutiva Algoritmo) implementa un algoritmo genético para encontrar las "mejores" opciones para compilar programas con el GNU Compiler Collection (GCC) C y compiladores de C ++.
"Mejor", en este contexto, se define como aquellas opciones que producen el programa ejecutable más rápida de un código de fuente dada. Acovea es un marco de C ++ que se puede ampliar para probar otros lenguajes de programación y compiladores no CCG.
Me imagino Acovea como una herramienta de optimización, similar en propósito a los perfiles. Tradicional perfiles de nivel función identifica los algoritmos más influyentes en el rendimiento de un programa; Acovea se aplica entonces a los algoritmos para encontrar las banderas del compilador y opciones que generan el código más rápido.
Acovea también es útil para probar combinaciones de banderas para las interacciones pesimistas, y para probar la fiabilidad del compilador.
El software moderno es difícil de entender y verificar por medios tradicionales. Millones de líneas de código que contiene interacciones producen aplicaciones complejas, desafiando simple descripción o investigación de fuerza bruta.
Un guiada, enfoque determinista de la prueba se basa en los probadores humanos de imaginar todas las combinaciones posibles de las acciones - una propuesta poco realista dada la complejidad del software. Sin embargo, a pesar de que la complejidad, necesitamos respuestas a preguntas importantes sobre, moderno software a gran escala.
¿Qué tipo de preguntas importantes? Considere la colección de compiladores de GNU. Escribo artículos ese punto de referencia de generación de código, una tarea llena de dificultades debido a las innumerables opciones que proporcionan los distintos compiladores. Para mis puntos de referencia para tener algún significado, necesito saber qué combinación de opciones produce el código más rápido para una aplicación dada.
Encontrar el "mejor" conjunto de opciones suena como una tarea sencilla, dada la extensión de la documentación del CCG y la sabiduría convencional de la comunidad de desarrolladores de GCC. Ah, si sólo fuera tan fácil! La documentación de GCC, mientras extensa, también es sinceramente impreciso.
Agradezco este estilo de la documentación; a diferencia de muchos proveedores comerciales, que hacen afirmaciones absolutas sobre la "calidad" de sus productos, documentalistas de GCC admiten incertidumbres en cómo varias opciones alteran la generación de código. De hecho, la generación de código es totalmente dependiente del tipo de aplicación que se está compilado y la plataforma de destino. Una opción que produce código ejecutable rápido para un código de fuente puede ser perjudicial para el rendimiento de otro programa.
"La sabiduría convencional" llega a mi bandeja de entrada cada vez que publico un nuevo artículo. Que van desde la cortés con el insistente a la mala educación, estos correos electrónicos contienen sugerencias contradictorias para la producción de código rápido.
En la gran mayoría de los casos, este tipo de afirmaciones anecdóticas carecen de cualquier prueba formal de su validez y, más a menudo que no, la "mejora" que se sugiere es ineficaz o perjudicial. Es cada vez más obvio que nadie --myself incluido - sabe exactamente cómo todas estas opciones GCC trabajan juntos en la generación de código del programa.
Busco el Santo Grial de Optimización - pero exactamente ¿qué es la optimización? Entender el problema es el primer paso para encontrar una solución.
Optimización intenta producir el "mejor" código máquina del código fuente. "Mejor" significa diferentes cosas para diferentes aplicaciones; unas palas de bases de datos trozos de información, mientras que una aplicación científica tiene que ver con resultados rápidos y precisos; la primera preocupación para un sistema embebido puede ser el tamaño del código.
Y es muy posible que pequeño código es rápido, o código rápido precisa. Optimización está lejos de ser una ciencia exacta, dada la diversidad de las configuraciones de hardware y software.
Un algoritmo de optimización puede ser tan simple como la eliminación de un bucle invariante, o tan complejo como el examen de todo un programa para eliminar sub-expresiones comunes globales. Muchas optimizaciones cambian lo que escribió el programador en una forma más eficiente, produciendo el mismo resultado, mientras que la alteración de los detalles subyacentes de la eficiencia; otra "optimizaciones" código de producto que utiliza características específicas del hardware subyacente, como conjuntos de instrucciones especiales.
Arquitecturas de memoria, tuberías, cachés dentro y fuera de la viruta - afectan el rendimiento del código de maneras que no son obvias para los programadores que utilizan un lenguaje de alto nivel. Una optimización que puede parecer para producir código más rápido puede, de hecho, cree código grande que causa más fallos de caché, el rendimiento de este modo degradante.
Incluso el mejor código atentos a mano C contiene áreas de interpretación; no hay absoluta, uno-a-uno correspondencia entre las declaraciones de C y las instrucciones de la máquina. Casi cualquier secuencia de código fuente puede ser compilado en diferente - pero funcionalmente equivalente - instrucción de máquina arroyos con diferentes tamaños y características de rendimiento.
Inlining funciones es un ejemplo clásico de este fenómeno: la sustitución de una llamada a una función con el mismo código de función puede producir un programa más rápido, pero también puede aumentar el tamaño del programa. El aumento de tamaño del programa, puede, a su vez, evitar que un algoritmo de ajuste dentro de la memoria caché de alta velocidad, frenando así un programa debido a fallos de caché.
Observe mi uso de la palabra comadreja "puede" - inlining funciones pequeños a veces permite que otros algoritmos de optimización de la oportunidad de mejorar aún más código para las condiciones locales, produciendo más rápido y más pequeño código.
Optimización no es simple o evidente, y las combinaciones de algoritmos puede conducir a resultados inesperados. Lo que me lleva de vuelta a la pregunta: ¿Para cualquier aplicación dada, ¿cuáles son las opciones de optimización más eficaces?
¿Qué hay de nuevo en esta versión:
· Cambios menores en la licencia no libre.
· Se ha añadido soporte para las últimas versiones de libcoyotl y libevocosm.

Programas parecidos

KOJAK
KOJAK

12 May 15

grandma
grandma

11 May 15

CATSRunner
CATSRunner

3 Jun 15

AceUnit
AceUnit

2 Jun 15

Otro software de desarrollador Scott Robert Ladd

Acovea/GTK
Acovea/GTK

3 Jun 15

Comentarios a la Acovea

Comentarios que no se encuentran
Añadir comentario
A su vez en las imágenes!