Si ya antes del advenimiento de lo que comienza a denominarse "quinta generación" de ordenadores era patente la crisis del software, es decir, la imposibilidad de avanzar al mismo ritmo en la programación de la máquina digital y en su construcción física, es previsible que con la tecnología VLSI esa crisis se agrande. Nuestro compañero , que lleva más de cuatro años trabajando en Alemania en un Proyecto de Investigación sobre "Programación asistida por el Ordenador y guiada por la intuición" (traducción directa) y que dará un curso de Postgraduados del Colegio y la Asociación sobre tecnología VLSI dentro de unos meses, comenta las interrelaciones entre la tecnología y la programación y su incidencia en el diseño de los ordenadores. Arquitectura V.L.S.I. ué se puede hacer con un millón de transistores integrados en un chip? Ciertamente el número de posibles aplicaciones no es pequeño. Se pueden encontrar múltiples ejemplos en los campos de procesamiento de señal o de datos. Aplicaciones no faltan. El mayor problema consiste en el diseño estructurado de este tipo de sistemas, esto es, en el paso disciplinado de la especificación del sistema a la descripción detallada de su implementación. La complejidad potencial de los ci rcu itos V LS I ("Very Large Scale Integration") es tan grande que su diseño se nos escapa de las manos (véase figura 1). ¿Cómo se puede entonces aprovechar al máximo el avance tecnológico tan extraordinario que supone VLSI? Este es un problema que preocupa desde hace tiempo a algunos investigadores en el campo de la electrónica y la informática. Fijemos nuestra atención en concreto en los ordenadores. LOS ORDENADORES DEL PASADO La arquitectura de la mayor parte de los ordenadores ex istentes está basada en las ideas que se desarrollaron en los años GUarenta. Uno de los pioneros en este Gampo fue John van Neumann. En el T1omento en que surgieron estas ideas IJxistía una tecnología determinada y se :;olían diseñar los circuitos digitales de acuerdo con .una cierta teoría. Con este "undamento, lo único que se hizo (y con Hilo no queremos quitarle importancia a este gran logro) fue contruir un circuito más, pero cuyo comportamiento concre"0 dependía del estado de ciertos biestables (es decir, del contenido de la memoria, o sea, del programa). Este fundamen1:0 por tanto condicionó en extremo grado el tipo de arquitectura diseñado. Lo.s ordenadores digitales de programa almacenado resultantes fueron pro!Jramadosal principio en lenguaje máqui nao Más adelante se desarrollaron a partir de estos lenguajes los llamados lenguajes de alto nivel. Por tanto tenemos para los ordenadores convencionales un conjunto de técnicas y teorías en consonancia: - La tecnología de válvulas y posteriormente la de componentes discretos de estado sólido. - La teoría de circuitos síncronos, O sea, de circuitos gobernados por un reloj que controla todas las acciones. - La llamada arquitectura de von Neumann, es deci r, la que consta básicamente de . Una memoria central: una estructura lineal de celdas de longitud fija que contienen tanto instruccio nes como datos (sin distinción explícita). . Una unidad aritmético-lógica: un conjunto de circuitos capaces de realizar operaciones elementales con palabras binarias. . Una unidad de control secuencial con un contador de programa, que manda a la unidad aritmético-lógica la ejecución de la instrucción contenida en la celda de memoria direccionada por el contador de programa. - Los lenguajes procedurales, es decir, aquellos que utilizan variables, asignación de valores a ellas, lazos, procedimientos con efectos laterales, etc. (por ejemplo, FO RTRAN, ALGO L 60,...). Las áreas citadas contienen algunos elementos que se corresponden directamente. Así las variables d8 los lenguajes de programación procedurales se corresponden con las celdas de memoria. Los programas procedurales son de naturaleza secuencial, porque lo es también la arquitectura de van Neumann. Ahora bien, los campos mencionados han evolucionado independientemente. Actualmente contamos con una tecnología distinta de la que se utilizaba hace más de treinta años para construir los circuitos. Esta tecnología impone además un estilo determinado de diseño de los circuitos. Por otra parte existen actualmente lenguajes de programación que permiten expresar algoritmos de forma más precisa y cómoda. Esto exige buscar otro tipo de arquitectura que armonice con el estado del arte en tecnología, teoría de circuitos y lenguajes de programación (véase figura 2). Analicemos los distintos puntos por separado. TECNOLOGIA Ya hemos mencionado la tecnología previsible para un futuro próximo: VLSI, es decir, del orden de 105 y más transistores integrados en un chip. Esto no sólo supon"e un cambio cuantitativo, sino también un salto cualitativo. Al diseñar circuitos con elementos discretos o integrados a pequeña o mediana escala se trataba de minimizar el número de componentes básicos (transis"tores, puertas lógicas, componentes MSI ("Medium Scale Integration"), etc. según la escala de integración), ya que estos eran los elementos más caros, que ocupaban más espacio, consumían más potencia, disipaban más calor e introducían más retardo. Así surgieron, por ejemplo, las técnicas de minimización de Karnaugh-Veitch, Quine-McCluskey, etc. El cableado, es decir, la interconexión de los componentes, era en principio un problema de importancia secundaria. Si los circuitos eran muy complejos, el cableado iba ya siendo más importante. El ordenador CRA Y-l, uno de los más rápidos (es capaz de efectuar 250 millones de operaciones de coma flotante por segundo durante períodos cortos), está realizado en SSI ("Small Scale Integration") y tiene 300.000 cables de conexión. Dos de los factores que posibilitaron su construcción son su estudiada estructura de cableado y su sistema de refriqeración (RUSSELL, 1978). Con VLSI se invierten los papeles respecto al caso de circuitos con elementos discretos. Ahora son los caminos de conexión en el chip los que consumen más potencia, producen más calor, introducen más retardo, ocupan más espacio y son por tanto los elementos más caros (SUTHERLAND & MEAD, 1977). Un transistor en tecnología nMOS (Metal-Oxido-Semiconductor, canal n) es simplemente el cruce de dos de estos caminos: un camino de difusión y otro de silicio polic:ristalino (p. ej.). Las resistencias de carga se reem plazan en esta tecnología usualmente por tansistores "pullup" en deplexión y los condensadores, si son de pequeñas capacidades, se pueden realizar con transistores en los que se ha unido fuente y drenador. Esto quiere decir que prácticamente tenemos como único componente el transistor, que como hemos dicho no es otra cosa que el cruce de dos caminos. Por lo tanto, el diseño de un circuito VLSI es, simplificando mucho, la definición de un entramado de diversos caminos, de manera que haya ciertos cruces tales que se realice la función deseada, y que los recorridos entre estos cruces sean tales que se obtengan las caracter ísticas deseadas en cuanto a superficie ocupada, retardo introducido, potencia consumida, etc. TEORIA DE CIRCUITOS El aumento del grado de integración y del tamaño de los chips trae consigo, además de un potencial aumento de la complejidad del circuito, el que las señales tarden más en propagarse dentro del chip. Esto se debe principalmente a la mayor resistividad de las conexiones que se obtiene al aumentar el grado de integración (SElTZ, 1979). Esta circunstancia obligaría a aumentar excesivamente el período de reloj en un circuito síncrono y por consiguiente a hacer que las partes combinacionales trabajaran ineficientemente. Estas obtendrían el resultado muy rápidamente y estarían esperando la mayor parte del tiempo a la finalización del período de reloj para hacer un nuevo cálculo. Por otra parte, si se utilizaran varios relojes para distintas zonas del chip, habría que sincronizarlos entre sí, lo cual introduce otro tipo de problemas (MEAD & CONWAY, 1981). Por estos motivos se han buscado otras disciplinas más adecuadas para VLSI. Los circuitos "self-timed" parecen ser particularmente apropiados para esta tecnología. Un sistema "self-timed" consta de elementos, los cuales pueden ser circuitos síncronos o asíncronos, o de varios subsistemas "self-timed". Un elemento "self-timed" es inicial izado por ciertas señales a la entrada e indica por medio de otras señales a la salida cuando ha finalizado su computación. De esta manera es la interconexión de los distintos elementos la que determina la secuencia de operaciones a realizar, mientras que el tiempo de ejecución depende del retardo introducido por los elementos y las conexiones. Por eso en general los circuitos "self-timed" son más rápidos que los síncronos, aunque ocupan más superficie en el chip. LENGUAJES DE PROGRAMACION Como hemos mencionado antes, los lenguajes de programación surgieron a partir del hardware y por eso eran muy cercanos a la máquina de von Neumann. De ah í que muchos lenguajes sean procedu rales. Posteriormente se han disAñado otros tipos de lenguajes basados en formalismos matemáticos, para así con una mayor formalización poder demostrar más fácilmente ciertas propiedades de los programas, tales como la equivalencia de dos programas o la correcta iJT1plementación de una especificación dada. Uno de estos formalismos es el cálculo lambda de Church, una teoría para representar funci ones matemáticas. Entre otras se pueden expresar funciones recursivas, es decir, aquellas que aparecen en su propia definición. Los lenguajes basados en este formalismo tienen gran capacidad de expresión. Con ellos se pueden formular de modo más sencillo cierto tipo de algoritmos de estructura comllleja. LlSP (lenguaje para el Procesamiento de LIStas) esunó de estos lenguajes aplicativos inspirados en el cálculo lambda. En este lenguaje se pueden definir, por ejemplo, funciones que tienen otras funciones como argumento y producen como resultado otra función. ALGO L 68 y PASCAL tienen algunos elementos procedurales y otros aplicativos. Los lenguajes lógicos, tales como el PROLOG (KOWALSKI, 1979), utilizan como sentencias un tipo determinado de fórmulas lógicas, las llamadas cláusulas de Horn. Tienen la forma ¿Hacia dónde dirigirse? Un programa lógico es pues una colección de cláusulas de Horn. Se interpreta utilizando unificación y "backtracking". Estos programas pueden entenderse como la especificación de un problema; sin embargo, son ejecutables directamente. Los lenguajes de flujo de datos (DATA FLOW, 1982) están íntimamente ligados a una arquitectura determinada, por lo que hablaremos de ellos más adelante. ARo.UITECTURA Hemos visto que en el pasado un determinado tipo de tecnología (esencialmente de elementos discretos de estado sólido) llevó a una determinada teoría de circuitos (como los circuitos asíncronos tienen a veces los problemas de carreras y "hazards", se optó por diseñar la mayoría de los sistemas como circuitos síncronos). Los circuitos de alguna complejidad constaban de una parte de control y otra de procesamiento. El paso de estos circuitos complejos al ordenador de von Neumann consistió en dividir la parte de control en dos: una fija y otra variable en la que se podían poner unas condiciones iniciales (la memoria). Esta idea se volvió a utilizar en repetidas ocasiones dando así lugar a los ordenadores microprogramados y a los ordenadores con dos niveles de microprogramación. La memoria está unida al procesador por medio de un conducto capaz detransportar una sola palabra binaria. Así se puede entender la ejecución de un programa como la modificación del contenido de la memoria por medio del paso de datos a través de ese conducto. Backus ha llamado a este tubo de unión "cuello de botella de von Neumann" (BACKUS, 1978), porque restringe la capacidad de comunicación entre el procesador y la memoria. Este modo de actuar ("cada vez una palabra") se vuelve a encontrar en los lenguajes procedurales y de alguna manera se ha convertido en una forma de pensar al escri bi r programas. A partir del concepto de máquina de van Neumann original se han desarollado algunas variantes con varias unidades aritmético-lógicas y/o varias unidades de control. Así surgieron los ordenadores SIMD ("Single Instruction stream, Multipie Data stream"), en los que una misma instrucción actúa simultáneamente sobre varios operandos (este tipo de ordenador es muy útil para aplicaciones en las que se trabaja con vectores) y los MIMO ("Multiple Instruction stream, Multiple Data stream") o sistemas multiprocesadores. Sin embargo estas familias de computadores siguen siendo convencionales, están basadas esencialmente en el paradigma de von Neumann. Por ello se han diseñado (y en parte construido) máquinas basadas en otros paradigmas, generalmente provenientes de los lenguajes de programación (TRELEAVEN et al., 1982). Entre ellas están las máquinas de reducción (BERKLING, 1974; MAGO, 1980) y las máqu inas de flujo de datos (DATA FLOW, 1982). Las máqúinas de reducción ejecutan directamente programas aplicativos. Su funcionamiento consiste en la realización de continuas reducciones sobre el texto del programa hasta hacerlo irreducible. Una reducción es la sustitución de una 3xpresión por otra más sencilla. Para los lenguajes de flujo de datos ,e han diseñado las máquinas del mismo 10mbre. Una instrucción está lista para ;er ejecutada tan pronto estén disponibles todos los datos que necesita. El que ;e ejecute o no depende del hecho de que laya unidades aritmético-lógicas libres. Este paradigma proporciona un paralelisT10 impl ícito, es decir, uno que no nece;ita ser programado expl ícitamente. Estas arquitecturas son importantes porque son un primer intento de apartar,e de la arquitectura de von Neumann. Con toda seguridad aparecerán en el futuro otras arquitecturas no convencionaes que se adapten bien a VLSI, sistemas "self-timed", lenguajes aplicativos ofun~ionales, etc. Un ejemplo de estos esfuerzos por encontrar un nuevo concepto de máquina es el proyecto "Fifth Generation Computer System", que se está llevando a cabo en el Japón. Se trata de un proyecto que empezó en Abril de 1982, después de varios años de preparación, y que cuenta con un presupuesto de 40.000 millones de pesetas para los próximos diez años, duración total del proyecto. Su objetivo es ampliar el mercado de los sistemas informáticos y revisar y reorganizar totalmente el campo de la informática (1 COT, 1982). En la práctica esto se traduce en la búsqueda de un nuevo concepto de ordenador. Las cuatro primeras generaciones de ordenadores utilizaron válvulas, transistores y circuitos integrados a pequeña y m e d i a n a escala, respectivamente. La quinta ha de estar basada en VLSI, pero deberá ser no convencional en su arquitectura. Si comparamos la arquitectura concebida por los japoneses con la de van Neumann, podemos decir que en vez de la memoria tiene un sistema experto con bases de conocimiento, en lugar del procesador tiene un sistema de resolución de problemas e inferencia y que sustituye las primitivas unidades de entrada/ salida de los ordenadores convencionales por una interfase inteligente. Un sistema experto con bases de conocimiento es un sistema que contiene todo el conocimiento sobre determinados temas. Su desarrollo corresponde al campo de la inteligencia artificial. La máquina de resulución de problemas e inferencia estará basada en el paradigma de flujo de datos y utilizará un lenguaje lógiCD para su programación incorporando tipos abstractos de datos (BAU ER & WOSSNER, 1982). La interfase inteligente se desea que sea capaz de entrar en comunicación con el operador con lenguaje natural, voz, gráficos e imágenes. Aunque ya al principio parece que algunas de las hipótesis y tesis del proyecto no son del todo correctas, no cabe duda que puede tener interesantes resultados (TRELEAVEN & GOUVEIA LIMA, 1982). Europa y Estados Unidos están preguntándose cómo responder a este proyecto. BIBLlOGRAFIA BAUER & WQSSNER, 1982 Friedrich L. Bauer, Hans Wossner. "Algorithm ic Language and Program Dev"lopment" Springer; Berlin. Heidelberg, New York, 1982. BACKUS, 1978 John Backus: "Can Programming Be Liberated from the von Neumann Style? A Functional Style and Its Algebra of Programs" Communications of the ACM, vol. 21, núm. BERKLING,1974 Klaus J. Berkling: "Reduction Languages for Reduction Mach i nes" 2nd Annual Symposium on Computer Ar. chitecture, ACM-Sigarch Computer Architecture News, vol. 3, núm. 4, Diciembre 1974, págs. 133-140. DATA FLOW. 1982 Varios artículos sobre flujo de datos, IEEE Computer Magazine. Febrero 1982. ICOT,1982 "Outline of Research and Development Plans for Fifth Generation Computer SyStems" I nstitute for New Generation Computer Technology (ICOT), Japan Information Processing Development Center, Mayo 1982. KOWALSKI,1979 Robert Kowalski: "Logic for Problem Solving" Elsevier North Holland; New York, Oxford; 1979. MAGO, 1980 Gyula A. Magó: "A Cellular Computer Architecture for Functional Programming" Compcon Spring 1980, pá>Js. 179-185. MEAD & CONWAY, 1980 Carver Mead. Lynn Conway: "Introduction to VLSI Systems" Addison-Wesley Reading 1980. MOORE,1979 Gordon Moore: "V LSI: some fundamental challenges" I E E E Spectrum, Abril 1979, págs. 30-37. RUSSELL,1978 Richard M. Russell: "The CRAY-1 Computer System" Communications of the ACM. vol. 21, núm. 1, Enero 1978, págs. 63.72. SE ITZ, 1979 Charles L. Seitz: "Self-Timed VLSI Systems" Caltech Conference on V LSI. Enero 1979, págs. 345-355. SUTHER LAND & MEAD Ivan E. Sutherland, Carver A. Mead: "Microelectronic and Computer Science" Scientific American, vol. 237. núm. 3, Septiembre 1977. págs. 210-228. TRELEAVEN & GOUVEIA LIMA. 1982 Philip C. Treleaven, Isabel Gouveia Lima: "Japan"s" Fifth Generation Computer SyStems" IEEE Computer Magazine, Agosto 1982. págs. 79-88. TRELEAVEN et al., 1982 Philip C. Treleaven, David R. Brownbridge, Ríchard P. Hopkins: "Data-Driven and Demand-Driven Computer Architecture" Computing Surveys, vol. 14, núm. 1, Marzo 1982, págs. 93-143.