Creo que es mucho más interesante que las clases de complejidad del circuito utilizadas por la teoría de la complejidad CS hagan predicciones diferentes y utilicen métricas diferentes a las de la comunidad VLSI. De la complejidad VLSI de las funciones booleanas :
Es bien sabido que todas las funciones booleanas de variables pueden calcularse mediante un circuito lógico con puertas O ( 2 n / n ) (teorema de Lupanov) y que existen funciones booleanas de n variables que requieren circuitos lógicos de este tamaño (Shannon teorema). Presentamos los resultados correspondientes para funciones booleanas calculadas por circuitos VLSI, utilizando el modelo de Thompson de un chip VLSI. Probamos que todas las funciones booleanas de n variables pueden calcularse mediante un circuito VLSI de área O ( 2 n ) y período 1, y demostramos que existen funciones booleanas de nnO(2n/n)nO(2n)nvariables para las cuales cada chip VLSI (convexo) debe tener un área de .Ω(2n)
Curiosamente, la complejidad del circuito VLSI tiene una tendencia a tratar la profundidad como "irrelevante", ya que hay una y solo una "profundidad" que importa: la ruta crítica. Para los propósitos más prácticos, un circuito arbitrariamente complejo puede ser tratado como con una latencia de n .O(1)n
De hecho, ni siquiera estoy seguro de que el concepto de / N L o g T i m e se traduzca directamente en la complejidad del circuito VLSI. Incluso el resultado de Shannons 2 n / n no se traduce fácilmente: los resultados de Shannons son válidos solo para una base booleana que consiste en aridad ≤ 2 {AND, OR, NOT}. Esta no es la única base, y el número de "puertas" necesarias disminuye drásticamente a medida que permite más y más tipos de puertas. Los siguientes son a r e a 2DLogTimeNLogTime2n/n≤2area2 de una biblioteca de células estándar comercial VLSI normalizada al tamaño de una puerta NAND de 2 entradas:
2 3 4 <- Arity
y 1.14 1.28 1.41
nand 1.00 1.14 1.28
o 1.14 1.41 1.41
ni 1.00 1.14 1.41
xor 1.62 2.44
xnor 1.62 2.44
buf 1.14
inv 0.80
aoi22 1.28
aoi222 1.62
aoi33 1.62
oai22 1.41
oai222 1.72
oai33 1.62
addf 2.64
Específicamente, observe las aoi
/ oai
puertas que son And Or Invert
/ que Or And Invert
consisten en una primera función del tamaño de arity que alimenta la segunda función, donde el número de puertas de primera función es igual al número de veces que aparece arity . Por ejemplo, representa "Dos 2 entradas Y puertas que alimentan una puerta NOR".aoi22
Mi punto es: Tomado por separado, oai222
se puede construir una función usando tres compuertas OR de 2 entradas y una compuerta NAND de 3 entradas, para un área total de ~ 4.56, sin incluir ningún área utilizada para la interconexión. Sin embargo, esta primitiva se puede realizar en un área de solo 1.72, lo que significa que una manifestación discreta de la misma función booleana consume 2.65 veces más área.
También tenga en cuenta que el área para una puerta input {AND, NAND, OR, NOR, XOR, XNOR}, donde n ≥ 2 , es mucho menor que el área que tomaría construir la misma función usando puertas de entrada discretas 2. También tenga en cuenta que si bien el área dada para {XOR, XNOR} para este proceso es "grande" en relación con las otras puertas, hay otras formas de construir las mismas n puertas de entrada usando menos área.nn≥2n
Las propiedades de propagación para las primitivas más complejas también son significativamente mejores que las que se obtendrían utilizando puertas discretas.
PNP
P≠NPNPf:{0,1}n→{0,1}f2n/nNP.
f:{0,1}n→{0,1}NP{0,1}n2n/nnnNPNP2n/n
Sobre la complejidad de las implementaciones de VLSI y las representaciones gráficas de las funciones booleanas con aplicación a la multiplicación entera , la predicción de la complejidad del circuito utilizando un modelo OBDD sobreestima la complejidad real del circuito:
AT2=Ω(n2)Ω(cn)c<1AT2=O(n1+c)
n2n−1i−12n−i−11≤i≤nAT2=Ω(i2)Ω(1.09i)