Cómo mejorar el rendimiento en una computadora mediante la programación

Primero tiene que obtener una comprensión más profunda del funcionamiento de su máquina. Lo mínimo que tienes que aprender para eso es “C”, simplemente no hay forma de evitarlo. Tienes que. Entonces, si realmente realizó alguna programación del sistema, le recomendaría que aprenda el ensamblaje, al menos lo suficiente como para comprender el código, que producirá su compilador. Tal vez incluso lo suficiente como para inyectar algunos pequeños tokens de ensamblaje en su flujo de código para endurecer ese código un poco.

Y siempre usa

#ifdef __x86_64
… // asamblea aquí
#elif
… // código cojo aquí
#terminara si

si haces eso Entonces su código sigue siendo compatible. Puede que no sea agradable, pero esa es la mejor manera. Incluso puede inventar una bandera personalizada como “OPT_ASM” y solo inyectar la parte del ensamblaje en su código, si le dice al compilador que lo haga.

Por lo tanto, tiene una solución estándar poco convincente, por un lado, y su magia optimizada, por otro. Si su proyecto falla, apaga su hechicería y ve si fue la razón del fracaso, si no, es solo una vez más la mierda de HLL.

Luego, tenga mucho cuidado con los bucles.

Optimícelos, saque las constantes, registre variables importantes, doble los bucles de anidados en bucles únicos más complejos. Busque las recursiones y reemplácelas con iteraciones más rápidas, busque un mejor algoritmo, use fórmulas matemáticas donde pueda (10k las adiciones son aún más lentas que UNA multiplicación por 10k).

Estudie IOCCC y el código de c-golf, obtenga un contador de ciclos y mida la necesidad del ciclo para sus rutinas, reemplace el código de la biblioteca con un código mejor, solo aprenda, aprenda, aprenda.

Si está en el nivel de ensamblaje, aprenderá sobre el caché y el uso del mismo, sobre los comandos intercalados para hacer uso completo de la tubería, sobre el uso de enteros sobre puntos flotantes, sobre la ejecución en registros, luego en el caché y luego en la memoria.

Aprende cuán lenta es la memoria. Y cuán jodidamente lento es el acceso a la pila. (¿Recuerdas? MATAR TODAS LAS RECURSIONES)

No hagas bucles primitivos, une bucles hasta que realmente hagan algo. Las recursiones primitivas son un TRIPLE prohibido. Ve y golpea al siguiente maestro que te dice que este es un buen código:

int fac (int n) {
if (n <= 1) devuelve 1;
de lo contrario, devuelve n * fac (n-1);
}

Si veo ESO, sé por qué mi computadora se ha vuelto tan jodidamente lenta. ¿La gente cree que ES un buen código? Esto nunca, nunca, nunca, en ningún lugar debe ser enseñado por nadie, esta parte del código solo debe estar en Madame Tussauds “Chambré of Horrors” en las escaleras en un escaparate al lado del propio Hitler. Lo llamo “El Código de Hitler”. El mal puro y refinado.

Realmente me vuelvo loco si veo algo así. Nunca deberías hacer eso. Ni siquiera para mostrarle a alguien los cuestionables beneficios de la recursividad. ¡ASÍ NO!

La gente comienza a imitar esa mierda. Y usted, en algún momento de su vida, usará un código de biblioteca inofensivo y no sospecha nada malo, porque esas personas deberían haber aprendido a programar y usted solo, porque lo hace siempre, escanea rápidamente parte de su código y De repente encontrar esa abominación en ella.

Cálmese.

Bueno.

No hay necesidad de llamar a alguien. Ya ejecuté a esas personas. Estoy firmemente en contra de la pena de muerte, pero esa es la única excepción que hago y donde encuentro que es lo mejor para el bien mayor para todos nosotros, ponerles fin.

Si. Pero dejando de lado la exageración humorística, eso es lo que encuentras cuando las personas te muestran los beneficios de la recursividad. Y luego se preguntan por qué sus bibliotecas se vuelven tan mierda. La gente sigue a sus maestros. Hacen lo que se les dijo. La mayoría de ellos.

Y creen lo que les dijeron. Son buenas personas. Y sus maestros les mienten y luego algo así sale de eso. Y te quedas allí y tu cabeza está roja y tus venas están latiendo y te miran con estos grandes ojos marrones de Bambi y piensan que no hicieron ningún daño.

Pero: HICIERON MI COMPUTADORA LENTA.

Asi que. Volver al tema ¿Donde estaba?

Hay algo que puede hacer si prueba el código de la biblioteca. Simplemente entre y llame a algo con su programa, mida el tiempo de ejecución. Luego escriba ese código usted mismo, si no puede acceder a la fuente y no lee el ensamblaje y no puede simplemente “objdump” las cosas.

Escriba su propia pequeña biblioteca (mire en la red un tutorial, es fácil en C) y póngala en frente de su programa con LD_PRELOAD, como se demuestra aquí, por ejemplo:

Trucos del enlazador dinámico: uso de LD_PRELOAD para hacer trampa, inyectar funciones e investigar programas

Y luego mida su programa nuevamente (con “tiempo ./myprogram”) por ejemplo.

Incluso si no lee el ensamblaje, si no sabe cómo usar “gdb” (¡aprenda eso! Aquí: Tutorial de depuración de GNU) o el generador de perfiles de GNU (aquí: Tutorial de GPROF – Cómo usar la herramienta de creación de perfiles GNCC de Linux GNU) , siempre puede intercambiar el código de la biblioteca con el suyo.

Y mira si la biblioteca es una mierda o no. Y qué es lo que hace que su código sea lento.

Bueno, trabaja en eso.

Y si estás en ello, continúa con tu búsqueda diaria, mata una recursión al día

Por el bien mayor para todos nosotros.

Al aprender un código de nivel muy bajo, puede comunicarse directamente con la CPU / GPU que omite algunas capas como JIT (C #, Java), interpretación (Phyton) y hacer que la CPU lo haga directamente (ASM o código en línea nativo en casi cualquier idioma). Esto le dará una ventaja en el rendimiento porque, como dije, omite al menos 2 o 1 capas.

La otra forma es conociendo el idioma y algunos conceptos básicos al respecto.

Por ejemplo:

Ejemplos de C #:

MyClass obj = nuevo MyClass ();
para (i = 0; i Parece un código genial y bien hecho, pero no está optimizado:

Int lngt = obj.Length;
para (int i = 0; i Esto está muy optimizado.

Aprenderá muchos trucos con experiencia, pero si quiere mi consejo: aprenda idiomas de bajo nivel para que pueda entender y depurar programas. Al depurarlos, puede ver qué partes del código son redundantes, cuáles son inútiles, pesados, etc.

More Interesting

¿Cuál es la mejor computadora portátil con Windows?

¿Cuál es la mejor computadora portátil para juegos y entretenimiento con menos de 60k INR?

¿Es posible convertir el fondo del monitor de su computadora en un espejo? ¿Cómo puedes hacerlo?

¿Qué es PCI Express? ¿Y por qué está configurado en modo de ahorro máximo de energía? (ver foto adjunta)

¿El cable de alimentación de mi computadora portátil puede pasar por alto la batería y soldarse en su lugar?

Si tiene $ 10,000 para una computadora de juego, ¿cuál será su construcción?

¿Cuáles son los beneficios de tener una tableta frente a tener una computadora portátil? ¿Cómo sería útil para un estudiante tener ambos?

¿Qué configuración de computadora portátil debo comprar para mi hermano en Graduation-Architecture de segundo año? ¿Sugieres una tarjeta gráfica dedicada?

¿Por qué las personas dicen 'tecnología' cuando solo hablan de computadoras y otras cosas digitales?

¿Cuál es el mejor lenguaje de programación para aprender en 2014?

¿Qué computadora portátil debo comprar, una Macbook o Windows, y qué marca?

¿Cuál es la mejor computadora portátil para mi hijo que va a la universidad a estudiar ingeniería petrolera?

¿Cuáles son las mejores computadoras portátiles con menos de 33k?

¿Cambiar el nombre de un archivo de datos realmente causa pérdida de calidad?

¿Dónde puedo ir para aprender cómo construir y mantener mi propia PC para juegos? Quiero poder hacer esto por mi cuenta.