Состояние программирования и компиляции для многоядерных систем

Я провожу некоторые исследования многоядерных процессоров; В частности, я рассматриваю написание кода для многоядерных процессоров, а также компиляцию кода для многоядерных процессоров.

I» В дополнение к определению определенных программных конструкций, он также, кажется, имеет функции, которые говорят компилятору оптимизировать код для многоядерных архитектур)

В общем, из того небольшого опыта, который у меня есть с многопоточным программированием , я знаю что программирование с учетом параллелизма и параллелизма, безусловно, является сложной концепцией. Мне также известно, что многопоточное программирование и многоядерное программирование - это две разные вещи. в многопоточном программировании вы гарантируете, что ЦП не остается бездействующим (в системе с одним ЦП. Как отметил Джеймс, ОС может планировать запуск разных потоков на разных ядрах - но меня больше интересует описание параллельных операций из сам язык или через компилятор). Насколько я знаю, вы не можете по-настоящему выполнять параллельные операции. В многоядерных системах вы должны иметь возможность выполнять действительно параллельные операции.

Поэтому мне кажется, что в настоящее время проблемы, стоящие перед многоядерным программированием:

  • Многоядерное программирование - сложная концепция, требующая значительных навыков
  • . в современных языках программирования нет собственных конструкций, обеспечивающих хорошую абстракцию для программ для многоядерной среды
  • Кроме библиотеки TBB от Intel, я не нашел усилий в других языках программирования, чтобы использовать возможности многоядерных архитектур для компиляции (например, Я не знаю, оптимизирует ли компилятор Java или C # байт-код для многоядерных систем или даже если это делает JIT-компилятор)

Мне интересно знать, какие еще могут быть проблемы, и если есть какие-либо решения в работах по решению этих проблем. Ссылки на научные статьи (и тому подобное) были бы полезны. Спасибо!

РЕДАКТИРОВАТЬ

Если бы мне пришлось свести мой вопрос к одному предложению, это было бы так: с какими проблемами сегодня сталкиваются многоядерные программы и какие исследования проводятся в этой области для решения этих проблем?

ОБНОВЛЕНИЕ

Мне также кажется, что есть многоуровневое отношение к многоядерности:

  1. Уровень языка : Создает / концепции / рамки, которые абстрагируют параллелизацию и параллелизм и позволяют программистам выразить одно и то же.
  2. Уровень компилятора : Если компилятор знает, для какой архитектуры он компилируется, он может оптимизировать скомпилированный код для этой архитектуры.
  3. Уровень ОС : Операционная система оптимизирует рабочий процесс и, возможно, планирует запуск различных потоков / процессов на разных ядрах.

Я искал в ACM и IEEE и нашел несколько статей. Большинство из них говорят о том, как трудно думать одновременно, а также о том, что современные языки не имеют надлежащего способа выражения параллелизма. Некоторые зашли настолько далеко, что утверждают, что имеющаяся у нас модель параллелизма (потоков) не является хорошим способом управления параллелизмом (даже для нескольких ядер). Мне интересно услышать другие взгляды.

6
задан Vivin Paliath 7 September 2010 в 18:13
поделиться