Как скомпилировать код на Фортране для профилирования с помощью gprof в OpenMPI? - PullRequest
0 голосов
/ 19 февраля 2019

Я могу скомпилировать свой код Openmpi с помощью компилятора gfortran.Синтаксис компиляции, который я даю:

mpif90 -o mycode.exe mycode.f90

mpirun -np 4 ./mycode.exe

Работает.И теперь я хочу профилировать свой код с помощью Gprof.Я знаю, что должен добавить флаг -pg, но если я поставлю его после mpif90, он упадет.Где я должен поставить флаг?

1 Ответ

0 голосов
/ 20 февраля 2019

Можете попробовать, посмотрите, как это даст.Предположим, вы используете openmpi.Создайте следующее как скрипт с именем mywrapper.sh

#!/bin/bash
prefix="gmon_${OMPI_COMM_WORLD_RANK}.out"
GMON_OUT_PREFIX=$prefix $*

И запустите ваш код с

mpif90 -o mycode.exe -pg mycode.f90
mpirun -np 4 mywrapper.sh ./mycode.exe

Тестовый код профилирования кода MPI (я использую C, но FORTRAN должен работать без разницы):

//file x.c
#include <mpi.h>
#include <stdio.h>
int main(int argc, char *argv[])
{
    int rank=9;
    MPI_Init(&argc, &argv);
    MPI_Comm_rank(MPI_COMM_WORLD, &rank);
    printf("Hello from rank=%d!\n", rank);
    MPI_Finalize();
    return 0;
}

Команда для компиляции и запуска теста

#!/bin/bash
mpicc -pg x.c
mpirun --hostfile hostfile mywrapper.sh ./a.out

Для простоты теста hostfile использует только локальный хост.Вывод команды:

Hello from rank=1!
Hello from rank=2!
Hello from rank=0!

Затем вы получите файл gprof, если не можете, это проблема конфигурации mpi.

.
├── a.out
├── gmon_0.out.2690
├── gmon_1.out.2692
├── gmon_2.out.2693
...