2017-10-20 15 views
0

Quelle est la structure de données utilisée pour stocker la valeur de retour de MPI_MAXLOC en fonction MPI_Reduce() pour un tableau de doubles valeursMPI_MAXLOC pour un tableau de valeurs doubles

+0

Bienvenue sur stackoverflow! Il y a un exemple d'utilisation de MPI_MAXLOC dans c dans les [normes mpi, à la page 181] (http://mpi-forum.org/docs/mpi-3.1/mpi31-report.pdf). Pourriez-vous décrire votre problème d'une façon plus précise, en fournissant ce que vous avez essayé, ou un code indiquant la structure à réduire? – francis

Répondre

1

dans C, le type MPI vous devez utiliser est MPI_DOUBLE_INT, et il n'y a pas de structure C prédéfinie pour que (par exemple, il faut créer manuellement) comme ceci

struct { 
    double val; 
    int rank; 
}; 

FWIW, le MPI_DOUBLE_INT type de données prédéfini est défini comme ceci

type[0] = MPI_DOUBLE 
type[1] = MPI_INT 
disp[0] = 0 
disp[1] = sizeof(double) 
block[0] = 1 
block[1] = 1 
MPI_TYPE_CREATE_STRUCT(2, block, disp, type, MPI_DOUBLE_INT) 

Notez que dans Fortran, vous devez utiliser MPI_2DOUBLE_PRECISION (et oui, l'indice est une double précision en Fortran!)

cela est expliqué dans http://mpi-forum.org/docs/mpi-3.1/mpi31-report/node114.htm#Node114 et il y a même un exemple avec double pour les deux C et Fortran