In che modo MPI è correlato al "passaggio di messaggi"?

3

In che modo, l'interfaccia Message Passing Interface (MPI) è correlata al concetto generale di "passaggio di messaggi"?

Certo, la domanda suono è ridicola. Sicuramente, "Message Passing Interface" è un'interfaccia per il passaggio dei messaggi, giusto? Tuttavia, non mi è chiaro se l'MPI sia in qualche modo correlato al concetto generale di passaggio del messaggio nei linguaggi di programmazione o se il nome "Interfaccia di passaggio dei messaggi" sia un artefatto storico.

Come descritto da Wikipedia , e poiché ho familiarità con esso, il messaggio che passa è un concetto dalla programmazione orientata agli oggetti in cui agli oggetti vengono inviati "messaggi" che richiedono un'azione ma che non sono strettamente accoppiati al codice che implementa quell'azione. I dettagli variano molto tra i linguaggi di programmazione, ma l'elemento cruciale che esiste un livello di riferimento indiretto che consente agli oggetti di decidere come implementare le funzioni membro in fase di esecuzione e senza che il chiamante conosca i dettagli. Ad esempio, i messaggi potrebbero essere una stringa che specifica l'azione richiesta insieme agli argomenti appropriati e gli oggetti che ricevono un messaggio deciderebbero quale codice inviare a basato sulla stringa e gli argomenti. Un altro componente è in genere che il messaggio è autonomo e gli argomenti nel messaggio non sono riferimenti a dati esterni al messaggio. Il chiamante potrebbe dover copiare i dati ma l'oggetto chiamato è libero di modificare i dati ricevuti in base alle esigenze senza preoccuparsi di influenzare il chiamante.

Al contrario, MPI è relativamente di basso livello - essendo solo leggermente più alto dei socket BSD estraendo i dettagli del SO - e non è OOP in natura.

    
posta Praxeolitic 05.10.2016 - 07:56
fonte

2 risposte

3

message passing is a concept from object oriented programming

No, il messaggio che passa è un concetto in programmazione orientata agli oggetti, non di programmazione orientata agli oggetti.

Il termine messaggio che passa ha un significato generale al di fuori di OOP, e in effetti al di fuori della programmazione in generale. Alan Kay non ha inventato il termine message passing specificamente per OOP, ha semplicemente usato il termine già esistente perché si adatta perfettamente.

OOP ha molte somiglianze con Internet: gli oggetti sono piccole macchine (interpreti) che hanno la loro RAM privata (variabili d'istanza) e codice (metodi) e possono comunicare tra loro solo inviando messaggi. Proprio come su Internet, non è possibile accedere direttamente alla RAM di un'altra macchina, non è possibile accedere direttamente al codice di un'altra macchina. L'unica cosa che puoi osservare è la risposta al tuo messaggio, ma non hai idea di come sia nata questa risposta: potrebbe essere una risposta pre-inscatolata (variabile d'istanza), una risposta costruita (invocazione del metodo), l'oggetto potrebbe avere chiesto a qualcun altro di creare la risposta (delegazione / proxy), e così via.

Non è un caso: mentre Internet e persino il suo predecessore (ARPANet) non esistevano ancora, Alan Kay conosceva le persone coinvolte e conosceva le loro ricerche e le loro idee. Inoltre, un altro gruppo di Xerox PARC stava solo inventando la rete Ethernet e personale.

E se ci pensi, questo è anche esattamente il modo in cui i messaggi tra gli umani lavorano nel mondo reale. Quindi, è esattamente il contrario dalla tua ipotesi: il termine esiste nel mondo reale, è stato quindi utilizzato in rete, perché si adatta alla metafora, ed è stato poi utilizzato in OOP per lo stesso motivo .

Nota che, come spiegato nella risposta di Doc Brown , l'MPI funziona praticamente esattamente come tu descrivi per il caso OOP, che a sua volta rende MPI OO .

    
risposta data 05.10.2016 - 09:33
fonte
4

message passing is a concept from object oriented programming

No, il messaggio che passa non è un concetto di di programmazione orientata agli oggetti, e l'articolo di Wikipedia non lo dice. Invece, la definizione è

message passing sends a message to a process (which may be an [...] object) and relies on the process and the supporting infrastructure to select and invoke the actual code to run. Message passing differs from conventional programming where a process, subroutine, or function is directly invoked by name.

(OOP, o almeno certe forme di OOP, usa questo concetto, ma questo non rende MP un concetto basato su OOP, solo viceversa).

MPI fornisce i mezzi per fare esattamente ciò che dice la definizione di cui sopra: ad esempio, un'operazione di invio (si veda qui ) invia un messaggio a un altro processo (che viene eseguito in parallelo), senza specificare il nome della funzione chiamata o il codice esatto da eseguire. Il processo di ricezione deve chiamare MPI_Recv per ottenere il messaggio, quindi il codice esatto che ottiene il messaggio è determinato dal destinatario , non dal chiamante.

Quindi, in breve, il nome non è solo un "manufatto storico", al contrario, il nome si adatta bene.

    
risposta data 05.10.2016 - 08:30
fonte

Leggi altre domande sui tag