Re: Язык и архитектура программирования будущего
От: AndreyFedotov Россия  
Дата: 03.10.05 04:54
Оценка:
Идею смены архитектуры полностью поддерживаю, так как по-моему назрела она давно.
А вот по поводу способов — как это можно сделать — вызывают большие сомнения.

Начну с самой очевидной идеи распараллеливания — кучи процессоров с собственной памятью. Идея прекрасная и давным-давно уже применяется. Великолепно работает, когда нужно провести много идентичных вычислений, особенно для тех алгоритмов, которые допускают разбиение на отдельные и распараллеливаемые фрагменты (вот как те же матрицы). Однако далеко не все алгоритмы столь хороши. Есть случаи, когда скорость вычислений будет расти как логарифм от числа процессоров. А добиться увеличения производительности в 6-10 раз, за счёт миллиона процессоров — может быть несколько накладно... Это главное препятствие математического плана.

Теперь о программировании. Идея написания языка, который автоматически обеспечивал бы распараллеливание (или хотя бы облегчал его) — витает очень давно. И попытки создать такой язык предпринимались неоднократно — вспомнить хотя бы бум вокруг транспьютеров и языки программирования, которые были для них созданы. И хотя некоторый прогресс и был достигнут — до серебряной пули или базового решения, которое можно было бы использовать, как основу для новой технологии, оказалось довольно далеко. Оказалось, что для достижения действительно высоких результатов от разработчика требуется квалификация и трудозатраты идентичные тем, что требуются для обеспечения параллелизма на обычных языках. То есть — весьма существенные. И это является главным препятствием. Где то я видел оценку, по которой написание и отладка многопоточного (распараллеливаемого кода) получалась от 10 до 50 раз дороже, чем написание кода обычного — однопоточного. Хотите проверить — напишите многопоточную сортировку, которая будет работать быстрее однопоточной

К вопросу о шинах между процессором и памятью. Взгляд совершенно здравый — они действительно являются зачастую узким местом в системе. И их действительно нужно распараллеливать. Однако это не обязательно требует распараллеливания процессоров. Можно увеличить количество шин между процессором и памятью не увеличивая количество ядер. При определённом подходе это даст хороший прирост производительности, особенно, если в пересылку данных одновременно с процессором вовлечены другие устройства или процессоров – несколько. Впрочем, и эта технология сейчас активно применяется.

В общем-то, очевидно, что сейчас распараллеливание (и ядер и шин и отдельных процессором) является основной технологией и создание средств, которые обеспечивали бы её использование (в том числе и новых языков) – весьма востребовано. Однако как раз в области языков особо новых идей пока и не видно. Хотя возможно вместе до чего и додумаемся.