El estado de programación y compilación para sistemas multinúcleo.

Estoy investigando sobre procesadores multinúcleo; específicamente, estoy buscando escribir código para procesadores multinúcleo y también compilar código para procesadores multinúcleo.

Tengo curiosidad sobre los principales problemas en este campo que actualmente evitarían una adopción generalizada de técnicas y prácticas de programación para aprovechar al máximo el poder de las arquitecturas multinúcleo.

Soy consciente de los siguientes esfuerzos (algunos de estos no parecen estar directamente relacionados con arquitecturas multinúcleo, pero parecen tener más que ver con modelos de programación paralela, subprocesamiento múltiple y concurrencia):

Erlang (Sé que Erlang incluye construcciones para facilitar la concurrencia, pero no estoy seguro de cómo se está aprovechando exactamente para arquitecturas multinúcleo)OpenMP (parece estar relacionado principalmente con el multiprocesamiento y el aprovechamiento del poder de los clústeres)Paralelo C unificadoCilkIntel Threading Blocks (esto parece estar directamente relacionado con los sistemas multinúcleo; tiene sentido ya que proviene de Intel. Además de definir ciertas construcciones de programación, también parece tener características que le indican al compilador que optimice el código para arquitecturas multinúcleo)

En general, por la poca experiencia que tengo conmultiproceso programación, sé que la programación con concurrencia y paralelismo en mente es definitivamente un concepto difícil. También soy consciente de queprogramación multiproceso yprogramación multinúcleo Son dos cosas diferentes. en la programación multiproceso, se asegura de que la CPU no permanezca inactiva (en un sistema de CPU única. Como James señaló, el sistema operativo puede programar diferentes subprocesos para que se ejecuten en diferentes núcleos, pero estoy más interesado en describir las operaciones paralelas desde el lenguaje en sí, o a través del compilador). Que yo sepa, no puedes hacer operaciones paralelas de verdad. En sistemas multinúcleo, debe poder realizar operaciones verdaderamente paralelas.

Entonces me parece que actualmente los problemas que enfrenta la programación multinúcleo son:

La programación multinúcleo es un concepto difícil que requiere una habilidad significativaNo hay construcciones nativas en los lenguajes de programación actuales que brinden una buena abstracción para programar en un entorno multinúcleoAparte de la biblioteca TBB de Intel, no he encontrado esfuerzos en otros lenguajes de programación para aprovechar el poder de las arquitecturas multinúcleo para la compilación (por ejemplo, no sé si el compilador Java o C # optimiza el código de bytes para sistemas multinúcleo o incluso si el El compilador JIT hace eso)

Estoy interesado en saber qué otros problemas puede haber, y si hay alguna solución en los trabajos para abordar estos problemas. Los enlaces a trabajos de investigación (y cosas de esa naturaleza) serían útiles. ¡Gracias!

EDITAR

Si tuviera que condensar mi pregunta en una sola oración, sería esta: ¿Cuáles son los problemas que enfrenta la programación multinúcleo hoy y qué investigación se está llevando a cabo en el campo para resolver estos problemas?

ACTUALIZAR

También me parece que hay tres niveles en los que debe preocuparse el multinúcleo:

Nivel de idioma: Construye / conceptos / marcos que abstraen la paralelización y la concurrencia y facilitan a los programadores expresar lo mismoNivel de compilador: Si el compilador conoce la arquitectura para la que está compilando, puede optimizar el código compilado para esa arquitectura.Nivel del sistema operativo: El sistema operativo optimiza el proceso de ejecución y tal vez programa diferentes subprocesos / procesos para ejecutarse en diferentes núcleos.

He buscado en ACM e IEEE y he encontrado algunos documentos. La mayoría de ellos hablan de lo difícil que es pensar al mismo tiempo y también de cómo los idiomas actuales no tienen una forma adecuada de expresar concurrencia. Algunos han ido tan lejos como para afirmar que el modelo actual de concurrencia que tenemos (hilos) no es una buena forma de manejar la concurrencia (incluso en múltiples núcleos). Estoy interesado en escuchar otras opiniones.

Respuestas a la pregunta(5)

Su respuesta a la pregunta