pppa_guid-r (1158386), страница 2
Текст из файла (страница 2)
DVM (INTERVAL [целочисленное выражение]) <оператор>,
а в языке FORTRAN-DVM:
CDVM$ INTERVAL[целочисленное выражение]
. . .
CDVM$ ENDINTERVAL
Выделив, например, тело цикла как интервал и задав в качестве целочисленного выражения индексную переменную цикла, можно оформить каждый виток цикла отдельным интервалом. Подобным образом можно получить характеристики четных и нечетных витков цикла, либо характеристики выполнения процедуры при заданных значениях ее параметров.
3.2Рекомендации по анализу характеристик
При разработке параллельной программы пользователь, как правило, преследует одну из двух возможных целей – обеспечить решение задачи в приемлемые сроки, либо создать программу, способную эффективно решать на различных параллельных ЭВМ задачи определенного класса.
В первом случае, если время выполнения программы удовлетворяет пользователя, то другие характеристики его могут уже не интересовать. Во втором случае главным критерием для пользователя является коэффициент эффективности распараллеливания. Если время выполнения или коэффициент эффективности не удовлетворяет пользователя, то ему необходимо анализировать потерянное время и его компоненты.
Прежде чем перейти к рекомендациям по анализу потерянного времени, сделаем ряд замечаний.
Во-первых, потерянное время (как и коэффициент эффективности распараллеливания) вычисляется, опираясь не на реальное время выполнения программы на одном процессоре, а на прогнозируемое время. Этот прогноз может отличаться от реального времени и в ту, и в другую сторону.
Реальное время может быть больше прогнозируемого из-за того, что при выполнении программы на одном процессоре одни и те же вычисления могут осуществляться медленнее, чем при выполнении на нескольких процессорах. Это объясняется тем, что при изменении объема используемых при вычислениях данных меняется скорость доступа к ним через кэш-память. Поскольку производительность современных процессоров сильно зависит от эффективности использования кэш-памяти, то реальное время может заметно превысить прогнозируемое.
Реальное время может быть меньше прогнозируемого, поскольку при прогнозе учитываются не все накладные расходы на поддержку выполнения параллельной программы. Эти неучтенные расходы, например, поиск информации в системных таблицах при выполнении некоторых часто используемых функций (замерять время выполнения которых невозможно без внесения неприемлемых искажений в выполнение программы), могут значительно сократиться при уменьшении количества процессоров до одного.
В результате влияния эффективности использования кэш-памяти и системных накладных расходов при выполнении программы на разных конфигурациях параллельной ЭВМ будут выдаваться различные значения полезного времени. Поэтому, если есть возможность выполнить программу на одном процессоре (а она может требовать гораздо больше оперативной памяти, чем имеется на одном процессоре), то желательно это сделать для получения представления об отличиях прогнозируемых времен от реального времени.
Во-вторых, время выполнения параллельной DVM-программы на одном процессоре может значительно отличаться от времени ее выполнения как последовательной программы. Это может быть следствием следующих причин:
-
Доступ к распределенным данным в параллельной программе отличается от доступа к ним в последовательной программе. Дополнительные накладные расходы, появляющиеся в параллельной программе, могут увеличить время ее выполнения на 10-30 процентов. Однако в параллельной программе может быть проведена такая оптимизация доступа к данным, которая для некоторых программ приведет к ускорению их выполнения по сравнению с последовательным случаем.
-
Трансформация DVM-программы в программу на стандартных языках Фортран 77 или Си может привести к различиям в оптимизации программ стандартными компиляторами. В результате, параллельная программа может выполняться либо медленнее, либо быстрее. Особенности оптимизации программ современными компиляторами существенно (десятки и сотни процентов) определяют эффективность их выполнения.
-
Некоторые накладные расходы на поддержку выполнения параллельной программы могут значительно замедлить ее выполнение (например, операции запроса и освобождения памяти в последовательной программе могут превратиться в параллельной программе в гораздо более сложные операции создания и уничтожения распределенного массива).
Поэтому, если есть возможность выполнить программу как обычную последовательную программу на одном процессоре (если это нельзя сделать на параллельной ЭВМ, то может быть это окажется возможным на рабочей станции), то желательно это сделать.
В случае заметного расхождения времен параллельного и последовательного выполнения программы, можно воспользоваться следующими возможностями DVM-системы.
DVM-программа может быть скомпилирована в специальном режиме, в котором она отличается от последовательной программы очень незначительно (тем не менее, влияние этих отличий на время выполнения надо тоже проверять), но содержит средства накопления временных характеристик на различных интервалах своего выполнения. Можно получить эти характеристики при последовательном выполнении и сравнить их с соответствующими характеристиками при параллельном выполнении на одном процессоре.
Описанные выше замечания пользователь должен иметь в виду, приступая к анализу потерянного времени и его компонент.
Сначала следует оценить три компоненты потерянного времени для интервала нулевого уровня (всей программы). Наиболее вероятно, что основная доля потерянного времени приходится на одну из первых двух компонент (недостаточный параллелизм или коммуникации).
В случае если причиной оказался недостаточный параллелизм, необходимо уточнить, на каких участках он обнаружен – последовательных или параллельных. В последнем случае причина может быть очень простой – неверное задание матрицы процессоров при запуске программы или неверное распределение данных и вычислений. Если же недостаточный параллелизм обнаружен на последовательных участках, то причиной этого, скорее всего, является наличие последовательного цикла, выполняющего большой объем вычислений. Устранение этой причины может потребовать больших усилий.
В том же случае, если основной причиной потерь являются коммуникации, то необходимо, прежде всего, обратить внимание на характеристику потери из-за рассинхронизации. Если эти потери велики, то необходимо рассмотреть характеристику разбалансировка, поскольку именно разбалансировка вычислений в параллельном цикле является наиболее вероятной причиной рассинхронизации и больших потерь на коммуникациях. Если величина разбалансировки намного меньше величины синхронизации, то необходимо обратить внимание на величину разброса времен коллективных операций. Если рассинхронизация не является следствием разброса времен завершения коллективных операций, то ее возможной причиной могут быть разбалансировки некоторых параллельных циклов, которые на рассматриваемом интервале выполнения программы могли взаимно компенсироваться. Поэтому имеет смысл перейти к рассмотрению характеристик разбалансировки на интервалах более низкого уровня.
Второй вероятной причиной больших потерь из-за рассинхронизации может быть рассинхронизация процессоров, которая возникает при выдаче операций ввода-вывода. Это происходит из-за того, что основная работа (обращение к функциям ввода-вывода операционной системы) производится на процессоре ввода-вывода, а остальные процессоры в это время ждут получения от него данных или информации о завершении коллективной операции. Эту причину потерь легко обнаружить, обратив внимание на соответствующую компоненту характеристики коммуникации – потери из-за коммуникаций при вводе-выводе.
Еще одной причиной больших потерь из-за коммуникаций могут оказаться задержки при запуске коллективных операций в асинхронном режиме. В этом случае надо обращаться к специалистам, сопровождающим коммуникационную библиотеку, используемую DVM-системой.
Основной причиной потерь из-за коммуникаций может быть и просто большое количество операций редукции или загрузки требуемых данных с других процессоров (обновление теневых граней или удаленный доступ). В этом случае может помочь реорганизация программы с целью объединения разрозненных операций редукции или обновления теневых граней в групповые операции.
Возможен и другой подход к анализу характеристик, когда сначала анализируются коэффициенты эффективности и потерянное время на различных интервалах первого уровня, затем второго уровня, и т.д. В результате определяется критический участок программы, на анализ характеристик которого и направляются основные усилия. При этом необходимо иметь в виду, что причиной потерь на данном интервале из-за рассинхронизации и простоев могут быть разбалансировки и разбросы времен не только на этом интервале, но и на других, выполнявшихся до него интервалах.
При отладке производительности программы пользователь не обязательно должен запускать ее с тем большим объемом вычислений, который будет характерен для использования программы при решении реальных задач. Он может ограничить, например, количество регулярно повторяющихся внешних итераций до одной-двух итераций. При этом коэффициент эффективности программы, существенно зависящий от потерь на тех участках программы, которые выполняются до начала первой итерации или после окончания последней итерации, может значительно снизиться. Однако пользователь может оформить выполнение внешних итераций в виде отдельного интервала и отлаживать его производительность по той же методике, которая была описана выше применительно к программе целиком.
4Запуск на выполнение со сбором статистики
Для сбора информации о производительности DVM-программы при ее запуске на многопроцессорной ЭВМ или сети рабочих станций параметр Is_DVM_STAT (признак сбора статистики) должен быть равен 1.
После окончания счета должен создаться файл с именем sts и длиной, равной размеру буфера статистики умноженному на количество процессоров, на которых считалась задача.
С помощью параметров можно изменять длину буфера статистики (StatBufLength), в котором накапливаются характеристики выполнения каждого интервала, и максимальный уровень вложенности интервалов (MaxIntervalLevel). Уменьшение уровня вложенности интервалов позволяет уменьшить количество интервалов, для которых будет собираться статистика, и сократить тем самым объем статистики.
Если параметр IsTimeVariation равен единице, то буфер статистики используется также для накопления информации о временах запуска и завершения всех коллективных операций. Эти времена используются визуализатором производительности для вычисления потенциальных потерь из-за рассинхронизации и разброса времен, а также для определения потенциального сокращения коммуникационных расходов из-за совмещения обменов с вычислениями. Если объема буфера недостаточно для накопления информации обо всех выполненных коллективных операциях, то об этом выдается предупреждающее сообщение. При этом надо учитывать, что визуализатор производительности, при вычислении выше перечисленных характеристик будет использовать неполную информацию.
Если при сборе данных были обнаружены ошибки, то файл все равно может создаться, а сообщение об ошибке будет выведено на экран или в файл.
Список сообщений:
-
Statistics: not enough memory for interval, data were not wrote to the file,
-
Statistics: number of ends of interval > number of begins of interval, data were not wrote to the file,
-
Statistics: end of interval nline = <N>, name = <name>, no end nline = <N> name =<name>, data were not wrote to the file,
-
Statistics: StatBufLength=<length>, increase buffer's size by <N> bytes, data were not wrote to the file,
-
Statistics: StatBufLength=<length>, not enough memory for times of collective operations, increase buffer's size by <N> bytes, only part of times of collective operations and all intervals were wrote to the file.
5Запуск анализатора производительности
Для получения временных характеристик по интервалам следует выполнить команду:
dvm pa sts <file name> [[[<ch1> <ch2> <ch3>] <level>] <numbers>]
| <file name> | – имя файла вывода, |
Запуск команды dvm pa –h выдаст описание параметров команды.
6Форма выдачи характеристик
Все характеристики записываются в текстовом виде в файл, имя которого пользователь задает при вызове анализатора производительности. Для каждого интервала выдается следующая информация:
-
имя файла с исходным текстом DVM-программы и номер первого оператора интервала в нем (SOURCE, LINE);
-
тип интервала – вся программа, параллельный цикл (PAR), последовательный цикл (SEQ) или выделенная пользователем последовательность операторов (USER);
-
номер уровня вложенности (LEVEL);
-
количество входов (и выходов) в интервал (EXE_COUNT);
-
значение выражения, заданного при описании интервала средствами языка (EXPR);
-
основные характеристики выполнения и их компоненты (Main characteristics);
-
минимальные, максимальные и средние значения характеристик выполнения программы на каждом процессоре (Comparative characteristics);
-
характеристики выполнения программы на каждом процессоре (Execution characteristics on processors).
При выдаче характеристик их компоненты располагаются в той же строке (справа в скобках), либо в следующей строке (справа от символов “*” или “-”).















