Ученые упрощают параллельное программирование

25 май, 2015 - 14:29Леонід Бараш

Современное программное обеспечение рассматривает вычислительную производительность как нечто само собой разумеющееся. Однако современные микропроцессоры могут ускориться только путем увеличения количества ядер. Для того чтобы в полной мере воспользоваться несколькими ядрами, разработчики программного обеспечения должны организовать свой код таким образом, чтобы он исполнялся параллельно. Компьютерные ученые из Университета земли Саар (Германия) разработали инструмент, который автоматически распараллеливает необходимые участки кода, а также дает советы разработчикам ПО. В долгосрочной перспективе они планируют расширить свою систему "Sambamba" для автоматического распараллеливания любой заданной программы.

«Многоядерные архитектуры становятся все более и более важными, даже в нетбуках и мобильных телефонах, - говорит проф. Андреас Целлер (Andreas Zeller). - По мере того как устройства становятся все меньше, они также оптимизируются для низкого энергопотребления, что делает многоядерность еще более необходимой». Проф. Целлер разработал инструмент вместе со своими докторантами Кевином Страйтом (Kevin Streit) и Клеменсом Хаммахером (Clemens Hammacher). Их система, называемая "Sambamba", автоматически преобразует традиционно запрограммированный код в параллельный. «Цель – найти несколько вариантов распараллеливания для каждой отдельной функции в рассматриваемом приложении, а затем выбрать лучший во время исполнения», - отметил проф. Себастьян Хак (Sebastian Hack). Он и его докторант Йоханнес Дорферт (Johannes Doerfert) также приняли участие в проекте Sambamba.

Компьютерные ученые описывают время исполнения как время, которое проходит между инициализацией и завершением программы. Чтобы определить участки, где распараллеливания возможны, и исключить другие, Sambamba анализирует код еще до того, как он исполняется. Но на этапе предварительного анализа трудно найти варианты распараллеливания, которые зависят от ввода, и поэтому появляются только эпизодически. «Вот почему Sambamba состоит из двух модулей: инструмента комплексного анализа программы, который анализирует код для определения его потенциала распараллеливания перед исполнением, и второго модуля, который может затем использовать эти результаты и оптимизировать код с дополнительной информацией, полученной во время исполнения», - объясняет проф. Хак.

Таким образом ученые элегантно избежали некоторых проблем, которые исследователи до сих пор не смогли решить: в то время как различные методы, как правило, работают хорошо для конкретных форм распараллеливания, ни один из них не подходит глобально. «Даже если бы мы смогли построить своего рода транслятор приложения, который инкорпорировал бы каждый метод из когда-либо созданных и проверенных, мы бы все еще нуждались в некоторой оценочной модели, которая смогла бы определять лучший способ в каждом случае автоматически», - продолжил проф. Хак. С помощью своей интегративной методики ученые пытаются собрать как можно больше информации заранее, а затем собрать дополнительную информацию во время исполнения программы. Таким образом могут быть обнаружены дополнительные возможности распараллеливания и программа может "определить", какой метод распараллеливания работает лучше всего.

Sambamba хорошо работает для программ, написанных на языках, которые широко распространены на практике, но трудно проанализировать, как, к примеру, C ++. Но чем более сложная программа, тем более важным становится ее анализ во время исполнения, независимо от языка. «Sambamba может распараллелить код полностью автоматически. Но в некоторых случаях разработчики могут захотеть проверить различные варианты, или выбрать один сами. Таким образом, наша система может также общаться с пользователем и делать предложения о том, как распараллелить код», - объясняет проф. Целлер.