трасировка Mpi приложений

15
Отладка, трассировка и оптимизация приложений

description

 

Transcript of трасировка Mpi приложений

Page 1: трасировка Mpi приложений

Отладка, трассировка и оптимизация приложений

Page 2: трасировка Mpi приложений
Page 3: трасировка Mpi приложений

Зачем?• Понять внутреннее устройство программы• Найти узкие места программы [80/20]• Обнаружить ошибки параллельного

программирования

Page 4: трасировка Mpi приложений

Как будем делать?• Трассировка с помощью ETW (встроено в

HPC Pack)1. mpiexec.exe –tracefile <файл трассы> <mpi приложение>

<параметры>2. Синхронизация3. Конвертация в нужный формат4. Сборка

• Виузализация с помощью Jumpshot

Page 5: трасировка Mpi приложений

Упражнение• Откройте исправленное решение

DebugMPIContrastStretch• Соберите в режиме Release / 64 bit• Подготовьте к выполнению на кластере:

– Скопируйте в свою папку на кластере приложение и картинку

– Сделайте пробный запуск через Job Manager

Page 6: трасировка Mpi приложений

Упражнение• В консоли Job Manager выберите:

– Actions Create New Job From Description File выберите Trace.xml

– Перейдите на вкладку Tasks и отредактируйте, указывая актуальные названия файлов и пути

– Запуск

Page 7: трасировка Mpi приложений

Упражнение• Файл трассы лежит в вашей папке

(расширение clog)• Откройте его с помощью Jumpshot (ярлык

на рабочем столе)

Page 8: трасировка Mpi приложений
Page 9: трасировка Mpi приложений

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

Page 10: трасировка Mpi приложений

Коллективные операции

Page 11: трасировка Mpi приложений

Упражнение• Найдите в проекте участок, где

производится рассылка размера картинки• Замените его на: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];

Page 12: трасировка Mpi приложений

Упражнение• Найдите в проекте участок, где

производится рассылка кусков картинки• Замените его на:

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));

Page 13: трасировка Mpi приложений

Упражнение• Скомпилируйте• Сделайте трассировку, замерьте время на

распространение картинки

Page 14: трасировка Mpi приложений

Упражнение• Перепишите функцию CollectImage с

использованием коллективной операции MPI_Scatter

• Описание функции можно найти здесь:http://www.mcs.anl.gov/research/projects/mpi/www/www3/

Page 15: трасировка Mpi приложений

© 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.