Путиводитель по CRAY. Отладка кода

Автор перевода: Братуха М.А.

Минимум для отладки

  1. Скомпилировать программу с опцией –g или –G (поддержка быстрой отладки)
  2. Иметь в наличии программу-дебаггер (кроме PGI, он же PGDBG)

Базовый набор утилит для работы с Cray

lgdb (модификация gdb)

Команда: lgdb

Позволяет запускать исследуемое приложение с помощью утилиты aprun и сопутствующие процессы gdb на удалённой ветви.

Abnormal Termination Processing (ATP)

Команда: ataprun

Позволяет получать подробную информацию в случае аварийного завершения приложения. Поддерживает все популярные модели параллельного программирования (MPI, OpenMP и т.д.). Есть нюансы при работы с разными версиями CLE.

MRNet

Команда: mrnet

Легко-настраиваемая, высокопроизводительная система для работы с параллельными приложениями с поддержкой архитектуры master/slave. Снижает затраты ресурсов при использовании параллельных приложений, путём включения их в древовидную сеть, называемую TBON (tree-based overlay network). Тем сама сокращается время анализа, пересылки и вычисления на стороне фронтенда. Утилиты, основанные на MRNet использую потоки для пересылки данных между бэкэндо и фрнотэндом. Внутренние процессы MRNet используют фильтры для синхронизации и агрегации данных.

STAT (Stack Trace Analysis Tool)

Команда: stat

Соединяет воедино stack-trace всех процессов параллельного приложения и предоставляет пространственное отображение в виде 2D или 3D графа.

Быстрая отладка (Cray Fast-Track Debugging)

Компиляции приложения с опцией –g предоставляет достаточное количество информации для приостановки, пошагового выполнения, установления точек останова и т.д., но это слишком ресурсно-затратно и приложение запускается очень медленно. Эта опция создаёт один исполняемый файл с полной DWARF информацией.

Быстрая отладка (опция –G) значительно увеличивает скорость отладки путём создания двух исполняемых файлов внутри одного, первый из которых содержит полную DWARF информацию, а второй оптимизирован на скорость выполнения. По сути, размер выходного файла получается значительно большим, чем обычный исполняемый файл, но когда параллельная программа запускается в дебаггере, который поддерживает быструю отладку, то он запускает оптимизированную часть файла и выполняет её до тех пор, пока не наткнётся на точку останова, в таком случае дебаггер переключается на не оптимизированную часть кода, что тем самым позволяет видеть регистры процессоры, устанавливать новые точки останова, приостанавливать/возобновлять выполнение программы и делать пошаговое выполнение программы, т.е. всё то же самое, что и при обычной опции –g.

На фронтэнде быструю отладку поддерживают компиляторы из CCE окружения (Cray Compiling Environment). На бэкэнде отладка поддерживается дебаггером lgdb и Allinea DDT.

Аварийное завершение

В случае аварийного завершения приложения, генерируется файл для первого из процессов с информацией о причине завершения. Если файл с подобным именем уже существует – он перезаписывается.

На больших MPP системах с тысячами процессов этот файл может и не содержать актуальной информации о причине завершения. По этой причине, система Cray использует ATP. В том случае, если ATP включён, приложение, которое аварийно завершилось, генерирует подробный набор данных от всех процессов (со стеком вызовов) и записывает их в один файл atpMergedBT.dot. Процесс, вызвавший аварийное завершение, шлёт в stderr причину (номер сигнала) завершения.

Опциональные утилиты для работы с Cray

Использование TotalView

Команды: totalview, totalviewcli

TotalView это продукт компании TotalView Technologies, которая предоставляет отладку приложений, запущенных на нескольких вычислительных узлах. Эта программа имеет как графический интерфейс (totalview) так и командную оболочку (totalviewcli). Чтобы присоединиться (attach) к уже запущенному приложению, необходимо войти (log in) на том же узле, на котором запущен процесс. После чего нужно присоединиться к процессу aprun, который используется для запуска параллельной программы. Далее в окне программы totalview можно выбрать к какому из экземпляров нужно присоединяться. Поставляемые экземпляр TotalView для работы с Cray немного отличается от стандартной реализации и содержит некоторый неподдерживаемый функционал:

  1. Недоступна отладка MPI_Spawn(), OpenMP или Cray SHMEM программ;
  2. Недоступны EVAL отметки и выражения;
  3. Недоступные преобразования типов классов, состоящих в stl в PGI C++ компиляторе;
  4. Недоступна обработка исключений для библиотеки RTL компилятора PGI C++;
  5. Порождение (spawning) процесса на вычислительных процессах;
  6. Машинные схемы разбиения, планирование или командные системы.

Использование DDT

Команда: ddt

DDT это масштабируемый дебаггер от компании Allinea Software с графическим интерфейсом. Может быть использован для отладки программ на Fortran, C и C++, включая MPI и OpenMP код. Так же позволяет запускать и отлаживать программы, присоединятся к уже запущенным программам, или открывать и отлаживать основные (core) файлы.

DDT совместим с: Cray, PGI, GCC, PathScale и компиляторами Intel.