2010-05-25 15 views
13

¿Existen técnicas para optimizar el código con el fin de garantizar la menor potencia es consumption.Architecture ARM.language es C¿Podemos optimizar el código para reducir el consumo de energía?

+21

Utilice el operador de optimización '//'. :) – SLaks

+0

Los ciclos no utilizados por su programa se seguirán utilizando como procesos inactivos. Supongo que si tu CPU está sintonizada para darle menos energía cuando necesita menos ciclos, entonces solo necesitas hacer que tu código sea más rápido. De lo contrario, tu única opción es '#include" gogreen.h "'. – corsiKa

+4

@Slaks que la optimización solo está disponible para C++ (y más reciente que las variantes ANSI C), por lo que es mejor usar/**/operator :-p – fortran

Respuesta

6

Desde el sitio de referencia técnica ARM:

Las características del procesador ARM11 MPCore que mejoran la eficiencia energética incluyen:

  • rama exacta y la predicción de retorno sub-rutina, la reducción del número de recuperación de instrucción incorrecta y operaciones de decodificación
  • uso de cachés direccionados físicamente, lo que reduce la número de caché rubores y las recargas, el ahorro de energía en el sistema
  • el uso de MicroTLBs reduce la potencia consumida en las búsquedas de traducción y de protección de cada ciclo
  • los cachés utilizan la información de acceso secuencial para reducir el número de accesos a la etiqueta RAM y a RAM de datos no deseados.

En el ARM11 MPCore procesador extensa también se hace uso de gated relojes y puertas para desactivar entradas a bloques funcionales no utilizados. Solo la lógica que se usa activamente para realizar un cálculo de consume energía dinámica.

En base a esta información, diría que el procesador hace mucho trabajo para ahorrar energía. Cualquier desperdicio de energía vendría de código mal escrito que hace más procesamiento de lo necesario, que de todos modos no querría. Si está buscando ahorrar energía, el diseño general de su aplicación tendrá más efecto. El acceso a la red, el procesamiento de pantallas y otras operaciones de gran consumo de energía serán más preocupantes para el consumo de energía.

5

Optimización de código para utilizar menos energía es, efectivamente, simplemente optimizar el código. Independientemente de si sus motivos son monetarios, sociales, políticos o similares, menos ciclos de CPU = menos energía utilizada. Lo que estoy tratando de decir es que creo que probablemente pueda reemplazar el "consumo de energía" por el "tiempo de ejecución", ya que, en esencia, serían directamente proporcionales y, por lo tanto, podría tener más éxito cuando no "asuste" a la gente con un pregunta relacionada con el poder Sin embargo, puedo estar corregido :)

+0

cuidado para justificar el -1? – Jeriko

+0

No lo hice, pero mi computadora portátil usa menos energía si la CPU está funcionando más despacio, por lo que el tiempo de ejecución es inversamente proporcional al consumo de energía. –

+0

No se puede reclamar que el tiempo de ejecución sea inversamente proporcional al consumo de energía. Eso implica que podría escribir un guión de 10 años y esperar que consuma un solo joule de energía. Admitiré la ambigüedad anterior- ¿Qué tal "el uso de energía es proporcional al número de operaciones de la CPU, teniendo en cuenta que la potencia requerida por operación es inversa a la velocidad sucesiva a la que se ejecutan dichas operaciones (junto con un millón otros factores que no se mencionaron porque estaba tratando de escribir una regla general y no una tautología requerida para defenderse ante un tribunal) ". : P – Jeriko

0

Si el procesador está sintonizado para usar menos energía cuando necesita menos ciclos, la solución es hacer que el código funcione más eficientemente. De lo contrario, no hay mucho que pueda hacer a menos que el sistema operativo exponga algún tipo de funcionalidad de administración de energía.

0

En algunos procesadores ARM es posible reducir el consumo de energía poniendo el regulador de voltaje en modo de espera.

5

Sí. Use un profiler y vea qué rutinas usan la mayor parte de la CPU. En ARM puede usar algunos conectores JTAG, si están disponibles (utilicé Lauterbach para depurar y para crear perfiles). El principal problema generalmente es poner su procesador, cuando está inactivo, en un estado de bajo consumo (sueño profundo). Si no puede reducir el porcentaje de CPU utilizado por mucho (por ejemplo, del 80% al 50%), no hará una gran diferencia.Según los sistemas operativos que esté ejecutando, las opciones pueden variar.

+0

y podría agregar: no mantenga los periféricos en un estado "abierto" a menos que realmente los esté usando (por ejemplo, mantener el bluetooth/wi-fi abierto reduce * mucho * la duración de la batería en el caso de dispositivos móviles. – INS

1

Si no está ejecutando Windows XP + o una versión más nueva de Linux, podría ejecutar un hilo de fondo que no hace más que HLT.

Así es como programas como CPUIdle reducen el consumo de energía/calor.

+0

This shouldn No será necesario para los sistemas operativos más nuevos. –

+2

@Axel: Sí, mencioné que ... –

3

La edición de julio de 2010 de Comunicaciones del ACM tiene un artículo sobre los algoritmos de eficiencia energética que pueden interesarle. No lo he leído todavía, así que no puedo impartir nada de su sabiduría.

+0

En general, estaba muy decepcionado con dicho artículo, por desgracia. –

+0

Ahora probablemente nunca lo leeré. –

3

Trate de permanecer en la memoria de los chips (caché) para bucles inactivos, mantenga las E/S al mínimo, mantenga el bit volteando al mínimo en los buses. La memoria NV como proms y flash consumen más energía para almacenar ceros que unos (por eso se borran a unos, en realidad es un cero, pero los transitorios invierten el bit antes de verlo, ceros almacenados como unos, almacenados como ceros, esta es también la razón por la que se degradan a unos cuando fallan), no sé sobre memorias volátiles, dram usa la mitad de transistores que sram, pero tiene que actualizarse.

Para todo esto es importante, aunque debe comenzar con un sistema de menor potencia, ya que lo anterior puede no ser notable. no use nada de Intel, por ejemplo.

Cuestiones relacionadas