2012-04-09 7 views
2

in Fortran, kann ich eine Zeichenfolge wie erklären:Wie wird MPI_Send mit MPI_Character implementiert?

character*80 mystring 

und es dann als senden:

call MPI_Send(mystring,len(mystring),MPI_CHARACTER,...,ierr) 

Alternativ ich meinen String als Array von Zeichen erklären könnte (viel mehr im Einklang wie die Dinge in C traditionell getan werden)

character mystring(80) 

und dann senden, wie:

Mein Verständnis ist, dass diese beiden Aufrufe unterschiedliche Schnittstellen beim Aufruf einer C-Funktion haben würden. (Ersteres wird oft vom Compiler implementiert, indem ein zusätzlicher Parameter nach Wert übergeben wird, der die Länge des Strings enthält, während letzterer diesen Parameter nicht übergibt). Also, wie kennt die MPI-Implementierung (typischerweise in C geschrieben) den Unterschied?

Antwort

1
+0

Aber wie funktioniert das mit MPI_INTEGER, MPI_REAL usw.? Im ersten Fall sendet der Compiler ein zusätzliches Längenargument, während der Compiler, wenn der Datentyp "integer", "real", "double precision" ist, kein zusätzliches Argument anfügt. Da es dieselbe Routine aufruft, scheint es hier ein Problem zu geben ... – mgilson

+0

Das gleiche wie bei 'Zeichen * (*)', das keine Stringlänge anfügt. – Anycorn

Verwandte Themen