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.
- ¿Debería unirme a Cognizant o Wipro como un recién graduado de B.Tech en CSE? ¿Por qué?
- ¿Es aconsejable posponer la graduación para un estudiante internacional? ¿Con la esperanza de encontrar una "mejor" pasantía y, por lo tanto, un mejor trabajo?
- ¿Cuál es la mejor manera para que un graduado en informática tome un trabajo en el campo de las redes?
- Cómo elegir qué y a cuántas universidades debería postular, para una escuela de posgrado en los EE. UU. Para informática
- ¿Cuáles son todas las cosas que necesito aprender para poder ser parte del motor de juego de la unidad como programador del desarrollo del motor de juego?
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.