¿Cuáles son algunos de los problemas de investigación más difíciles en la arquitectura de computadoras ahora?

No sé sobre ‘más difícil’, pero aquí hay algunos problemas importantes en los que se está trabajando en este momento:

  • GPGPU: las GPU pueden ser muy rápidas con el ajuste y la selección de algoritmos correctos, pero son extremadamente frágiles y difíciles de programar. Además, solo ciertas clases de algoritmos funcionan de manera eficiente: la sincronización, la divergencia del flujo de control y los patrones de acceso a la memoria son muy importantes. ¿Cuáles son algunas optimizaciones arquitectónicas que se pueden hacer para mejorar esto? ¿Agrega un grupo de estructuras especializadas, cada una de las cuales se utiliza para diferentes conjuntos de aplicaciones, o realiza optimizaciones de uso general? ¿Cuál es el punto de equilibrio correcto, si lo hay, entre hacer que las GPU sean eficientes y hacerlas fáciles de programar?
  • Multinúcleo heterogéneo: los arquitectos y diseñadores ya están sobrecargados de trabajo, y la Ley de Moore, que establece que el transistor cuenta el doble cada 18 meses, significa que necesitan encontrar algo que ver con esos transistores. Actualmente, el plan en la industria es gastar una cantidad increíble de energía optimizando el diseño de un procesador, y cortar y pegar un montón de esos en un solo chip. Sin embargo, se ha demostrado que el diseño de varios procesadores optimizados para diferentes puntos y la elección de cuándo usarlos de manera efectiva tienen un mayor rendimiento y una mayor eficiencia energética. ¿Cómo se hace esto mientras se mantiene constante el esfuerzo de ingeniería? ¿Cuáles son los puntos correctos para optimizar? ¿Cómo eliges cuándo usar qué núcleo? ¿Con qué frecuencia cambias entre núcleos?
  • Aceleradores dedicados: el moderno SoC (System on Chip) ya tiene muchos dispositivos de acelerador dedicados que solo se activan en momentos específicos, por ejemplo, DSP, códecs de video / audio, etc. ¿Qué pasa con aceleradores aún más especializados, por ejemplo, un acelerador que acelera su web? navegación o un acelerador para Angry Birds? ¿Cómo sería ese acelerador? ¿Cuántos aceleradores tienes? ¿Cuál es el punto correcto para optimizar: nivel de perfil, nivel de aplicación, nivel de secuencia de instrucciones? ¿Qué pasa si Angry Birds se actualiza a v2.0, todavía puede usar el acelerador? ¿Qué pasa si ya nadie juega a Angry Birds? El diseño arquitectónico lleva muchos años, ¿cómo puede predecir qué aplicaciones acelerar? ¿Cómo se hace todo esto mientras se mantiene bajo el esfuerzo de ingeniería?
  • Computación aproximada: esta es una de las modas actuales más populares. Algunas aplicaciones (principalmente en multimedia) no se preocupan por la precisión perfecta: realmente no se puede ver la diferencia entre un # 204feb sombreado de píxeles frente a un # 204fea. Además, algunas clases de aplicaciones, a saber, la heurística, ni siquiera tienen respuestas “correctas” en primer lugar, ¡fueron aproximaciones para empezar! Por ejemplo, al entrenar una red neuronal de hardware, puede intercambiar un poco de precisión al tiempo que mejora significativamente la eficiencia energética. Sin embargo, hay muchos problemas con esto. El hecho de que su acelerador aproximado funcione bien en las entradas A, B y C no significa que funcione bien en la entrada D, especialmente si la entrada D ni siquiera existía antes del lanzamiento del producto. ¿Cómo teóricamente garantizas la calidad del servicio? ¿Es posible una prueba de QoS con cosas como las redes neuronales? ¿Qué tipo de aplicaciones puedes acelerar? ¿Dónde trazas la línea para “suficientemente bueno”? ¿Tiene un acelerador de “computación aproximada” de talla única o tiene múltiples aceleradores diseñados para múltiples aplicaciones? ¿Deberían estos aceleradores informáticos aproximados ser reparados o adaptarse en tiempo de ejecución?

Dan ha dado muy buenas respuestas. Me gustaría contribuir desde mi propia comprensión y experiencia.

  • Rendimiento del sistema de memoria : una de las principales áreas de cuellos de botella en la arquitectura de computadoras sigue siendo el sistema de memoria. No importa cuántos subprocesos de hardware (unidades funcionales, contexto de registro, etc.) o etapas de canalización que agregue a la parte computacional del sistema, el sistema general no puede calcular más rápido que la velocidad a la que el sistema de memoria puede suministrar datos (enlazado a la memoria). El problema gira principalmente en las cuatro áreas: arquitectura del sistema de memoria, compilación, algoritmo de aplicación, tecnología de memoria. Las jerarquías de memoria más profundas, la captación previa, la ocultación de la latencia de la memoria al cambiar entre hilos de hardware, las memorias de bloc de notas programables en chip programables, la creación manual / automática de patrones de acceso a la memoria en el software con precisión, etc. lineal o cuadrático en complejidad de tiempo, terminan funcionando muy mal en Multinúcleo o GPU debido a la falta de coincidencia entre la velocidad de cálculo y la velocidad de la memoria. La cantidad de memoria rápida como el archivo de registro (SRAM) y la memoria caché / scratch-pad que se puede colocar en un chip está limitada por el tamaño del chip y el costo general, por lo que nunca hay suficiente memoria rápida en el chip para almacenar todos los datos requeridos y entonces los datos terminan siendo almacenados / accedidos desde una DRAM relativamente más lenta. Además, algunos algoritmos (algoritmos de gráficos de ejemplo) simplemente no siguen ningún patrón transversal de memoria fija, lo que dificulta al hardware predecir o fusionar el acceso simultáneo a la memoria.
  • Aceleradores reconfigurables : idealmente, cada algoritmo puede ejecutarse rápidamente si un circuito dedicado o ISA está cuidadosamente diseñado para ese algoritmo particular o dominio de aplicación. En cualquier momento, un humano en tiempo real puede usar muy pocas aplicaciones. ¿Qué pasaría si para cada aplicación de este tipo se incluye un circuito dedicado junto con esa aplicación y se quema el circuito en un chip similar a FPGA en tiempo real al iniciar la aplicación? Además, dependiendo de la forma en que el usuario usa la aplicación, el sistema aprende de los patrones de acceso a datos del usuario y para la próxima vez crea o usa un circuito más eficiente para esa aplicación (esto es similar a la forma en que funciona el cerebro: puede (re) crear o cambiar circuitos cerebrales basados ​​en las señales de entrada). El sistema mantiene un repositorio de dichos circuitos de aplicación optimizados. Yo llamaría a este concepto como hardware compilado / optimizado JIT (justo a tiempo).
  • Usando ideas de Neuroscience : Brain es la pieza más sorprendente del sistema de hardware y software y el próximo gran avance en el diseño de la arquitectura de computadoras (al final de la ley de Moore) solo puede provenir de Neuroscience. Hay mucha investigación en curso para comprender qué, por qué y cómo del cerebro y para crear nuevas arquitecturas de circuitos de computación que emulen el funcionamiento y la eficiencia del cerebro. los

Comunicación / sincronización. Realmente no somos muy buenos en esto, especialmente en escalarlo. Por ejemplo, puede pensar en los cachés como una forma de mejorar la latencia dramática larga, lo cual es cierto, aunque en cierta medida, las latencias largas también se pueden tolerar cuando hay suficiente concurrencia. (Las GPU pueden considerarse un ejemplo de esto; de lo contrario, son simplemente procesadores vectoriales muy aburridos). Pero los cachés también son increíblemente importantes como mecanismo de comunicación / sincronización: la memoria compartida y el bloqueo aprovechan los protocolos de coherencia de caché acelerados por hardware del chip .

Podríamos, en principio, exponer ISA y el soporte de hardware para la sincronización más allá de las cosas actuales más bien primitivas basadas en pedidos ld / st. Esto incluso podría extenderse de manera más ambiciosa a través de grandes conjuntos de procesadores (no solo los enchufes habituales de 2-4). Imagine, por ejemplo, si tiene una unidad de tipo dimm que tiene un montón de chips que contienen memoria * y * procesador. Pero se comunican con una gran cantidad de otras unidades similares a dimm a través de una estructura (en el chasis, la estructura puede ser pasiva y amplia; el entre chasis debería ser activo y en serie). Actualmente, el hardware expone un rango algo idiosincrásico de ganchos para mapear memoria y crear dominios de memoria protegidos. Para el enfoque de tipo dimm, probablemente necesitaría alguna extensión para limpiar la interfaz HW / VM / thread (algunas de las cuales existen hoy en día en forma de funciones numa, pero carecen de una programación de hilos basada en hardware).

Muy buenas respuestas aquí. Agregaré uno más: rendimiento determinista. Existe una gran variación en el consumo de energía incluso dentro de una familia de CPU, y eso puede dar como resultado una gran variación en el rendimiento entre los procesadores que se ejecutan en un modo turbo oportunista. Para procesadores individuales y aplicaciones en serie, esto no es un gran problema. Sin embargo, para cualquier tipo de computación en clúster, su rendimiento estará determinado por los procesadores que le asignaron y cómo asignó su aplicación a ellos.

Entonces, ¿esa optimización del compilador aceleró su rendimiento? Tal vez lo hizo, o tal vez tuviste suerte. ¿Quieres ejecutarlo 20 veces y rastrear la mediana? Lo sentimos, esa es una supercomputadora muy suscrita que estás usando. Tendrá suerte de obtener un puñado de carreras a escala.

Estamos empezando a cuantificar la magnitud del problema. Debe hacer una buena disertación.

En la actualidad, la arquitectura de la CPU está pasando por un cambio de paradigma, aumentar la frecuencia de la CPU ya no es una opción viable debido a problemas de calor, etc. El desafío es obtener aún más rendimiento por vatio. Por lo tanto, se está revisando toda la pila de CPU, la memoria, almacena en caché los buses de todo, incluso los compiladores (para explotar el paralelismo de nivel de instrucción en un entorno de múltiples núcleos). Si tengo que elegir, ¡el problema más difícil de investigar sería cómo aumentar la utilización de todos los núcleos de los procesadores multinúcleo sin imponer ninguna carga adicional para el programador!

Exactitud.

El hardware es complejo y muchos diseños evolucionaron durante décadas. Más componentes, más optimización, más paralelismo, ejecución fuera de orden: ninguno de estos hizo que los procesadores fueran más confiables o fáciles de entender.

Al mismo tiempo, ponemos estas cosas en control de nuestros automóviles y aviones. Siempre es fácil culpar al conductor cuando está muerto, cuando en realidad los descansos no reaccionaron debido a un error de hardware …

More Interesting

Cómo aprender las habilidades de investigación necesarias para producir investigación rigurosa en robótica, visión por computadora o aprendizaje automático

¿Qué está haciendo una investigación de vanguardia en el aprendizaje automático? Además, ¿cuáles son algunos de los últimos productos basados ​​en IA?

¿Cuáles son algunos de los proyectos prácticos de informática?

¿Por qué usar sigmoid y tanh como funciones de activación en LSTM o RNN no es problemático, pero este no es el caso en otras redes neuronales?

¿Cómo debe prepararse un estudiante de ingeniería de segundo año de CS recién ascendido para una pasantía de investigación en Microsoft?

¿Cuál es el SDLC que se sigue para los proyectos de investigación?

¿Cuál es el equivalente moderno de lo que era Xerox PARC hace décadas?

¿Qué es el hashing sensible a la localidad?

¿Qué se necesita para obtener un trabajo académico con tenencia en las 20 mejores universidades de los Estados Unidos? ¿Haber trabajado en la industria cuenta contra un candidato?

¿Cuáles son actualmente los temas candentes en la investigación en informática?

¿Cuáles son los campos de investigación en informática que no requieren habilidades en codificación / programación?

¿Cuáles son algunos términos básicos de la computadora para el hardware y el software de la computadora?

¿Cuáles son los algoritmos más importantes que todo informático debe dominar?

¿Qué es el algoritmo de llenado de región en el capítulo de procesamiento morfológico?

¿Cuáles son los mejores grupos de investigación de geometría computacional en los Estados Unidos?