¿Es el ancho de banda de la RAM o VRAM en GPU suficiente para tu PC?

La relación entre la memoria RAM y un procesador es totalmente simbiótica, mientras que la RAM no tiene sentido sin el procesador este no puede vivir sin ella independientemente de donde se encuentre. Por lo que forman parte de un todo conjunto que se retroalimenta entre sí. Por lo que existe una relación de cara al rendimiento y esta es la intensidad aritmética. Os explicamos en qué consiste.

Un procesador, independientemente de si es una CPU o una GPU no hace otra cosa que procesar datos, lo que lleva a que necesite una memoria que lo vaya alimentando. Desgraciadamente con el paso del tiempo la distancia entre la velocidad de la memoria y la de la CPU ha ido creciendo, lo que ha llevado a implementar técnicas como la memoria caché. No podemos olvidarnos tampoco de la latencia entre el procesador y la memoria., lo cual ocurre cuando la interfaz entre la RAM y el procesador no puede otorgar o modificar los datos con la suficiente velocidad.

No obstante no podemos medir el rendimiento de manera general, ya que cada programa o mejor dicho, cada algoritmo dentro de cada programa tiene una carga computacional distinta. Y es aquí donde entra el término de intensidad aritmética. Pero, veamos qué es y en qué consiste, así como otros elementos que tienen que ver con el rendimiento en un ordenador.

¿Qué es la intensidad aritmética?

Intensidad aritmética

La densidad aritmética es una medida de rendimiento, consistente en medir la cantidad de operaciones en coma flotante que ejecuta un procesador en una sección del código en concreto. Para obtenerla se hace la división de la cantidad operaciones en coma flotante por la cantidad de bytes que utiliza el algoritmo para ejecutarse.

¿Qué utilidad tiene? Pues el hecho que permite en ciertos campos de la informática donde hacen falta ordenadores muy potentes para tareas concretas poder tener el mejor sistema de hardware posible para ejecutar los algoritmos bajo las mejores condiciones. Este modelo es utilizado sobre todo en la computación científica. Aunque también sirve para optimizar el rendimiento en sistemas cerrados como son las consolas de videojuegos.

En el caso de hacer uso de una arquitectura de hardware altamente paralelizada se requiere una alta intensidad aritmética, es decir, un ratio bajo entre el ancho de banda y la capacidad de computación desde el momento en que ratio entre la capacidad de cálculo de dichos procesadores y el ancho de banda disponible en la memoria es alto. Dado que se requiere en muchas aplicaciones y en especial en gráficos que un cálculo se procese varias veces y por tanto se requiere una gran potencia computacional en comparación.

Rendimiento de los algoritmos y relación con la intensidad aritmética

Notación O Algoritmos

A la hora de escribir un algoritmo, los programadores tienen en cuenta el rendimiento de los algoritmos que escriben en sus programas, lo cual se mide con la notación Big O en el que mide la media de operaciones respecto a los datos. La notación Big O no se mide utilizando ningún benchmark, sino que los programadores los calculan a mano para tener una idea orientativa de la carga de trabajo de los programas

  • O(1): el algoritmo no depende del tamaño de los datos a procesar. Se considera que un algoritmo con un rendimiento O(1) tiene el rendimiento ideal y es inmejorable.
  • O(n): el tiempo de ejecución es directamente proporcional al tamaño de los datos, el rendimiento crece de manera lineal. También puede darse que un
  • O(log n): se da en algoritmos que suelen trocear y solventar un problema por parte, como son los algoritmos de ordenación de datos o las búsquedas binarias.
  • O(n log n): se trata de una evolución del anterior, se trata de dividir aún más la resolución de las diferentes partes.
  • O(n2): existen algoritmos que realizan varias iteraciones debido a que tienen que consultar los datos varias veces. Por lo que suelen ser algoritmos altamente repetitivos y tienen por tanto una carga computacional exponencial
  • O(n!): un algoritmo que siga esta complejidad es un algoritmo totalmente fallido en cuanto a rendimiento y hace falta su reescritura.

No todos los algoritmos pueden llegar al nivel de complejidad O(1), y algunos de ellos se ejecutan mucho mejor en un tipo de hardware que en otro. Es por ello que se están desarrollando en los últimos años aceleradores o procesadores de dominio específico que aceleran un tipo de algoritmos sobre otros. La idea general es la de dividir los algoritmos en partes y tratar cada una de ellas con la unidad de proceso más adecuada para su intensidad aritmética.

Ratio entre comunicación y computación

CPU RAM Placa PC

El caso inverso es el ratio entre comunicación y computación, el cual se mide de manera inversa a la intensidad aritmética y por tanto se consigue dividiendo la cantidad de bytes por la potencia en operaciones en coma flotante. Por lo que se utiliza para medir el ancho de banda que se requiere para ejecutar esa parte del código. El problema a la hora de medir viene con el hecho que los datos no se encuentran siempre en el mismo lugar y por tanto se utiliza el ancho de banda de la RAM como referencia.

Se ha de tener en cuenta que no se trata de una medida totalmente fiable, no solo por el hecho que el sistema de caches acerca los datos más al procesador, sino también por el hecho que existe el fenómeno de la latencia donde cada tipo de memoria RAM utilizado tienen sus diferentes ventajas y desventajas y pueden llegar a variar un resultado dependiendo del tipo de memoria utilizado.

A día de hoy a la hora de escoger la memoria en un sistema no solo se tiene en cuenta el ancho de banda, sino también el consumo energético, dado que el coste energético de mover los datos está superando el coste de procesarlos. Por lo que se están optando por ciertos tipos de memoria concretos en ciertas aplicaciones. Eso sí, siempre dentro de los costes asociados a la hora de construir un sistema y no son los mismos en un superordenador que en un PC doméstico.