home   contents  previous      next        up

Отладка транспьютерных программ

Отлаживать параллельную программу, выполняющуюся на многопроцессорном комплексе, значительно труднее, чем отлаживать последовательную программу, работающую на одном процессоре.

Символьные отладчики языков высокого уровня для традиционных однопроцессорных компьютеров позволяют отлаживать программы, останавливая их выполнение в позиции ошибки или точки останова. В точке останова можно исследовать и изменять значения переменных, доступных из текущей позиции. Это глобальные переменные или переменные функций/блоков, объемлющих текущую позицию (переменные, доступные по статической цепочке). Кроме того, переходя (по динамической цепочке вызовов функций) от вызванной функции к вызвавшей функции, можно исследовать как собственные переменные функции, так и переменные, видимые по их статическим цепочкам. Тексты всех функций можно просмотреть, можно расставлять в них новые точки останова.

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

Пакет INMOS toolset предоставляет символьный отладчик idebug для анализа и отладки транспьютерных программ. Отладчик idebug загружается в головной транспьютер сети, а отлаживаемая параллельная программа - в остальные транспьютеры сети.

Отладчик имеет команды, позволяющие проанализировать процессы и процессоры в сети. Можно просмотреть списки процессов, ожидающих выполнение (run queues), таймер (timer queues), обмена данными по линиям связи (links). Команды, показывающие содержимое списков процессов, для каждого процесса выводят на экран пары значений регистров Iptr и Wdesc, называемые дескрипторами процессов.

Можно "выделить" из какого-нибудь списка интересующий вас процесс. Выделенный процесс можно локализовать - локализовать исходный текст, соответствующий этому процессу. Базовым пунктом понятия локализации является адрес ячейки памяти (значение Iptr). Поэтому, говоря о локализации функции-процесса, подразумевается выделение из общего ряда некоторой позиции в функции-процессе. По адресу и карте памяти программы, построенной редактором связей, отладчик узнает код, какого объектного модуля располагается в области памяти этой ячейкой. Из объектного модуля он извлекает информация об имени исходного файла программы и номер строки, соответствующий адресу ячейки. Значение регистра Wdesc позволяет узнать адрес рабочей области процесса и его приоритет.

Локализовать можно функции как выполнявшихся, так и выполняющихся процессов. Однако не у каждой локализованной функции можно исследовать и/или изменять значения переменных, поскольку можно локализовать функцию, не входящую в динамическую цепочку вызовов или принадлежащую процессу, закончившему выполнение.

Отладчик idebug можно использовать для:

  1. посмертного анализа программ (post-mortem debugging), аварийно прекративших исполнение, в котором исследуется содержимое памяти транспьютеров сети или дампа памяти;
  2. интерактивного анализа программ (breakpoint debugging), в котором взаимодействие с параллельной программой происходит в указываемых пользователем точках останова.

Отладчик имеет два режима взаимодействия с программой:

  1. Символьная отладка (symbolic debugging).
    Этот режим позволяет отлаживать программы на уровне исходного языка, оперируя символами (переменными, константами, каналами, функциями) и операторами программы.
  2. Управляющий экран (Monitor page).
    Это низкоуровневый режимом отладки, который обеспечивает прямой доступ к ресурсам транспьютера (регистрам, памяти), позволяет следить за работой транспьютеров.


home   contents  previous      next        up