¿Es posible construir una CPU a partir de una memoria direccionable por contenido?

0

Todos los lenguajes de programación modernos usan objetos y no estructuras / clases de estilo C / C ++. En C / C ++, cada miembro de datos tiene un tamaño, por lo que direccionar un miembro de estructura es básicamente una dirección de memoria + desplazamiento. Pero los lenguajes de script, como JavaScript y muchos otros, utilizan una ID de objeto que contiene pares clave / valor. Estos pares clave / valor también pueden ser un ID de objeto.

Por lo tanto, en la actualidad, la memoria del hardware se dirige con la dirección de la memoria + desplazamiento o la dirección de la memoria a una tabla de búsqueda donde se almacenan la clave / valor.

Una dirección de memoria puede contener datos o código ASM que es ejecutable por una CPU.

Entonces, ¿es posible construir un hardware que solo contenga memoria direccionable por contenido (CAM)?

Puedo imaginar lo siguiente:

Datos:

id: 23
  -key: 123, value: 7
  -key: 456, value: 8
  -key: 789, value: 0

Este es un esquema de un bloque de memoria direccionable de contenido. Este bloque se puede escribir con un código de operación SetValue (id, key, value) y se puede leer con un GetValue (id, key)

Mi idea es que si especifico un par de clave / valor para el bloque de memoria ejecutable tengo una CPU.

Si un bloque de memoria contiene pares de valores clave especiales, actuará como un código de operación. Por ejemplo, si contiene una clave que es < 100 de lo que es un opcode

id: 45
  -key: 12, value: 7  // key 12 opcode for add two data
  -key: 10, value: 8  // key 10 is arg1, value is a data
  -key: 11, value: 9  // key 11 is arg2, value is a data

En esta arquitectura, cada memoria bloquea un objeto y cada memoria bloquea una CPU mínima al mismo tiempo. ¿Crees que es posible construir un hardware así?

    

3 respuestas

1

Construir y usar grandes memorias direccionables por contenido es costoso y difícil. El diseño más común para una CAM es tener un número de celdas de memoria direccionables que comparan su contenido con un valor coincidente que se pasa, y si coinciden, activan un conjunto de celdas asociadas para producir una salida en un bus compartido. Esto significa dos cosas:

  • Además del valor de salida, necesitamos celdas de memoria para el contenido direccionable y lógica adicional para realizar la comparación entre ese contenido y el valor que se busca. Además, como no hay una ubicación predeterminada en la que se pueda almacenar cada valor, se requiere algún mecanismo de asignación de espacio para agregar nuevas entradas [1]. En conjunto, estos hacen que el tamaño de una CAM sea mucho más grande que el tamaño de una memoria tradicional que almacena la misma cantidad de datos.

  • Debido a que las unidades salen a un bus compartido, deben deben organizarse de modo que solo una a la vez pueda coincidir. Esto significa que antes de poder agregar un elemento a una CAM, primero se debe buscar en la CAM para asegurarse de que no entrará en conflicto con las entradas existentes. Si hay un conflicto, la entrada existente debe eliminarse antes de que se pueda agregar la nueva entrada. Si se requiere que los datos persistan indefinidamente (es decir, la CAM no se usa como caché, como ocurre con la mayoría de las aplicaciones actuales de los procesadores CAM), esto significa que el contenido direccionable siempre debe ser único; este requisito generalmente significa que el tamaño El contenido direccionable debe ser bastante grande, lo que aumenta el costo de la implementación.

También hay un proceso de desarrollo por el que es probable que las arquitecturas que funcionan de esta manera sigan siendo poco comunes en el futuro: una gran parte del trabajo de desarrollo de la CPU en estos días se realiza utilizando FPGA para ejecutar el procesador que se está diseñando. Los FPGA no suelen tener el tipo de arreglo de bus compartido con el que se implementan las CAM: para seleccionar entre varios valores de origen posibles, un FPGA usa multiplexores en su lugar, pero los árboles grandes de multiplexores son más lentos que un bus compartido de este tipo, por lo que los CAM grandes en los FPGA No suelen ser muy rápidos, lo que hace que el desarrollo de arquitecturas que los utilicen sea particularmente difícil.

Por estas razones, si bien es posible usar CAM para acelerar las aplicaciones que usan pequeñas cantidades de memoria, la construcción de una computadora moderna de uso general completa que las use para todo el almacenamiento parece ser injustificadamente difícil.

[1]: esto puede mitigarse un poco con el uso de CAM asociativas por conjuntos, pero eso solo es realmente útil para cachés, ya que hace que sea más probable que surjan conflictos que requieren que se elimine un elemento de la memoria cuando todavía es necesario, que es una compensación aceptable para un caché pero no para el tipo de uso que se propone aquí.

    
respondido por el Jules
4

Ciertamente, puedes construir uno de estos, y Wikipedia afirma que el MPP de Goodyear era tal cosa. No es del todo, pero tiene la mayoría de los elementos reales que realmente desearías.

Poner el código en CAM también le ofrece muchos inconvenientes sin obtener un beneficio real, por lo que lo almacenaría en una DRAM normal. Para fines prácticos, tendría un CAM periférico , como un acelerador de gráficos. Y no lo usarías para ejecutar Javascript normal; La ventaja de la velocidad para seleccionar uno de unas pocas docenas de miembros de objetos sería pequeña. Tiene sentido si quiere hacer la pregunta "¿cuál de estos millones de artículos tiene un valor X"?

    
respondido por el pjc50
3

De hecho, prácticamente todas las CPU modernas contienen memoria direccionable por contenido. Sin embargo, lo utilizan solo en áreas muy especializadas donde sus ventajas únicas tienen sentido y donde su costo relativamente alto puede ser tolerado.

La pregunta que responde una memoria estándar es: conocer la dirección de una ubicación de almacenamiento, ¿qué datos se almacenan allí?

La pregunta a la que responde una memoria direccionable por contenido es: conocer los datos almacenados en algún lugar de la memoria, ¿qué dirección (si corresponde) se refiere a ella?

El último es útil en cachés de datos y predictores de ramificación, cuando quiere saber si alguna de las (quizás 16) formas en un conjunto de caché particular está asignada a una dirección particular; en este caso, la dirección es la información almacenada en la CAM, también conocida como "tag RAM" en los viejos tiempos. Los datos reales almacenados en el caché están en SRAM normal.

    
respondido por el Chromatix

Lea otras preguntas en las etiquetas