2016-05-19 10 views
1

Ich habe eine Struktur namens Department, und Array der Struktur Abteilung namens Departments, ich möchte dieses Array für die bestimmte Anzahl von Prozessen zu streuen, so dass jeder Prozess Current ein Element (struct) (Abteilung) vom Departments Array `Scatter Array von Strucubers in C MPI

#include <stdio.h> 
#include <stdlib.h> 
#include <mpi.h> 


struct Department{ 
int position; 
int Department_Destinations[100]; 
}; 

struct Department Current,Departments[100]; 

int main(int argc, char** argv){ 

int rank, nprocess; 
MPI_Init(&argc, &argv); 
MPI_Comm_rank(MPI_COMM_WORLD, &rank); 
MPI_Comm_size(MPI_COMM_WORLD, &nprocess); 

if(rank==0){ 
for(i=0;i<n;i++){ 
    Departments[i].position=i+1; 
    for(j=0;j<c1;j++){ 
     Departments[i].Department_Destinations[j]=0; 
    } 
} 

MPI_Scatter(Departments, sizeof(Current), MPI_BYTE, Current ,sizeof(Current), MPI_BYTE, 0,MPI_COMM_WORLD); 

MPI_Finalize(); 
return 0; 
} 

die Anzahl der Verfahren auf die Anzahl der Departments Elemente gleich Angenommen (Abteilung)

Bei der Kompilierung und diesen Code ausführen es gibt mir Fehler: "inkompatibler Typ für Argument 4 von 'MPI_Scatter'"

Könnte jemand beantworten, warum dieser Fehler und wie streuen Array von Struktur (Abteilungen) in MPI?

Vielen Dank im fortgeschrittenen

+1

Dies ist eine schreckliche und sehr nicht tragbare Weise Strukturen zu übergeben. Suchen Sie auf der Website nach Fragen und Antworten, die 'MPI_Type_create_struct' enthalten, um Informationen zum ordnungsgemäßen Senden von Strukturen zu erhalten. –

Antwort

1

MPI_Scatter() einen Zeiger auf Puffer muss streuen und einen Zeiger auf den Puffer, der die Nachricht empfangen wird.

Wenn struct Department Current,Departments[100];, könnten Sie versuchen:

MPI_Scatter(Departments, sizeof(Current), MPI_BYTE, &Current ,sizeof(Current), MPI_BYTE, 0,MPI_COMM_WORLD); 
+0

vielen Dank @francis ... es dauerte 2 Stunden, bevor Sie diese Frage stellen, versuchen Sie, dieses Problem zu lösen – Islams

+0

Gern geschehen! Fühlen Sie sich frei, die Antworten zu akzeptieren, die Ihre Probleme gelöst haben, indem Sie auf die weiße Markierung direkt unter den Upvote/Downvote-Pfeilen klicken. Sie können auch Fragen und Antworten aufwerten, die sich als wertvoll erwiesen haben. – francis