Entonces, esto no es para una aplicación de hardware, pero sigo pensando que será extremadamente relevante para aquellos que son diseñadores de chips / entusiastas de EE.
Estoy intentando hacer un análisis sobre la multiplicación vista como una función booleana. Para esto quiero construir una función booleana de dos vectores \ $ X, Y \ $ cada uno de longitud 2048. Por supuesto, una representación simbólica de esta función corresponde a un circuito real, así que implícitamente, lo que quiero hacer es construir lo más pequeño posible. circuito (es decir, el menor número de puertas seguidas por la menor profundidad) para multiplicar dos números de 2048 bits y almacenar el resultado en un archivo de texto (utilizando And y NOT y Or)
Ahora con esto viene un par de partes:
-
Elección del algoritmo: Estoy pensando en construir el circuito implementando El algoritmo de Karatsuba sería una buena idea ( es 2048 bits lo suficientemente grande como para justificar ¿Toom-Cook ? Sé que es definitivamente demasiado pequeño para < a href="https://en.wikipedia.org/wiki/Sch%C3%B6nhage%E2%80%93Strassen_algorithm"> Técnicas de transformación de Fourier de Strassen ).
-
Al cambiar de algoritmo, debería existir algún valor N, para el cual la multiplicación de los números de N dígitos es más rápida a través de la multiplicación tradicional del estilo de la escuela primaria, que aumentar mis costos al implementar los multiplicadores del estilo Karatsuba en ese nivel.
-
Una vez que haya construido el algoritmo, ¿cuál es la mejor manera de representarlo simbólicamente en un archivo de texto? Mi instinto es hackear esto con un largo guión, pero quizás conozca algunas herramientas que le permiten generar circuitos de manera abstracta y escribir los resultados que serían más rápidos para mí convertir a mis formas deseadas que intentar reinventar la rueda python.