¿Conocer la arquitectura de computadoras es bueno para un programador?

No solo es bueno, es imprescindible conocer la arquitectura de la computadora si quieres ser un buen programador. Por ejemplo, las PC generalmente tienen islas de memoria que residen a diferentes distancias entre sí. Por ejemplo, tenemos una GPU que procesa gráficamente con su propia memoria y tenemos CPU que tienen registros locales y memoria del sistema.

El tiempo que tarda una CPU o una GPU en acceder a la memoria desde estas islas diferentes varía. Es una cuestión de física, y no hay forma de evitarlo. Para que una GPU tenga acceso a lo que sea que la CPU esté trabajando regularmente, debe saber de antemano y solucionar el hecho de la distancia (una GPU tendría que esperar inactiva para que los datos lleguen durante mucho tiempo si no lo hace planificar con anticipación), lo contrario también es cierto. Para una CPU también hay una gran diferencia entre acceder a los registros locales y la memoria del sistema, aunque existen mecanismos que ocultan esto al programador, aunque no son perfectos. Las CPU tienen cachés con diferentes niveles (para diferentes distancias y velocidades) y lógica de captación previa (que trae datos que residen en la memoria del sistema con la esperanza de que vayas a usar eso a continuación), y controladores de memoria integrados que cierran la distancia física entre una CPU y memoria.

Echemos un vistazo a algunos números para darle una idea. En la siguiente lista, le mostraré la cantidad de ciclos que requiere un Core i7 de primera generación de Intel para obtener datos de las diferentes islas de memoria.

Registros locales: 1 ciclo
Caché L1: 4 ciclos (64 KB)
Caché L2: 11 ciclos (256 KB)
Caché L3: 39 ciclos (8 MB)
Memoria del sistema: 107 ciclos (hasta 32 GB de memoria DDR3-1600)
(Fuente: The Dark Knight: Intel Core i7 )

Míralo. Un Core i7 (primera generación) tarda 107 veces más en acceder a la memoria del sistema que acceder a los registros locales. Esa es una gran diferencia . Si observamos el peor de los casos para cada ciclo de trabajo, tendríamos que esperar 107 ciclos para obtener datos de la memoria del sistema, eso haría que una CPU de 3 GHz funcione como una ~ 27 MHz si no pensamos las cosas mediante. Siendo realistas, las instrucciones casi nunca toman un ciclo y los accesos a la memoria están ocultos usando la lógica de captación previa para tratar de tener los datos que necesitamos en la memoria caché local para reducir la latencia. Esto se debe a que existen malos programadores e Intel no quiere que arruinen nuestras expectativas de rendimiento o su imagen (Confía en mí, existen y son muy comunes). Además, los tipos de algoritmos que no funcionan en el mismo conjunto de datos no son tan comunes en las cargas de trabajo de la CPU, sin embargo, los muy buenos programadores que trabajan en código sensible al tiempo casi siempre piensan en el conjunto de datos con el que necesitan trabajar para ver si Encajaría en un caché local y evitaría las limitaciones de la CPU para ocultar todo esto de nosotros.

Los buenos programadores saben todo esto y pueden explotar el conocimiento para su ventaja, y este es solo un aspecto de la información de arquitectura que es imprescindible saber como se puede ver en la respuesta de Chuck Buford y David Ecale.

Hola rahul

Cuando comienzas, puedes sentir que todo lo que necesitas saber como programador es crear líneas de código que realmente compilan.

Pero más adelante, cuando necesita escribir código digno de producción, entran en escena cosas como la complejidad del tiempo de ejecución.

Por lo tanto, es imprescindible saber cómo interactúa el código que escribe con el sistema operativo. Aquí es donde se mantendrá su conocimiento de la arquitectura de la computadora.

En este momento, le aconsejaría que entienda cómo funciona su código bajo el capó, aprenda cómo funciona su compilador y estará bien.

No es tan importante comenzar como lo es más adelante.

Cuando recién comienza, no sabe lo suficiente sobre cómo escribir código para comprender cómo eso afectará su código en tiempo de ejecución.

Cuanto más aprenda sobre cómo escribir código, más importante será.

Por ejemplo:

If (prueba! = 1)
{prueba = 1;
Hacer algo();
}

DependsOnDoSomething ();

En un entorno de subprocesos múltiples, algunos procesadores tienen problemas con este código.

Dos subprocesos, un subproceso puede ejecutar la comprobación de if, luego establecer la prueba igual a 1. El otro subproceso ejecuta la comprobación de if (la prueba es 1 ahora), y luego DependsOnDoSomething antes de que se ejecute DoSomething.

Esta es información importante, pero generalmente (y razonablemente) más allá del alcance de los principiantes.

Absolutamente, positivamente, ¡SÍ! !!! He aquí por qué: saber cómo funciona una computadora te da

1) Una comprensión de sus limitaciones.
2) La capacidad de evitar errores obvios
3) Te permite pensar en construcciones más eficientes
4) Crea una comprensión de cómo un compilador traduce su código a programas ejecutables reales.

Es esencialmente porque se asegura de que aprenda a trabajar dentro de las limitaciones arquitectónicas y de recursos. El conocimiento de estos factores permite que el código se adapte en consecuencia.

Tener más conocimiento en general siempre es algo bueno.
Y saber cómo funcionan las computadoras y los sistemas informáticos es una gran ventaja para un programador.
Me siento como un capitán obvio ahora …

More Interesting

¿Es posible tener éxito en una carrera en programación web sin pasión?

¿Qué consejo le darías a una joven estudiante de informática que se siente inadecuada?

Soy un estudiante de segundo año de B.Tech CSE. ¿Qué debo hacer para obtener una pasantía de invierno en IIM Ahmedabad?

¿Cuál es el mejor camino profesional para un estudiante de informática para el futuro?

¿Cómo convertirse en un experto en administración de Hadoop? ¿Cuál es la forma de trabajar en el administrador de Hadoop?

¿Qué conocimiento de informática debes tener para convertirte en un programador de kernel?

¿Qué trabajo puedo obtener con un título en informática? Actualmente voy al octavo grado y estoy tratando de decidir una buena especialización en la universidad.

¿Cómo / qué estudia un novato total para cambiar de carrera y ser contratado como desarrollador / programador en 2016?

¿Cuáles son las ventajas y desventajas de la maestría en informática basada en cursos y tesis? ¿Por qué muy pocas personas optan por una maestría basada en tesis?

¿Por qué hay más trabajos en informática / informática que la oferta de solicitantes de empleo calificados en muchos países?

Soy un recién graduado que trabaja para una de las principales firmas de Wall Street en M&A. Hice más de $ 150K mi primer año. Me parece que el sueldo no vale la pena. ¿Sería una locura obtener una maestría en informática? Sueño con comenzar una empresa de tecnología.

¿Puedo ingresar a la sucursal de CS en una de las mejores universidades de ingeniería de Pune si mi rango es de 274,570 en jee?

Después de completar FreeCodeCamp, ¿qué tan difícil será obtener un trabajo remoto?

¿Debería estudiar informática o inteligencia artificial?

Programadores de computadoras: ¿Cómo debo distinguirme como futuro estudiante de pregrado de CS?