Я экспериментирую с распределенным алгоритмом кластеризации (реализованным с помощью MPI) на 24 компьютерах, которые я настроил в качестве кластера с помощью BCCD (загрузочного компакт-диска), который можно загрузить по адресу http://bccd.net/.Как измерить объем данных, передаваемых моей программой MPI?
Я написал пакетную программу для запуска своего эксперимента, который заключается в том, что я запускаю свой алгоритм несколько раз, изменяя количество узлов и размер входных данных.
Я хочу знать объем данных, используемых в MPI-коммуникациях для каждого запуска моего алгоритма, чтобы я мог видеть, как изменяется количество данных при изменении предыдущих параметров. И я хочу сделать все это автоматически, используя пакетную программу.
Кто-то сказал мне использовать tcpdump, но я нашел некоторые трудности в этом подходе.
Во-первых, я не знаю, как вызвать tcpdump в моей пакетной программе (которая написана на C++ с использованием системы команд для выполнения вызовов) перед каждым запуском моего алгоритма, так как tcpdump требует, чтобы другой терминал работал параллельно с мое заявление. И я не могу запустить tcpdump на другом компьютере, так как сеть использует коммутатор. Поэтому мне нужно запустить его на главном узле.
Во-вторых, я видел трафик с tcpdump во время моего эксперимента, и я не мог понять, какой порт использовался MPI. Кажется, он использует много портов. Я хотел знать, что для фильтрации пакетов.
В-третьих, я попытался захватить целые пакеты и сохранить их в файле с помощью tcpdump, и через несколько секунд файл был 3,5 МБ. Но весь мой эксперимент занимает 2 дня. Таким образом, окончательный файл журнала будет огромным, если я последую этому подходу.
Идеальный подход заключается в том, чтобы захватить только поле размера в заголовке пакетов и суммировать это, чтобы получить общий объем переданных данных. Таким образом, файл журнала будет намного меньше, чем если бы я захватил весь пакет. Но я не знаю, как это сделать.
Другим ограничением является то, что у меня нет доступа к компьютерному диску. Так что у меня только RAM и мой USB-накопитель на 4 ГБ. Поэтому я не могу иметь огромные лог-файлы.
Я уже думал об использовании некоторого инструмента для трассировки или профилирования MPI, например, упомянутого в http://www.open-mpi.org/faq/?category=perftools. Я тестировал только Sun Performance Analyzer до сих пор. Проблема в том, что, я думаю, будет сложно установить эти инструменты на BCCD и, возможно, даже невозможно. В дополнение к этому, этот инструмент заставит мой эксперимент занять больше времени, и он добавит дополнительные служебные данные. Но если кто-то знаком с BCCD и думаю, что это хороший выбор для использования одного из этих инструментов, пожалуйста, дайте мне знать.
Надеюсь, что у кого-то есть решение.
Спасибо за ваш ответ. Я проверю эти возможности. – cesarsalgado
Интерфейс профилирования, вероятно, является самым прямым способом получения информации, которую вы ищете. Также возможно, что конкретная реализация MPI уже предоставляет отчет об общем объеме сообщений, которые обмениваются. –