Игра Яндекс Практикума
Игра Яндекс Практикума
Игра Яндекс Практикума

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

Новости Отредактировано

4К открытий4К показов

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Следите за новыми постами
Следите за новыми постами по любимым темам
4К открытий4К показов