¿Sigue siendo la memoria el cuello de botella más crítico en la comunidad de investigación de arquitectura de computadoras?

Sí, la memoria es el último cuello de botella. La explicación fue proporcionada por Manuel Blum en lo que se conoce como el teorema de aceleración de Blum. En forma simplificada es así. Dada cualquier función computable en una computadora, si tiene una memoria lo suficientemente grande, puede hacer que esa función sea tan rápida como desee. ¿Cómo? Al crear una matriz con todas las salidas posibles de la función donde el índice de la matriz es la concatenación de todas las entradas. Sería una gran matriz, pero podría calcular la salida en una sola instrucción. Como todos sabemos que hay un número finito de átomos en el universo y, por lo tanto, un número máximo finito de celdas de memoria, podemos ver que el tamaño de la memoria es el factor limitante final. En términos más prácticos, la próxima vez que vea un reloj de arena o una figura similar en su computadora o teléfono inteligente, sepa que lo más probable es que esté haciendo “recolección de basura”: recuperar la memoria de las partes de la memoria que ya no es necesaria. Esto es necesario porque los recuerdos no son lo suficientemente grandes.

Los cuellos de botella son características de las aplicaciones, no arquitecturas. Estoy trabajando en un programa en el que el hecho de que leer un registro específico del modelo tomara miles de ciclos y este fue el cuello de botella más importante para el rendimiento (lo que llevó a que un interno de pregrado mío realizara cambios significativos en el kernel de Linux para permitir operaciones msr por lotes; estamos viendo en el orden de aceleración 10x para algunos escenarios).

En segundo lugar, siempre hay un cuello de botella, a menos que la aplicación esté tan perfectamente equilibrada que todo sea un cuello de botella.

Dicho esto, la pared de la memoria sigue siendo el principal cuello de botella para la mayoría de los códigos científicos. Por ejemplo, en muchas simulaciones de Monte Carlo, el enfoque general es leer datos, realizar una cantidad modesta de procesamiento y escribir el resultado. Obtener los datos lleva mucho más tiempo que el procesamiento, por lo que tener estas instrucciones vectoriales realmente geniales no nos hace mucho bien (en estas circunstancias particulares).

Los predictores de rama y la captación previa de hardware, por otro lado, son enfoques para mitigar los cuellos de botella en lugar de los cuellos de botella por derecho propio. El primero aborda el cuello de botella de las instrucciones de velocidad que se pueden retirar cuando el segundo intenta evitar el muro de la memoria.

Curiosamente, ni los registros ni el caché parecen ser cuellos de botella significativos en este momento.

No puedo hablar con la comunidad de investigación, pero sí, el cuello de botella de Von Neumann sigue siendo un gran problema en el mundo real. El aumento en el número de núcleos continúa impulsando la potencia de cómputo, por lo que las CPU son cada vez más rápidas, pero mucho más rápido de lo que puede progresar la DRAM.

Veremos un aumento continuo en la cantidad de canales DRAM admitidos, y luego debido a las limitaciones de los pines, veremos una nueva interfaz de memoria basada en la tecnología SERDES de alta velocidad.

Uno de los desarrollos interesantes en la tecnología de memoria que podría cambiar la forma en que pensamos sobre la “memoria del sistema principal” es este enfoque para usar la memoria flash no solo para el almacenamiento sino también como parte de la memoria del sistema principal:

La interrupción del flash llega a la memoria principal del servidor

Con este diseño surge la posibilidad de tener memorias muy grandes (hechas de una parte de DRAM rápida y otra parte de flash más lento) a todas accesibles directamente por la CPU y ya no se bloquean a través de una interfaz de almacenamiento en bloque.