W00t, что за отличный вопрос = D
На первый взгляд я вижу две проблемы. Я советую вам, что пока я буду рассматривать параллельное приложение, ограниченное процессором, при представлении моих аргументов.
Первый - это накладные расходы на управление, накладываемые на операционную систему. Помните, ОС отвечает за диспетчеризацию процессов на процессоре, на котором они будут работать. Кроме того, ОС должна управлять одновременным доступом к структурам данных, которые содержат эту информацию. Таким образом, вы получили первое узкое место в том, что ОС абстрагирует график задач. Это уже недостаток.
Следующий хороший эксперимент. Попробуйте написать приложение, которое сильно использует процессор. Затем с помощью какого-либо другого приложения, такого как atsar, получите статистику пользовательского и системного времени. Теперь измените количество одновременных потоков и посмотрите, что происходит с системным временем. Графики данных могут помочь определить рост (не так =) бесполезной обработки.
Во-вторых, когда вы добавляете ядра в вашу систему, вам также нужна более мощная шина. Ядра процессора должны обмениваться данными с памятью, чтобы можно было выполнить вычисления. Таким образом, с большим количеством ядер у вас будет больше параллельного доступа к шине. Кто-то может утверждать, что система с более чем одной шиной может быть спроектирована. Да, действительно, такая система может быть разработана. Однако должны быть дополнительные механизмы для сохранения целостности данных, используемых ядрами. Некоторые механизмы существуют на уровне кэша, однако их развертывание на первичном уровне памяти обходится очень дорого.
Имейте в виду, что каждый раз, когда поток изменяет некоторые данные в памяти, это изменение должно распространяться на другие потоки, когда они получают доступ к этим данным, действие, которое обычно в параллельных приложениях (главным образом в числовых).
Тем не менее, я согласен с вашей позицией, что нынешние модели безобразны. И да, в настоящее время гораздо труднее выразить параллелизм в моделях программирования GPGPU, так как программист полностью отвечает за перемещение битов. Я с нетерпением жду более краткой, высокоуровневой и стандартизированной абстракции для разработки многоядерных и GPGPU-приложений.