В MIT создают новый язык программирования, способный существенно ускорить параллельные вычисления

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

Что за проблемы с обработкой данных?

Дело в специфической работе современных чипов. Их работа базируется на предположении, что если программе нужны какие-либо данные, сохранённые на диске, ей, вероятно, понадобятся и данные, которые находятся по соседству.

А разве это не так?

Не всегда. Скажем, если программе нужно наложить на изображение фильтр, а работать она может только с какой-то небольшой частью изображения, то будет логично, если при загрузке одной части, чип загрузит в свой кеш столько соседних участков, сколько может удержать в памяти. Однако в эпоху BigData существуют и другие задачи. Например, если онлайн-магазину нужно вывести список из 20 лучших книг, то (учитывая, что книг в базе данных может быть несколько сотен тысяч) очень маловероятно, что какие-то 2 книги окажутся рядом. А чип так и будет продолжать подгружать по лишней сотне соседних книг, чтобы вывести одну.

Зачем вообще что-то подгружать в кеш чипа? Это всё усложняет, почему нельзя брать значения из памяти?

Это делается для прироста скорости. “Дело в том, что обращаться к памяти за каждым элементом, который вам нужен, это всё равно что за завтраком, ради того, чтобы съесть одну ложку хлопьев, идти к холодильнику, открывать его, брать молоко, открывать коробку с молоком, наливать ровно одну ложку, закрывать коробку, ставить её в холодильник и закрывать холодильник,” — объясняет Владимир Кириански, кандидат в доктора наук (Ph.D. Candidate) по Computer Science, один из авторов этой работы. Большая цена обращения к памяти компьютера — достаточно распространённая проблема. Мы недавно публиковали статью про формат для изображений HVIF, которой разработали для операционной системы Haiku специально для того, чтобы снизить количество обращений к жёсткому диску.

И как с этим планирует бороться новый язык от MIT?

Программа на Milk работает так, что когда ядру процессора понадобятся какие-то данные, он не посылает сразу запрос на её получение. Вместо этого он добавляет адрес этих данных в специальный список. Когда в списке накапливается достаточно большое количество адресов, ядра перераспределяют эти адреса между собой, объединяют соседние и только после этого запрашивают. Таким образом, каждое ядро получает только те данные, которые действительно будут нужны в работе, при том делает это достаточно эффективно.

А что требуется от программиста? Всё это нужно настраивать вручную?

Не всё. Конечно, Milk добавляет несколько новых команд к стандарту OpenMP, и программисту придётся добавлять определённые строки к коду, который отвечает за перебор больших данных. Однако куда большую работу по оптимизации берёт на себя компилятор.

И что, всё? Так просто?

На самом деле, нет. Это лишь общее описание, на практике реализовать такое достаточно сложно. У современных компьютерных чипов есть несколько различных уровней кеша. Каждый последующий уровень больше, но несколько менее эффективен. Компилятору Milk приходится не только хранить адреса данных, но и следить за самими данными, перетасовывая их с одного уровня на другой. Так же компилятор определяет, какие адреса должны сохраняться в памяти, потому что могут быть использованы ещё раз, а какие можно удалить. Именно в усовершенствовании этих алгоритмов исследователи видят ресурс для ещё большего увеличения производительности.

Ещё большего? А насколько производителен язык сейчас?

Во время тестирования на некоторых несложных алгоритмах, новый язык работал до четырёх раз быстрее, чем существующие языки. Однако исследователи верят, что четырёхкратный прирост — далеко не предел. “Сегодня огромному числу важных приложений приходится много работать с данными, но, к сожалению, растущая разница между производительностью памяти и процессоров не позволяет использовать оборудование на 100%” — рассказывает Матей Захария, профессор по Computer Science Стенфордского университета, — “Milk поможет преодолеть разницу в скоростях, оптимизируя запросы к памяти. Это очень важная работа, основанная на глубоком понимании принципов работы контроллеров памяти и принципов построения компилятора”.

Пётр Соковых, транслятор двоичного кода в русский язык