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

Начинать исследование приходилось с анализа конфигурации
конкретного компьютера: тип и число процессоров, уровни и объем
памяти, параметры и топология
Сильно увлеченный прикладной областью пользователь до поры до времени может и не знать, что число процессоров для запуска пакета, если не задано явно, по умолчанию берется из конфигурационного файла. Запускает задачу, получает результат, все нормально. Перешел на другой кластер, запускает такой же вариант, время получения ответа увеличилось в два раза, хотя "в программе он ничего не менял, а процессоры такие же". Все верно, и программа не испортилась, и новый кластер не хуже, разница лишь в числе процессоров, используемых пакетом по умолчанию на каждой из этих кластерных систем.
Похожие вопросы вызывает изменение структуры памяти, сильно влияющей на эффективность работы программ: объем и частота работы оперативной памяти, количество уровней кэш-памяти и объем каждого уровня, возможность разделения какого-либо уровня несколькими ядрами или процессорами.
Еще одна ситуация. Человек приходит и говорит, что его программа стала "неожиданно" работать медленнее, почему? Стали разбираться, и оказалось, что раньше он работал на кластере, у которого было по два жестких диска на узел, а у нового кластера на каждом узле установлено лишь по одному. На всех узлах кластеров по два процессора, все процессы приложения исключительно интенсивно работают с локальными дисками. На узлах первого кластера потоки ввода/вывода от двух процессоров бесконфликтно разводились по разным дискам, а на втором кластере единственный жесткий диск на каждом узле становился узким местом и сдерживал работу процессоров. Пользователь знал об этой особенности своей программы, но на конфигурацию кластеров не обратил внимания.
Другой пользователь, но проблема та же: медленная работа программы. Стали разбираться, и оказалось, что человек изменил всего лишь один параметр программы, но не учел, что при этом значительно увеличились области памяти, выделяемые под массивы данных. В результате программа перестала помещаться в оперативную память, появился отсутствующий прежде свопинг, из-за чего время работы программы выросло на порядок.
Почему
Обсуждая подобные случаи, мы не ставим своей целью обвинить
пользователя в некомпетентности, в нежелании или неспособности
разобраться с возникающими проблемами. Задача обеспечения эффективного
выполнения программ сложна и многогранна, в расчет нужно принимать
весьма тонкие свойства программно-аппаратной среды кластера, для
исследования которых у пользователя просто может и не быть нужного
инструментария. Посмотрим на данные мониторинга динамики выполнения
Классическая ситуация. Сначала задача на всех узлах считается с
максимальной эффективностью: левые области всех картинок верхнего ряда
закрашены полностью, что говорит об использовании процессора на 100%.
Затем в некоторый момент эффективность резко падает. Начинаем
исследовать причины: одновременно с падением эффективности видим
усиление loadaverage равно 2, т.е.
числу процессоров на узле) и отсутствия обменов в сети (нижний ряд).
После выполненного анализа становится понятным источник проблем:
недостаток оперативной памяти.
(рис 7.1) Снижение эффективности выполнения программы из-за недостатка оперативной памяти и активизации свопинга Увы, несмотря на очевидную полезность, с такими данными, как
правило, работает только системный администратор, пользователю они
редко бывают доступны. Рассмотрим еще два примера использования данных
(рис 7.2) Снижение эффективности работы программы из-за регулярного появления посторонних процессов
(рис 7.3) Падение эффективности выполнения программы из-за медленной работы сетевого дискаВесьма поучительный пример для администраторов кластерных систем
показан на рис. 7.2. Из него ясно следует, что эффективность работы
программ определяется не только квалификацией пользователей, но и
аккуратной настройкой системного окружения администраторами. Более
того, пользователям разобраться самостоятельно в ситуациях подобного
рода почти невозможно. По серому цвету верхней половины верхней
диаграммы видно, что двухпроцессорный узел используется лишь
наполовину, один процессор все время простаивает - на узле выполняется
однопроцессорная задача. Работа другого процессора (нижняя часть
верхней диаграммы) регулярно прерывается, причем с той же
периодичностью резко возрастает как значение параметра loadaverage
(вторая диаграмма сверху), так и активность обмена страницами
оперативной памяти (нижняя диаграмма) при отсутствии сколько-нибудь
заметного использования области
В системе явно порождаются новые более cron, в результате которой трудоемкая системная
операция, обычно запускаемая раз в неделю, выполнялась намного
чаще.
Падение эффективности работы программы, которое показано на рис. 7.3, вызвано другими причинами. С
параметром loadaverage никаких проблем нет, его значение
всегда около 2. Зато резко возрастает активность работы с сетевым
диском (вторая диаграмма снизу, nfs_client ), и
Сетевые диски разделяются между всеми пользователями, доступны через сетевую файловую систему и, как правило, физически расположены на отдельных устройствах. Все это приводит к дополнительным задержкам, и работа с локальными дисками вычислительных узлов проходит намного быстрее. В нашей практике был случай, когда в программе изменили лишь путь к каталогу для размещения временных файлов, за счет чего время работы программы уменьшилось в 15 раз: исключили взаимодействие с сетевым диском, а всю активность перенесли на локальные диски узлов.
Следующий большой срез - это анализ эффективности системного и
прикладного программного обеспечения. Отчасти мы его уже затронули,
обсуждая аккуратную настройку
Быстро найти причину бед пользователей удается далеко не всегда,
иногда приходится проводить аккуратный детальный анализ характеристик
программного окружения. В одном проекте при переходе на новый
компьютер программа явно замедлилась, хотя никаких изменений в ее
текст не вносилось. Причина была найдена достаточно быстро: чрезмерно
большие задержки при выполнении операции барьерной синхронизации
процессов. Почему? Оказалось, что на систему поставили
экспериментальный вариант реализации
Важно осознать и то, что решить самостоятельно проблемы этого уровня пользователь, как правило, не может: знаний-то может и хватает, но прав что-либо менять в установках системы маловато. Здесь он должен работать в тесном контакте с системными администраторами, которые, в свою очередь, должны внимательно прислушиваться к вопросам и пожеланиям своих пользователей.
Основная задача в рамках анализа структуры прикладной программы состоит в поиске ответа на вопрос: "Можно ли не меняя алгоритма улучшить эффективность работы программы?". Алгоритм может обладать всеми нужными свойствами, в частности достаточной степенью параллелизма или локальностью использования данных, однако форма записи программы может скрыть эти особенности, и компилятор не сможет сгенерировать эффективный код. Нужно изменить структуру программы, сделать ее особенности явными и видимыми для компилятора, для чего в распоряжении есть целый арсенал приемов и методов эквивалентного преобразования программ. Занимаясь исследованиями в данном направлении в течение двух десятков лет, мы разработали и используем на практике комбинацию методов статического и динамического анализа, реализованных в экспериментальной системе исследования структуры программ V-Ray. Эффективных вариантов решения проблем подобного сорта может быть много, в конечном итоге все зависит от личного опыта, предпочтений, наработанных технологий, сложившихся правил по разработке больших программных комплексов авторскими коллективами.
Проведите простой эксперимент. Возьмите программу перемножения двух плотных квадратных матриц А=В*С размера, скажем, N=5000, примерно такого вида:
DO I = 1, N
DO J = 1, N
DO K = 1, N
A(I,J) = A(I,J) + B(I,K) * C(K,J)
Информационная структура данного фрагмента позволяет выбрать любой
порядок следования данных трех циклов, на правильность результата
работы программы это никак не повлияет. Однако выбранный порядок
сильно повлияет на время ее работы. Запустите шесть различных
вариантов программы, определяемых возможными комбинациями циклов на
компьютере с любым из процессоров Intel,
И, наконец, если анализ приложения показал, что структура программы не соответствует особенностям архитектуры компьютера, то проблемы эффективности исходной программы кроются в свойствах используемых алгоритмов. Единственное, что остается - это перейти к алгоритмическому анализу. Возможно, что в результате исследований этого этапа пользователю придется поменять алгоритм и полностью переписать некоторые части программы. В ряде случаев другого пути просто нет, к этому нужно быть готовым. В идеальном варианте разработка программы для кластера должна сразу проходить с учетом его архитектуры, тогда недоразумений со свойствами алгоритмов не возникнет.
Как мы видим, проблема анализа и повышения эффективности работы
Создание
Вопросов у пользователей возникнет много, и к этому нужно
приготовиться сразу. Будут вопросы "периода роста", как
правило, они простые и быстро заканчиваются. Сложнее отвечать на
содержательные вопросы, связанные с тонкими характеристиками работы
Иногда проблема снималась легко - достаточно было, например,
разобраться в документации по работе с системой или компилятором. В
некоторых случаях приходилось довольно глубоко вникать в суть решаемой
задачи. Чем дольше мы работаем в этой области, тем отчетливей
проявляется многогранность исходной проблемы. Как и для любых
Давайте посмотрим, на какие составные части может разбиваться
исходная проблема пользователя, и почему нужен

Начинать исследование приходилось с анализа конфигурации
конкретного компьютера: тип и число процессоров, уровни и объем
памяти, параметры и топология
Сильно увлеченный прикладной областью пользователь до поры до времени может и не знать, что число процессоров для запуска пакета, если не задано явно, по умолчанию берется из конфигурационного файла. Запускает задачу, получает результат, все нормально. Перешел на другой кластер, запускает такой же вариант, время получения ответа увеличилось в два раза, хотя "в программе он ничего не менял, а процессоры такие же". Все верно, и программа не испортилась, и новый кластер не хуже, разница лишь в числе процессоров, используемых пакетом по умолчанию на каждой из этих кластерных систем.
Похожие вопросы вызывает изменение структуры памяти, сильно влияющей на эффективность работы программ: объем и частота работы оперативной памяти, количество уровней кэш-памяти и объем каждого уровня, возможность разделения какого-либо уровня несколькими ядрами или процессорами.
Еще одна ситуация. Человек приходит и говорит, что его программа стала "неожиданно" работать медленнее, почему? Стали разбираться, и оказалось, что раньше он работал на кластере, у которого было по два жестких диска на узел, а у нового кластера на каждом узле установлено лишь по одному. На всех узлах кластеров по два процессора, все процессы приложения исключительно интенсивно работают с локальными дисками. На узлах первого кластера потоки ввода/вывода от двух процессоров бесконфликтно разводились по разным дискам, а на втором кластере единственный жесткий диск на каждом узле становился узким местом и сдерживал работу процессоров. Пользователь знал об этой особенности своей программы, но на конфигурацию кластеров не обратил внимания.
Другой пользователь, но проблема та же: медленная работа программы. Стали разбираться, и оказалось, что человек изменил всего лишь один параметр программы, но не учел, что при этом значительно увеличились области памяти, выделяемые под массивы данных. В результате программа перестала помещаться в оперативную память, появился отсутствующий прежде свопинг, из-за чего время работы программы выросло на порядок.
Почему
Обсуждая подобные случаи, мы не ставим своей целью обвинить
пользователя в некомпетентности, в нежелании или неспособности
разобраться с возникающими проблемами. Задача обеспечения эффективного
выполнения программ сложна и многогранна, в расчет нужно принимать
весьма тонкие свойства программно-аппаратной среды кластера, для
исследования которых у пользователя просто может и не быть нужного
инструментария. Посмотрим на данные мониторинга динамики выполнения
Классическая ситуация. Сначала задача на всех узлах считается с
максимальной эффективностью: левые области всех картинок верхнего ряда
закрашены полностью, что говорит об использовании процессора на 100%.
Затем в некоторый момент эффективность резко падает. Начинаем
исследовать причины: одновременно с падением эффективности видим
усиление loadaverage равно 2, т.е.
числу процессоров на узле) и отсутствия обменов в сети (нижний ряд).
После выполненного анализа становится понятным источник проблем:
недостаток оперативной памяти.
(рис 7.1) Снижение эффективности выполнения программы из-за недостатка оперативной памяти и активизации свопингаУвы, несмотря на очевидную полезность, с такими данными, как
правило, работает только системный администратор, пользователю они
редко бывают доступны. Рассмотрим еще два примера использования данных
(рис 7.2) Снижение эффективности работы программы из-за регулярного появления посторонних процессов
(рис 7.3) Падение эффективности выполнения программы из-за медленной работы сетевого дискаВесьма поучительный пример для администраторов кластерных систем
показан на рис. 7.2. Из него ясно следует, что эффективность работы
программ определяется не только квалификацией пользователей, но и
аккуратной настройкой системного окружения администраторами. Более
того, пользователям разобраться самостоятельно в ситуациях подобного
рода почти невозможно. По серому цвету верхней половины верхней
диаграммы видно, что двухпроцессорный узел используется лишь
наполовину, один процессор все время простаивает - на узле выполняется
однопроцессорная задача. Работа другого процессора (нижняя часть
верхней диаграммы) регулярно прерывается, причем с той же
периодичностью резко возрастает как значение параметра loadaverage
(вторая диаграмма сверху), так и активность обмена страницами
оперативной памяти (нижняя диаграмма) при отсутствии сколько-нибудь
заметного использования области
В системе явно порождаются новые более cron, в результате которой трудоемкая системная
операция, обычно запускаемая раз в неделю, выполнялась намного
чаще.
Падение эффективности работы программы, которое показано на рис. 7.3, вызвано другими причинами. С
параметром loadaverage никаких проблем нет, его значение
всегда около 2. Зато резко возрастает активность работы с сетевым
диском (вторая диаграмма снизу, nfs_client ), и
Сетевые диски разделяются между всеми пользователями, доступны через сетевую файловую систему и, как правило, физически расположены на отдельных устройствах. Все это приводит к дополнительным задержкам, и работа с локальными дисками вычислительных узлов проходит намного быстрее. В нашей практике был случай, когда в программе изменили лишь путь к каталогу для размещения временных файлов, за счет чего время работы программы уменьшилось в 15 раз: исключили взаимодействие с сетевым диском, а всю активность перенесли на локальные диски узлов.
Следующий большой срез - это анализ эффективности системного и
прикладного программного обеспечения. Отчасти мы его уже затронули,
обсуждая аккуратную настройку
Быстро найти причину бед пользователей удается далеко не всегда,
иногда приходится проводить аккуратный детальный анализ характеристик
программного окружения. В одном проекте при переходе на новый
компьютер программа явно замедлилась, хотя никаких изменений в ее
текст не вносилось. Причина была найдена достаточно быстро: чрезмерно
большие задержки при выполнении операции барьерной синхронизации
процессов. Почему? Оказалось, что на систему поставили
экспериментальный вариант реализации
Важно осознать и то, что решить самостоятельно проблемы этого уровня пользователь, как правило, не может: знаний-то может и хватает, но прав что-либо менять в установках системы маловато. Здесь он должен работать в тесном контакте с системными администраторами, которые, в свою очередь, должны внимательно прислушиваться к вопросам и пожеланиям своих пользователей.
Основная задача в рамках анализа структуры прикладной программы состоит в поиске ответа на вопрос: "Можно ли не меняя алгоритма улучшить эффективность работы программы?". Алгоритм может обладать всеми нужными свойствами, в частности достаточной степенью параллелизма или локальностью использования данных, однако форма записи программы может скрыть эти особенности, и компилятор не сможет сгенерировать эффективный код. Нужно изменить структуру программы, сделать ее особенности явными и видимыми для компилятора, для чего в распоряжении есть целый арсенал приемов и методов эквивалентного преобразования программ. Занимаясь исследованиями в данном направлении в течение двух десятков лет, мы разработали и используем на практике комбинацию методов статического и динамического анализа, реализованных в экспериментальной системе исследования структуры программ V-Ray. Эффективных вариантов решения проблем подобного сорта может быть много, в конечном итоге все зависит от личного опыта, предпочтений, наработанных технологий, сложившихся правил по разработке больших программных комплексов авторскими коллективами.
Проведите простой эксперимент. Возьмите программу перемножения двух плотных квадратных матриц А=В*С размера, скажем, N=5000, примерно такого вида:
DO I = 1, N
DO J = 1, N
DO K = 1, N
A(I,J) = A(I,J) + B(I,K) * C(K,J)
Информационная структура данного фрагмента позволяет выбрать любой
порядок следования данных трех циклов, на правильность результата
работы программы это никак не повлияет. Однако выбранный порядок
сильно повлияет на время ее работы. Запустите шесть различных
вариантов программы, определяемых возможными комбинациями циклов на
компьютере с любым из процессоров Intel,
И, наконец, если анализ приложения показал, что структура программы не соответствует особенностям архитектуры компьютера, то проблемы эффективности исходной программы кроются в свойствах используемых алгоритмов. Единственное, что остается - это перейти к алгоритмическому анализу. Возможно, что в результате исследований этого этапа пользователю придется поменять алгоритм и полностью переписать некоторые части программы. В ряде случаев другого пути просто нет, к этому нужно быть готовым. В идеальном варианте разработка программы для кластера должна сразу проходить с учетом его архитектуры, тогда недоразумений со свойствами алгоритмов не возникнет.
Как мы видим, проблема анализа и повышения эффективности работы
Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.