Pregunta

Escribe una función y, mirando el resultado de la asamblea, que vea que puede ser mejorado.

Le gustaría mantener la función que escribió, para mejorar la legibilidad, pero desea sustituir su propia asamblea para el compilador.Es allí cualquier manera de establecer una relación entre el alto livel la función del lenguaje y de la nueva asamblea?

¿Fue útil?

Solución

Si usted está buscando en la asamblea, entonces es justo asumir que usted tiene una buena comprensión acerca de cómo el código se compila abajo.Si usted tiene este conocimiento, entonces sus veces posible inversa de enginer' los cambios en el idioma original, pero a menudo es mejor no molestar.

Las optimizaciones que hacen son probablemente muy pequeño en comparación con el tiempo y el esfuerzo necesario en primer lugar realizar estos cambios.Yo le sugiero que deje este tipo de trabajo para el compilador y ir a tomar una taza de té.Si los cambios son significativos, y el rendimiento es crítico, (como dicen en el embedded world) entonces es posible que desee para la mezcla de la normal de código con el assemblar de alguna manera, sin embargo, en la mayoría de las computadoras y chips el rendimiento es generalmente suficiente para evitar este dolor de cabeza.

Si realmente necesita más rendimiento, a continuación, optimizar el código no de la asamblea.

Otros consejos

Ninguno, supongo.Usted ha rechazado el compilador de la obra en favor de su propio.Así podría lanzar fuera de la función que usted escribió en el lenguaje compilado, porque ahora todo lo que tienes es el ensamblador en esa plataforma.

Yo le aconsejo vivamente en contra de participar en este tipo de optimización, porque a menos que estés seguro de que, a través de la creación de perfiles y análisis, que realmente están haciendo una diferencia.

Depende del lenguaje de la que escribió su función.Algunos lenguajes de programación como C son de muy bajo nivel, la traducción de cada llamada a la función o instrucción específica de las declaraciones de la asamblea.Si usted hizo uso de C, puede reemplazar su función con ensamblador para mejorar el rendimiento.

Otros lenguajes de alto nivel puede convertir cada declaración en macro o las rutinas de otras más complejas llamadas en la asamblea lado.Ciertas optimizaciones (como la cola de recursividad, bucle desenrollado, etc) puede ser implementado fácilmente en el lado de la fuente, pero otros (como hacer más eficiente el uso del archivo de registro) puede ser imposible (de nuevo, según el lenguaje y el compilador que se está usando).

Su difícil decir que no existe ninguna relación entre la modificación de la asamblea y de la fuente que generó la versión no modificada.Sin duda, va a confundir las herramientas de depuración:registrar el contenido ya no coincide con el origen de variables, que se supone que corresponden.

Hay un número de lugares en el procesamiento de paquetes de código donde he examinado el ensamblado generado y ha vuelto a cambiar el código fuente original con el fin de mejorar el resultado.Re-organización de origen puede reducir el número de ramas, __attribute__ y el compilador de argumentos puede alinear los puntos de ramificación y funciones para reducir la e$ echa de menos.En casos desesperados un poco de ensamblador puede ser utilizado, de modo que el binario puede ser compilado desde el código fuente.

Algo que podría intentar es independiente de su función original en su propio archivo, y proporcionar una regla para construir el ensamblador a partir de ahí.A continuación, actualizar el ensamblador archivo con su versión mejorada, y proporcionar una regla para construir un objeto de archivo de la ensamblador de archivo.A continuación, cambiar su vincular las reglas de incluir el archivo de objeto.

Si sólo puedes cambiar el ensamblador de archivo, que seguirá siendo utilizado.Si alguna vez cambio el original de lenguaje de alto nivel de archivo, el archivo ensamblador será reconstruido y el archivo de objeto construido a partir de la nueva (sin mejoras) versión.

Esto le da a usted una relación entre los dos;usted probablemente desea agregar una advertencia comentario en la parte de arriba de la de lenguaje de alto nivel de archivo para advertir sobre el comportamiento.El uso de alguna forma de VCS le dará la capacidad de recuperar la mejora de la ensamblador archivo si usted comete un error aquí.

Si estás escribiendo un nativo compilado aplicación en Visual C++, hay dos métodos:

  1. El uso de la __asm { } bloque y escribir el ensamblador allí.
  2. Escribir sus funciones en MASM ensamblador, se reúnen para .obj, y el enlace es como una biblioteca estática.En su C/C++ de código, declarar la función con un extern "C" de la declaración.

Otros C/C++ compiladores tienen enfoques similares.

En esta situación, generalmente tienen dos opciones:optimizar el código o volver a escribir el compilador.No puedo ver de donde romper el vínculo entre el origen y el op es cada vez va a ser la solución correcta.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top