¿Sería práctico construir un chip que pueda hacer esta matemática?

-2

Estaba teorizando un nuevo tipo de número de 64 bits para usar en el almacenamiento de datos, pero luego comencé a preguntarme si podría ser práctico si se creara en hardware. (Creo que sería demasiado lento si solo el software pudiera interpretarlo).

Codificación

  

Bits 0-7: a (entero con signo de 8 bits)

     

Bits 8-15: b (entero con signo de 8 bits)

     

Bits 16-39: c (punto flotante con signo de 24 bits: signo 1b, exponente 7b, mantisa 16b)

     

Bits 40-64: d (punto flotante sin signo de 24 bits: 8b exponente, 16b mantisa)

     

Fórmula: a^b+cd

Tenga en cuenta que I he preguntado a StackOverflow cómo deben codificarse los dos números de punto flotante de 24 bits y el valor mínimo de estos.

Justificación

Usando esto, Wolfram | Alpha dice que el número positivo más pequeño que no sea cero es aproximadamente la proporción de 3 longitudes planck a 1 kilómetro y la el número positivo más grande es increíblemente más grande que el número de átomos en una bola de carbono del tamaño de nuestro universo conocido

Problema

Ignoremos, solo para esta pregunta, el hecho de que probablemente haya enormes brechas en los números posibles.

Descifrar esto es trivial. Podemos construir fácilmente una ALU que puede elevar un número de 8 bits a la potencia de otro, y luego agregarlo al producto de un número de punto flotante de 24 bits a otro. El problema viene en la codificación. No tengo idea de qué algoritmo podría descubrir la mejor manera de codificar 12,345,678,901,234,567,890,123,456,789,012,345,678,901,234,567,890.98765432109876543210987654321 , a pesar de que es un número perfectamente razonable para que este formato lo represente. Aún así, sé que cualquier algoritmo es mejor para esto, sería más rápido en hardware que en software (duh). Mi pregunta aquí es si este algoritmo se construiría prácticamente en una oblea de silicio, o sería demasiado complejo, ¿requeriría demasiada memoria, etc.?

Además, soy muy nuevo en este tipo de pregunta. Si me puede ayudar a redactarlo, le estaré muy agradecido

    
pregunta Supuhstar

1 respuesta

1

Con respecto a si es práctico construir un chip personalizado (ASIC):

La respuesta corta es 'no', a menos que primero logres hacer un prototipo de tu diseño en un FPGA.

El esquema de codificación que indicas, suena como una búsqueda de una combinación de los cuatro campos que da el menor error para que se codifique una constante determinada. En principio esta búsqueda se puede hacer en paralelo. Podría implementar esto en software o hardware.

En el software, puede utilizar técnicas de codificación de programas de subprocesos múltiples y ejecutar el software en una CPU moderna de varios núcleos o en una GPU. Un hilo maestro dividiría el rango de búsqueda entre los hilos de trabajo y coordinaría los resultados.

En hardware, podría usar una serie de módulos de codificador (que tendrá que diseñar) con el rango de búsqueda dividido entre los codificadores y algún otro hardware para coordinar los resultados.

No tengo idea de si el software o el hardware funcionaría mejor en este caso particular, ya que no me queda muy claro qué debe hacer el diseño del hardware del codificador real. Pero sea cual sea la ruta que elija, sospecho que la escalabilidad y la paralelización serán claves.

Como cuestión práctica, primero pruebe un codificador de prueba de concepto en una placa FPGA. Luego, puede evaluar su desempeño con solo el costo de una placa FPGA. (Xilinx y Altera tienen versons libres de sus herramientas de diseño). Transferencia de un diseño Verilog / VHDL operativo de FPGA a un ASIC de silicio se convierte en una pregunta mucho más práctica.

Si realmente está preparado para construir hardware, y quiere ir más allá de un prototipo FPGA a un Circuito Integrado Específico a la Aplicación, esta pregunta clásica explica con más detalle qué es lo que realmente involucra la creación de un ASIC y por qué el costo de desarrollo es tan alto. ¿Cómo se fabrican los circuitos integrados?

Dicho esto ... no puedes simplemente lanzar una vaga idea sobre la pared y esperar que se resuelva mágicamente "en silicio". Hasta que no tenga un mejor control sobre el problema de cómo codificar realmente los valores, realmente no tiene un diseño práctico para implementar ni en software ni en hardware. Entonces, lo mejor que puede hacer es tomar cualquiera de las herramientas con las que esté más familiarizado, ya sea C o Java o Verilog o VHDL, y comenzar a trabajar en el problema de codificación. Tal vez comience con una versión reducida de su codificación, aún con cuatro campos pero menos bits, lo que limita el espacio de búsqueda y mejora las posibilidades de encontrar un método de codificación que termine (tenga éxito) en un período de tiempo razonable.

P.S. Respecto al propio esquema de codificación de números:

Para eliminar un formato de número establecido de punto flotante establecido, como IEEE-754, el nuevo formato debe demostrar un rendimiento mejorado en gran medida, no solo un rango dinámico extendido, sino también una reducción del "error de máquina" (error de redondeo) mejor que 10 ^ -16 en toda la gama.

También está la cuestión de si es posible realizar cualquier tipo de operaciones aritméticas con este formato directamente, o si este formato solo es bueno para almacenar un número preciso en 64 bits. No veo el valor de un formato que solo me permite almacenar un número, pero no hacer pruebas de comparación o incluso aritmética simple. Si tengo que usar IEEE-754 para hacer algo con el número, podría perder los beneficios supuestos del nuevo formato (precisión o rango dinámico) cuando se desempaqueta el número. Por lo tanto, sin el soporte nativo de las bibliotecas de matemáticas, sigo siendo escéptico.

    
respondido por el MarkU

Lea otras preguntas en las etiquetas