¿Cuáles son los campos interesantes en la informática teórica para entrar?

Así que aquí hay un problema para ti.

Comencemos con un problema complejo de flujo de fluido. Oye, mira, aquí hay uno para tener en YouTube (las cosas comienzan a ponerse interesantes a la 1:30):

Un físico comienza eligiendo un modelo; en este caso, dinámica molecular. Ese modelo es una aproximación, pero como somos humanos, eso será inevitable.

Este modelo se implementa en un lenguaje de programación. Como las computadoras no hacen matemática real (recuerde que la aritmética de coma flotante no es asociativa), la implementación es una aproximación de la aproximación inicial.

El compilador toma este código y, utilizando un modelo de dibujos animados del sistema subyacente, compila el lenguaje de alto nivel en código máquina.

El código de máquina se ejecuta en (digamos) cien mil núcleos de procesador. Por lo tanto, no solo el rendimiento está limitado por lo bien que se usa la memoria caché y lo rápido que son las unidades vectoriales, también tiene un problema de que el retraso de la comunicación puede matar su rendimiento.

El físico recupera los resultados y dice “No, eso es demasiado lento, esto tiene que correr más rápido”.

El físico puede cambiar su modelo, pero entre el modelo y la ejecución se encuentra un lenguaje de alto nivel, un compilador, una arquitectura de procesador y la arquitectura de la supercomputadora. El físico puede solicitar ayuda de matemáticos aplicados, desarrolladores de software, expertos en compiladores, arquitectos de procesadores y personas de optimización de tiempo de ejecución, pero cualquier perturbación que hagan tendrá efectos tanto en el rendimiento de la máquina como (potencialmente) en el modelo físico en sí.

Todos los campos que enumeré son ingeniería muy aplicada. Como informático teórico, ¿cómo organizarías el mundo para que la física se traduzca en rendimiento de tal manera que las estrategias de optimización se vuelvan obvias para el físico?

En pocas palabras: diseñe un mejor lenguaje para simulaciones físicas masivamente paralelas.

(Si realmente quieres seguir con esto, envíame un mensaje y te daré algunos consejos sobre la literatura. Este es un problema increíblemente difícil, y esos son exactamente el tipo de problemas en los que los nuevos estudiantes deberían estar pensando).

Como el usuario de Quora y yo estamos trabajando en áreas relacionadas, solo agregaré un poco a su respuesta.

En las arquitecturas informáticas actuales, el movimiento de datos es tan importante como el procesamiento de instrucciones, aunque hay muy poca teoría que describa los aspectos de datos de un algoritmo. La teoría de la complejidad trata casi por completo del conteo de instrucciones, y el diseño del lenguaje de programación generalmente no se preocupa por el tiempo que tardan los datos en llegar al procesador.

Sé de quizás un puñado de documentos con resultados fundamentales y realistas sobre cachés y redes. Sin embargo, esto es muy importante. Las computadoras grandes tienen una red, y ya ha habido procesadores con una red en el chip. El acceso a la memoria desde el caché es mucho más rápido que desde la memoria principal, y mucho más rápido que desde un procesador en red. Entonces, ¿hay una teoría de la complejidad que haga justicia a esto?

El procesamiento de instrucciones fuera de orden es en parte necesario debido a esta heterogeneidad de datos. Esto consume mucha energía: algo así como la mitad de la energía de las CPU modernas está involucrada en la programación de instrucciones, no en el procesamiento útil real. Entonces, ¿cuál es la teoría de la computación en orden? ¿Qué programas se pueden ejecutar en orden? ¿Puedes diseñar un lenguaje que facilite la escritura del código en orden?

El diseño de compiladores requiere muchos conceptos en informática teórica. Yo diría que diseñar un compilador para un lenguaje de programación particular debería ser un área emocionante para la investigación.

Si está interesado en la investigación sobre bases de datos, visite nuestro blog Investigación sobre bases de datos

More Interesting

¿Cuál es la investigación reciente en informática? ¿Cómo puedo obtener un conocimiento profundo de alguna investigación o tema si deseo saber?

¿Qué tan similares son la programación competitiva y la investigación en algoritmos?

¿Cómo puede un estudiante universitario publicar un artículo de revista? ¿Qué tan difícil es hacer? ¿Qué consejos y estrategias recomendaría la gente?

¿Un trabajo académico en un área de visión por computadora necesita una teoría complicada?

¿Qué ideas de investigación tiene para usar los datos de Twitter?

Cómo aumentar la posibilidad de que mi algoritmo genético alcance el verdadero óptimo global en un 99% en lugar de solo el 65% de las corridas

¿Qué es una lista de investigadores en UCLA que están trabajando en la investigación de aprendizaje automático?

¿Cuáles son los trabajos de Google Research más interesantes?

¿Google Research es el 'Bell Labs' del siglo XXI? Por qué o por qué no ?

¿Dónde se debe comenzar en la visión por computadora?

¿El futuro del procesamiento del lenguaje natural parece brillante? ¿Hay muchas perspectivas para el próximo crecimiento (al menos una década)? ¿Hay mucha demanda de investigación en él?

¿Cuáles son los temas candentes que se pueden investigar sobre la construcción del compilador?

Computación de alto rendimiento: ¿Cuáles son las principales diferencias en las clases de problemas que pueden acelerarse de manera efectiva utilizando GPGPU (por ejemplo, CUDA), multiprocesamiento simétrico (por ejemplo, OpenMP) y paso de mensajes (por ejemplo, MPI) respectivamente?

¿Cuáles son los problemas en la educación en informática?

¿Qué es una metaclase?