На проходящей в Хайфе 25-ой Конференции PACT 2016 исследователи МТИ представили новый язык программирования Milk, позволяющий разработчикам более эффективно управлять памятью в программах, которые работают с разрозненными значениями в больших наборах данных. Его производительность, как показали испытания, в 4 раза выше, чем у существующих языков.
Проблема больших наборов данных не в том, что их много, объясняет профессор Саман Амарасингх, а в том, что они «рассредоточены». Современные микрочипы не оптимизированы под рассредоточенные данные. Если алгоритму нужны, скажем, всего 20 книг из двух миллионов хранящихся в базе данных, скорее всего, находящиеся рядом с нужной книгой еще 100 книг окажутся совершенно несвязанными с ней. Таким образом, придется обращаться к памяти за каждой отдельной книгой, а это крайне неэффективно и медленно, пишет MIT News.
Milk добавляет несколько команд в OpenMP, расширение таких языков, как С и Fortran, который облегчает написание кода для многоядерных процессоров. С его помощью программист вставляет пару дополнительных строчек вокруг любой инструкции, которая ищет относительно малое число элементов в большом объеме данных. Затем компилятор Milk решает, как управлять памятью в соответствии с командами.
Когда ядро получает от Milk запрос на какие-то данные, оно не запрашивает их в основной памяти. Вместо этого оно добавляет адрес элемента данных в список сохраненных локально адресов. Когда список становится достаточно длинным, все ядра объединяют их и группируют адреса, а затем перераспределяют их по ядрам. Таким образом, каждое ядро запрашивает только те элементы, которые ему нужны и которые оно может эффективно найти.
«Большинство важных приложений сегодня используют большое количество данных, но, к сожалению, растущий разрыв между производительностью памяти и процессора означает, что они используют аппаратное обеспечение не на полную мощность, — говорит Матей Захария из Стэнфорда. — Milk помогает преодолеть этот разрыв, оптимизировав доступ памяти в обычных структурных компонентах».
Новые технологии и проблемы, возникающие с их внедрением, нередко требуют новых подходов. Хотя языков программирования много, время от времени возникает необходимость в новых. Еще одним примером может служить язык Simit, о котором мы писали в августе, разработанный инженерами МТИ и ускоряющий компьютерное моделирование в 200 раз.