Лаборатория информатики и искусственного интеллекта (CSAIL) при Массачусетском технологическом институте представила новый язык программирования под названием Milk. С его помощью существенно упрощается и ускоряется работа с разрозненными фрагментами данных в больших массивах.
Исследователи отмечают, что современные вычислительные системы не оптимизированы для работы с разрозненными данными. Процесс извлечения информации из оперативной памяти не достаточно быстрый. По этой причине процессоры оснащаются собственной памятью, называемой кэшем. Для того чтобы сократить количество обращений к ОЗУ, процессор считывает память блоками и находит необходимые данные в этих блоках уже в собственном кэше.
Такой подход зарекомендовал себя, когда дело касается вычислительной системы с локальной памятью. Однако если речь идет о сетевой базе данных большого объема, например, хранящей 2 млн фрагментов данных, в которой необходимо найти 20 определенных фрагментов, указанный подход неэффективен. Этой проблемой и озаботились разработчики Milk..
При использовании Milk, когда ядро процессора планирует обратиться к данным в памяти, этого не происходит. Вместо этого оно записывает адрес этих данных в локально хранимый список. Когда списки на всех ядрах достигают определенного размера, они комбинируются. В результате получается один длинный список адресов, к которым необходимо обратиться всем ядрам. Затем адреса в этом списке группируются по расположению в памяти и заново распределяются по ядрам. В результате ядрам не приходится считывать ненужные данные из памяти.
В ходе тестов, проведенных исследователями, выяснилось, что применение нового языка позволяет в четыре раза ускорить работу с разрозненными данными в больших массивах по сравнению с существующими языками. При этом участники проекта утверждают, что знают, как увеличить скорость еще больше.
В действительности Milk делает больше, чем простая сортировка адресов между ядрами. Он учитывает наличие кэша нескольких уровней и хранит собственный кэш адресов на тот случай, если некоторые из них потребуются вновь.
Для того чтобы воспользоваться описанными преимуществами, программисту необходимо добавить несколько строк кода ко всем командам обращения к большим массивам данных в своей программе и затем воспользоваться компилятором Milk. Поддерживаются C, Fortran и другие языки программирования, совместимые с технологией OpenMP, через которую осуществляется оптимизация.