Комплексный подход к анализу эффективности программ для параллельных вычислительных систем

Андреев А.Н., Антонов А.С., Воеводин В.В., Воеводин Вл.В., Жуматий С.А.

НИВЦ МГУ им.М.В.Ломоносова, ИВМ РАН

(по материалам доклада на конференции "Высокопроизводительные вычисления и их приложения", Черноголовка, ноябрь 2000 г.)

За последние годы нам приходилось работать в рамках многих проектов на большом числе параллельных компьютеров и супер-ЭВМ и практически всегда перед нами стояла основная задача - помощь в создании действительно эффективных параллельных программ. Ясно, что помощь была нужна только тогда, когда были какие-то проблемы - нет проблем, значит нет и вопросов. Но интересно то, что сама проблема каждый раз формулировалась пользователями практически одинаково: "Что-то не так с эффективностью моей программы".

Иногда проблема снималась легко - достаточно было, например, разобраться в документации по работе с системой или компилятором, но иногда приходилось довольно глубоко вникать в суть алгоритмического подхода решаемой задачи. Чем дольше мы работали в этой области, тем отчетливей проявлялась многогранность исходной проблемы. Стало ясно, что мы уже не можем ограничиваться решением одной конкретной задачи, скорее речь должна идти о создании целой инфраструктуры, сопровождающей большинство прикладных работ на параллельных вычислительных системах.

В самом деле, давайте посмотрим, на какие составные части может разбиваться исходная задача и почему нужен комплексный подход к анализу ситуации в каждом конкретном случае. Если "с программой что-то не так, то, как показала практика, проблемы могут возникать на самых разных уровнях:

АНАЛИЗ КОНФИГУРАЦИИ КОМПЬЮТЕРА

АНАЛИЗ ЭФФЕКТИВНОСТИ СИСТЕМНОГО И ПРИКЛАДНОГО ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ

АНАЛИЗ СТРУКТУРЫ ПРОГРАММЫ

АНАЛИЗ АЛГОРИТМИЧЕСКОГО ПОДХОДА

Начинать исследование, чаще всего, приходилось с анализа конфигурации конкретного компьютера: тип и число процессоров, уровни и объем памяти, параметры и топология коммуникационной среды, особенности ввода/вывода и т.п. - даже эти, казалось бы простые и очевидные вещи, на практике могут оказаться причиной вопросов пользователей. В свое время мы разрабатывали программу для векторно-конвейерного компьютера CRAY Y-MP C90. Когда программа была закончена и передана пользователю, он после нескольких запусков на своем компьютере стал утверждать, что "с программой что-то не так", так как время ее работы было где-то на 30% больше заявленного нами. Детальный анализ показал, что истинная причина крылась вовсе не в программе: процессор второго компьютера, в отличие от первого, имел лишь два канала связи с памятью, а не три, как предписано стандартной конфигурацией. С программой было "все так" и в рамках той конфигурации она работала идеально.

Следующий большой срез - это анализ эффективности системного и прикладного программного обеспечения. Наверняка у всех когда-либо были нарекания на работу штатных компиляторов, потому проблемы этого пункта хорошо знакомы всем. Однако далеко не всегда удается столь легко найти виновника бед пользователей и тогда приходится проводить детальный анализ характеристик программного окружения. Один из примеров - это обнаруженная крайне низкая эффективность ряда процедур в реализации PVM, включенной в состав штатного программного обеспечения компьютера CRAY T3D. Проблема с программой пользователя? Да нет, опять-таки дело далеко не в самой программе...

Для облегчения исследования эффективности программного окружения конкретного компьютера нами была написана система тестов, ориентированная, в основном, на исследование систем с передачей сообщений типа MPI или PVM. Данные тесты позволяют определить реальную скорость передачи сообщений, величину латентности, скорость срабатывания различных функций систем с передачей сообщений, время задержки на барьерах, эффективность обменов параллельных процессов в различных логических топологиях и многое другое. Текущая версия системы тестов может быть найдена по адресу http://parallel.ru/testmpi.

Основная задача в рамках анализа структуры программы состоит в поиске ответа на вопрос: можно ли не изменяя алгоритма улучшить эффективность программы? Занимаясь исследованиями в данном направлении в течении более десяти лет, мы разработали и используем на практике комбинацию методов статического и динамического анализа. На основе проведенных исследований создана и успешно апробирована многоцелевая система - V-Ray, предназначенная для изучения структуры больших программных комплексов и адаптации этих комплексов к требованиям целевых компьютеров с параллельной архитектурой. Система прошла успешную апробацию во время большого числа экспериментов на современных суперкомпьютерах CRAY Y-MP C90, IBM SP2, CRAY T3D, HP Exemplar, вычислительном кластере МГУ и других, а также во время участия в целом ряде проектов по разработке высокоэффективного численного программного обеспечения для супер-ЭВМ. Описание системы и другие материалы можно найти в сети Интернет по адресу http://parallel.ru/v-ray.

Наконец, если анализ приложения показал, что в программе отсутствует достаточный ресурс параллелизма с нужными характеристиками, значит проблемы эффективности исходной программы кроются в свойствах используемых алгоритмов. Единственное, что остается - это перейти к алгоритмическому анализу, заменив отдельные алгоритмические компоненты на другие, свойства которых лучше соответствуют особенностям архитектуры целевого компьютера.

Понимая явную необходимость в создании основ инфраструктуры, покрывающей широкий спектр вопросов из области параллельных вычислений и помогающей осваивать данную область, мы организовали Информационно-аналитический центр в сети Интернет, посвященный как раз этой теме: http://parallel.ru. Уже сейчас здесь собрано очень много информации по архитектурам современных параллельных компьютеров и супер-ЭВМ, технологиям параллельного программирования, современным исследованиям в данной области, истории развития параллельных вычислений, персоналиям. Организована еженедельная рассылка новостей мира параллельных вычислений, поддерживается дискуссионный Web-клуб и многое другое.

В заключение подчеркнем еще раз: все те направления работ, которых мы коснулись в своем сообщении, должны рассматриваться комплексно, подчиняться одной задаче - помощи пользователям в разработке эффективных параллельных приложений. Практика настоятельно рекомендует: необходима инфраструктура поддержки пользователей, куда войдут все эти направления, и которая, в свою очередь, должна стать необходимой составляющей инфраструктуры появляющихся российских суперкомпьютерных центров.


© Лаборатория Параллельных Информационных Технологий, НИВЦ МГУ
Rambler's Top100