трасировка Mpi приложений
-
Upload
michael-karpov -
Category
Business
-
view
533 -
download
0
description
Transcript of трасировка Mpi приложений
Отладка, трассировка и оптимизация приложений
Зачем?• Понять внутреннее устройство программы• Найти узкие места программы [80/20]• Обнаружить ошибки параллельного
программирования
Как будем делать?• Трассировка с помощью ETW (встроено в
HPC Pack)1. mpiexec.exe –tracefile <файл трассы> <mpi приложение>
<параметры>2. Синхронизация3. Конвертация в нужный формат4. Сборка
• Виузализация с помощью Jumpshot
Упражнение• Откройте исправленное решение
DebugMPIContrastStretch• Соберите в режиме Release / 64 bit• Подготовьте к выполнению на кластере:
– Скопируйте в свою папку на кластере приложение и картинку
– Сделайте пробный запуск через Job Manager
Упражнение• В консоли Job Manager выберите:
– Actions Create New Job From Description File выберите Trace.xml
– Перейдите на вкладку Tasks и отредактируйте, указывая актуальные названия файлов и пути
– Запуск
Упражнение• Файл трассы лежит в вашей папке
(расширение clog)• Откройте его с помощью Jumpshot (ярлык
на рабочем столе)
Rank = 0 Rank = 3Rank = 1 Rank = 2
Process 1 Process 2 Process 3 Process 4
CN1 CN2
main mainmainmain
Mpi_send
Mpi_send
Mpi_send
Mpi_receive
Mpi_receiveMpi_receive
Коллективные операции
Упражнение• Найдите в проекте участок, где
производится рассылка размера картинки• Замените его на:int params[2] = {0, 0}; if (myRank == 0) // Master preps data for bcast: {
params[0] = rows; params[1] = cols;
} // EVERYONE participates in broadcast (one sends, rest receive): MPI_Bcast(params, 2, MPI_INT, 0 /*master broadcasts*/, MPI_COMM_WORLD); // EVERYONE now knows the size of the image: rows = params[0]; cols = params[1];
Упражнение• Найдите в проекте участок, где
производится рассылка кусков картинки• Замените его на:
int rowsPerProc = rows / numProcs; int leftOverRows = rows % numProcs; void *sendbuf = (myRank == 0) ? image[leftOverRows] : NULL; void *recvbuf = (myRank == 0) ? chunk[1+leftOverRows] : chunk[1];int count = rowsPerProc * cols; MPI_Scatter(sendbuf, count, MPI_PIXEL_T, recvbuf, count, MPI_PIXEL_T, 0
/*master scatters*/, MPI_COMM_WORLD); if (myRank == 0 && leftOverRows > 0)
memcpy_s(chunk[1], leftOverRows*cols*sizeof(PIXEL_T), image[0], leftOverRows*cols*sizeof(PIXEL_T));
Упражнение• Скомпилируйте• Сделайте трассировку, замерьте время на
распространение картинки
Упражнение• Перепишите функцию CollectImage с
использованием коллективной операции MPI_Scatter
• Описание функции можно найти здесь:http://www.mcs.anl.gov/research/projects/mpi/www/www3/
© 2008 Microsoft Corporation. All rights reserved. Microsoft, Windows, Windows Vista and other product names are or may be registered trademarks and/or trademarks in the U.S. and/or other countries. The information herein is for informational purposes only and represents the current view of Microsoft Corporation as
of the date of this presentation. Because Microsoft must respond to changing market conditions, it should not be interpreted to be a commitment on the part of Microsoft, and Microsoft cannot guarantee the accuracy of any information provided after the date of this presentation.
MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.