SlideShare a Scribd company logo
MPI_Comm_accept

menerimapermintaanuntukmembentukintercommunicatorbaru

    intMPI_Comm_accept(
    char *port_name,
    MPI_Info info,
    int root,
    MPI_Commcomm,
    MPI_Comm *newcomm
    );

    intMPI_Comm_accept(
    wchar_t *port_name,
    MPI_Info info,
    int root,
    MPI_Commcomm,
    MPI_Comm *newcomm
    );

Parameters

port_name
       [in] nama_port (string, digunakanhanyapada root)
info
       [in] implementasi-informasi yang berkaitan (handle, hanyapada root)
root
       [in] barisan / derajatpadacommdari node root (integer)
comm
       [in] commintracommunicator over which call is collective (handle)
newcomm
       [out] intercommunicator with client as remote group (handle)

Remarks

MPI_COMM_ACCEPT

membangunkomunikasidenganklien.Sebutsajakomunikatorkolektif.Inimengembalikansebuahintercom

municator yang

memungkinkankomunikasidenganklien.Port_nameharustelahterbentukmelaluipanggilanke
MPI_OPEN_PORT.informasi string didefinisikanolehaplikasi yang dapatmemungkinkankontrol yang

lebihtepatuntukmenerimapanggilan.


Thread and Interrupt Safety

This routine is thread-safe. Iniberartibahwarutinitasdapatdenganamandigunakanolehbeberapa threads

tanpaperluuntuksetiappenggunamemberikan threads lock.

Namunrutinitasinitidakselamanyaaman.Biasanyainidisebabkankarenapenggunaanalokasimemorisepert

imallocatauaktivitasruntime non-MPICH lainnya yang tidakaman.
Notes for Fortran

Semuarutinitas MPI dalamFortran (kecualiuntuk MPI_WTIME dan MPI_WTICK)

memilikiierrargumentambahan di akhirdaftarargumen. IERR adalah integer danmemilikiarti yang
samadengannilaikembalidarirutinitasdalam C. Dalam Fortran, rutinitas MPI adalahsubrutin,
dandipanggildenganinstruksipanggilan (statement)


All MPI objects (e.g., MPI_Datatype, MPI_Comm) are of type INTEGER in Fortran.

Errors

Semuarutinitas    MPI    (kecualiMPI_WtimedanMPI_Wtick)      mengembalikannilai   error.   Rutinitas   C
sebagainilaidarifungsidanrutinitasFortranpada     argument      terakhir.   Sebelumnilaidikembalikan,

penangan error akandipanggil. Secara default, pembatalanpenanganan error adalahtugasdari
MPI.Penanganankesalahandapatdiubahdengan :MPI_Comm_set_errhandler (for communicators),

MPI_File_set_errhandler (for files),

MPI_Win_set_errhandler (for RMA windows).

Rutinitas   MPI-1        MPI_Errhandler_setdapatdigunakan,     tetapipenggunaanyasudahditinggalkan,

Penanganankesalahan         MPI_ERRORS_RETURN      digunakankarenanilaierordapatdikembalikan. MPI
tidakmenjaminbahwasebuah          program   MPI   dapatberlanjutdalamdengan       error    sebelumnya,

namunimplementasidari MPI akanmengusahakanjikaadakemungkinan.


MPI_SUCCESS
       No error; MPI routine completed successfully.
MPI_ERR_INFO
       Invalid Info
MPI_ERR_COMM
       Invalid communicator.Sebuahkesalahanumumadalahdenganmenggunakankomunikator null
       dalampanggilan (bahkantidakdiperbolehkandalamMPI_Comm_rank).


Example Code

DibawahiniadalahilustrasidariMPI_Comm_accept.

#include "mpi.h"
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<windows.h>/* Sleep */
/*     TesinimemeriksauntukmemastikanbahwakeduaMPI_Comm_connectsuntukdua             port    yang
berbedasesuaidengan MPI MPI_Comm_acceptsterkait . Proses root membukadua port MPI
danmengirimkan port pertamauntuk proses 1 dan proses 2 kedua. Kemudian, proses
akarmenerimakoneksidari port keduadiikutioleh port pertama. Proses 1 dan 2 keduanyaterhubungkeroot
,tetapi proses ke-2     pertama kali akansleepselama 3 detikuntukmemberikan proses 1
waktuuntukmenghubungkankeroot.           Root         harusmenunggu*sampai          proses       2
menghubungkansebelummenerimakoneksidari proses 1.*/

int main( intargc, char *argv[] )
{
   intnum_errors = 0;
   int rank, size;
   char port1[MPI_MAX_PORT_NAME];
   char port2[MPI_MAX_PORT_NAME];
   MPI_Status status;
   MPI_Comm comm1, comm2;
   int data = 0;

     MPI_Init(&argc, &argv);
     MPI_Comm_size(MPI_COMM_WORLD, &size);
     MPI_Comm_rank(MPI_COMM_WORLD, &rank);
     if (size < 3)
     {
         printf("Three processes needed to run this test.n");fflush(stdout);
         MPI_Finalize();
         return 0;
     }

     if (rank == 0)
     {
         printf("0: opening ports.n");fflush(stdout);
         MPI_Open_port(MPI_INFO_NULL, port1);
         MPI_Open_port(MPI_INFO_NULL, port2);
         printf("opened port1: <%s>n", port1);
         printf("opened port2: <%s>n", port2);fflush(stdout);

       MPI_Send(port1, MPI_MAX_PORT_NAME, MPI_CHAR, 1, 0, MPI_COMM_WORLD);
       MPI_Send(port2, MPI_MAX_PORT_NAME, MPI_CHAR, 2, 0, MPI_COMM_WORLD);

       printf("accepting port2.n");fflush(stdout);
       MPI_Comm_accept(port2, MPI_INFO_NULL, 0, MPI_COMM_SELF, &comm2);
       printf("accepting port1.n");fflush(stdout);
       MPI_Comm_accept(port1, MPI_INFO_NULL, 0, MPI_COMM_SELF, &comm1);
       MPI_Close_port(port1);
       MPI_Close_port(port2);

       printf("sending 1 to process 1.n");fflush(stdout);
       data = 1;
       MPI_Send(&data, 1, MPI_INT, 0, 0, comm1);
       printf("sending 2 to process 2.n");fflush(stdout);
data = 2;
    MPI_Send(&data, 1, MPI_INT, 0, 0, comm2);

    MPI_Comm_disconnect(&comm1);
    MPI_Comm_disconnect(&comm2);
   }
   elseif (rank == 1)
   {
      MPI_Recv(port1, MPI_MAX_PORT_NAME, MPI_CHAR, 0, 0, MPI_COMM_WORLD, &status);
      MPI_Comm_connect(port1, MPI_INFO_NULL, 0, MPI_COMM_SELF, &comm1);
      MPI_Recv(&data, 1, MPI_INT, 0, 0, comm1, &status);
      if (data != 1)
      {
          printf("Received %d from root when expecting 1n", data);
          fflush(stdout);
          num_errors++;
      }
      MPI_Comm_disconnect(&comm1);
   }
   elseif (rank == 2)
   {
      MPI_Recv(port2, MPI_MAX_PORT_NAME, MPI_CHAR, 0, 0, MPI_COMM_WORLD, &status);
     /* Pastikanbahwa proses 1 memilikiwaktuuntukmelakukankoneksisebelum proses
inimencobauntuktersambung*/
      Sleep(3000);
      MPI_Comm_connect(port2, MPI_INFO_NULL, 0, MPI_COMM_SELF, &comm2);
      MPI_Recv(&data, 1, MPI_INT, 0, 0, comm2, &status);
      if (data != 2)
      {
          printf("Received %d from root when expecting 2n", data);
          fflush(stdout);
          num_errors++;
      }
      MPI_Comm_disconnect(&comm2);
   }
   MPI_Barrier(MPI_COMM_WORLD);
   MPI_Finalize();
   return 0;
}

More Related Content

DOCX
Rangkuman Ping -h dan Route -h
PPTX
207 p05
PDF
Pemrograman C++ - Sintaks Dasar
PDF
3. teknik looping dalam_pemrograman
PDF
Os2013 lap4-ridwan
PDF
C programming language notes (5)
PPTX
Logika algoritma
DOCX
File header adalah sebuah file yang digunakan untuk mendefinisikan beberapa f...
Rangkuman Ping -h dan Route -h
207 p05
Pemrograman C++ - Sintaks Dasar
3. teknik looping dalam_pemrograman
Os2013 lap4-ridwan
C programming language notes (5)
Logika algoritma
File header adalah sebuah file yang digunakan untuk mendefinisikan beberapa f...

What's hot (20)

PDF
soal-latihan-logika-algoritma-semester1
PPTX
Desain Kompiler - Kode Antara
DOCX
Tugas sp algo
PPTX
Latihan latihan logika algoritma
DOCX
Algoritma
PPTX
Fitrah hi hukum tugas so 2
DOCX
Awal dasar belajar c++
PPT
Presentasi Pengenalan konsep pemrograman
PDF
How to hack #IDSECCONF2014 ctf online challenge - nganggur
DOCX
Pemrograman SAP - 1
PPT
Penggunaan loop sebagai kerangka dasar algoritma
DOC
Asistensi 1 mod 3
DOC
Kompilasi13 ka p (1)
PDF
Praktikum 4A
PPTX
Pertemuan ke 5
PDF
12c Komunikasi Data Serial Di Pc Dengan Vb
PPTX
Intermediate code kode antara
PDF
12d Komunikasi Data Serial Pc Plc
PDF
Pt6 pt-loop komplek
DOC
Dasar Pemrograman materi kuliah
soal-latihan-logika-algoritma-semester1
Desain Kompiler - Kode Antara
Tugas sp algo
Latihan latihan logika algoritma
Algoritma
Fitrah hi hukum tugas so 2
Awal dasar belajar c++
Presentasi Pengenalan konsep pemrograman
How to hack #IDSECCONF2014 ctf online challenge - nganggur
Pemrograman SAP - 1
Penggunaan loop sebagai kerangka dasar algoritma
Asistensi 1 mod 3
Kompilasi13 ka p (1)
Praktikum 4A
Pertemuan ke 5
12c Komunikasi Data Serial Di Pc Dengan Vb
Intermediate code kode antara
12d Komunikasi Data Serial Pc Plc
Pt6 pt-loop komplek
Dasar Pemrograman materi kuliah
Ad

Similar to Mpi comm accept (20)

PPT
Algoritma Pemrograman - Perintah Input/Output
DOCX
MAKALAH PERULANGAN BAHASA C ( Diki Candra ).docx
PDF
Struktur perulangan dalam c++
PPT
Struktur Kontrol
PPTX
DOC
Modularisasi – function dalam c++
DOCX
Laporan praktikum modul ii & iii
PPT
Pertemuan 5 : Algoritma & Pemrograman
DOCX
Modul vii dan viii algo
PDF
about C Languages
DOC
670426587f8d8102a1eb712c3a13d9e5.doc
PPT
Pengenalan konsep pemrograman
PDF
adoc.pub_bahasa-pemrograman-c-language.pdf
DOCX
modul algoritma Bab 2
PDF
Penggunaan prosedur dan fungsi pada pemrograman c++
DOCX
Laporan program chatting1
PPTX
Algoritma pemrograman 6
PDF
Materi : Chapter 1 Pemrograman Lanjut.pdf
PPT
PDF
Tugas_pemrograman3_1100631026_Helmi_MH_
Algoritma Pemrograman - Perintah Input/Output
MAKALAH PERULANGAN BAHASA C ( Diki Candra ).docx
Struktur perulangan dalam c++
Struktur Kontrol
Modularisasi – function dalam c++
Laporan praktikum modul ii & iii
Pertemuan 5 : Algoritma & Pemrograman
Modul vii dan viii algo
about C Languages
670426587f8d8102a1eb712c3a13d9e5.doc
Pengenalan konsep pemrograman
adoc.pub_bahasa-pemrograman-c-language.pdf
modul algoritma Bab 2
Penggunaan prosedur dan fungsi pada pemrograman c++
Laporan program chatting1
Algoritma pemrograman 6
Materi : Chapter 1 Pemrograman Lanjut.pdf
Tugas_pemrograman3_1100631026_Helmi_MH_
Ad

Recently uploaded (9)

PDF
Struktur Data - 3 Array: Konsep & Implementasi
PPTX
Fiber_expert_development_program_rev.1.pptx
PDF
Struktur Data - 4 Pointer & Linked List
PDF
Struktur Data - 2 Pengantar Struktur Data
PPTX
Materi_Array_Karakter_String untuk kelas XI sma.pptx
PDF
Struktur Data - 1 Kontrak Perkuliahan
PPTX
BAHASA MELAYU STANDARD kwjekqjeljwqelkqw
PPTX
Pengantar Kriptografi - Keamanan dan Data Privasi
PDF
Rekomendasi Riset Lanjutan : perspektif_futurologis.pdf
Struktur Data - 3 Array: Konsep & Implementasi
Fiber_expert_development_program_rev.1.pptx
Struktur Data - 4 Pointer & Linked List
Struktur Data - 2 Pengantar Struktur Data
Materi_Array_Karakter_String untuk kelas XI sma.pptx
Struktur Data - 1 Kontrak Perkuliahan
BAHASA MELAYU STANDARD kwjekqjeljwqelkqw
Pengantar Kriptografi - Keamanan dan Data Privasi
Rekomendasi Riset Lanjutan : perspektif_futurologis.pdf

Mpi comm accept

  • 1. MPI_Comm_accept menerimapermintaanuntukmembentukintercommunicatorbaru intMPI_Comm_accept( char *port_name, MPI_Info info, int root, MPI_Commcomm, MPI_Comm *newcomm ); intMPI_Comm_accept( wchar_t *port_name, MPI_Info info, int root, MPI_Commcomm, MPI_Comm *newcomm ); Parameters port_name [in] nama_port (string, digunakanhanyapada root) info [in] implementasi-informasi yang berkaitan (handle, hanyapada root) root [in] barisan / derajatpadacommdari node root (integer) comm [in] commintracommunicator over which call is collective (handle) newcomm [out] intercommunicator with client as remote group (handle) Remarks MPI_COMM_ACCEPT membangunkomunikasidenganklien.Sebutsajakomunikatorkolektif.Inimengembalikansebuahintercom municator yang memungkinkankomunikasidenganklien.Port_nameharustelahterbentukmelaluipanggilanke MPI_OPEN_PORT.informasi string didefinisikanolehaplikasi yang dapatmemungkinkankontrol yang lebihtepatuntukmenerimapanggilan. Thread and Interrupt Safety This routine is thread-safe. Iniberartibahwarutinitasdapatdenganamandigunakanolehbeberapa threads tanpaperluuntuksetiappenggunamemberikan threads lock. Namunrutinitasinitidakselamanyaaman.Biasanyainidisebabkankarenapenggunaanalokasimemorisepert imallocatauaktivitasruntime non-MPICH lainnya yang tidakaman.
  • 2. Notes for Fortran Semuarutinitas MPI dalamFortran (kecualiuntuk MPI_WTIME dan MPI_WTICK) memilikiierrargumentambahan di akhirdaftarargumen. IERR adalah integer danmemilikiarti yang samadengannilaikembalidarirutinitasdalam C. Dalam Fortran, rutinitas MPI adalahsubrutin, dandipanggildenganinstruksipanggilan (statement) All MPI objects (e.g., MPI_Datatype, MPI_Comm) are of type INTEGER in Fortran. Errors Semuarutinitas MPI (kecualiMPI_WtimedanMPI_Wtick) mengembalikannilai error. Rutinitas C sebagainilaidarifungsidanrutinitasFortranpada argument terakhir. Sebelumnilaidikembalikan, penangan error akandipanggil. Secara default, pembatalanpenanganan error adalahtugasdari MPI.Penanganankesalahandapatdiubahdengan :MPI_Comm_set_errhandler (for communicators), MPI_File_set_errhandler (for files), MPI_Win_set_errhandler (for RMA windows). Rutinitas MPI-1 MPI_Errhandler_setdapatdigunakan, tetapipenggunaanyasudahditinggalkan, Penanganankesalahan MPI_ERRORS_RETURN digunakankarenanilaierordapatdikembalikan. MPI tidakmenjaminbahwasebuah program MPI dapatberlanjutdalamdengan error sebelumnya, namunimplementasidari MPI akanmengusahakanjikaadakemungkinan. MPI_SUCCESS No error; MPI routine completed successfully. MPI_ERR_INFO Invalid Info MPI_ERR_COMM Invalid communicator.Sebuahkesalahanumumadalahdenganmenggunakankomunikator null dalampanggilan (bahkantidakdiperbolehkandalamMPI_Comm_rank). Example Code DibawahiniadalahilustrasidariMPI_Comm_accept. #include "mpi.h" #include<stdio.h> #include<stdlib.h> #include<string.h> #include<windows.h>/* Sleep */
  • 3. /* TesinimemeriksauntukmemastikanbahwakeduaMPI_Comm_connectsuntukdua port yang berbedasesuaidengan MPI MPI_Comm_acceptsterkait . Proses root membukadua port MPI danmengirimkan port pertamauntuk proses 1 dan proses 2 kedua. Kemudian, proses akarmenerimakoneksidari port keduadiikutioleh port pertama. Proses 1 dan 2 keduanyaterhubungkeroot ,tetapi proses ke-2 pertama kali akansleepselama 3 detikuntukmemberikan proses 1 waktuuntukmenghubungkankeroot. Root harusmenunggu*sampai proses 2 menghubungkansebelummenerimakoneksidari proses 1.*/ int main( intargc, char *argv[] ) { intnum_errors = 0; int rank, size; char port1[MPI_MAX_PORT_NAME]; char port2[MPI_MAX_PORT_NAME]; MPI_Status status; MPI_Comm comm1, comm2; int data = 0; MPI_Init(&argc, &argv); MPI_Comm_size(MPI_COMM_WORLD, &size); MPI_Comm_rank(MPI_COMM_WORLD, &rank); if (size < 3) { printf("Three processes needed to run this test.n");fflush(stdout); MPI_Finalize(); return 0; } if (rank == 0) { printf("0: opening ports.n");fflush(stdout); MPI_Open_port(MPI_INFO_NULL, port1); MPI_Open_port(MPI_INFO_NULL, port2); printf("opened port1: <%s>n", port1); printf("opened port2: <%s>n", port2);fflush(stdout); MPI_Send(port1, MPI_MAX_PORT_NAME, MPI_CHAR, 1, 0, MPI_COMM_WORLD); MPI_Send(port2, MPI_MAX_PORT_NAME, MPI_CHAR, 2, 0, MPI_COMM_WORLD); printf("accepting port2.n");fflush(stdout); MPI_Comm_accept(port2, MPI_INFO_NULL, 0, MPI_COMM_SELF, &comm2); printf("accepting port1.n");fflush(stdout); MPI_Comm_accept(port1, MPI_INFO_NULL, 0, MPI_COMM_SELF, &comm1); MPI_Close_port(port1); MPI_Close_port(port2); printf("sending 1 to process 1.n");fflush(stdout); data = 1; MPI_Send(&data, 1, MPI_INT, 0, 0, comm1); printf("sending 2 to process 2.n");fflush(stdout);
  • 4. data = 2; MPI_Send(&data, 1, MPI_INT, 0, 0, comm2); MPI_Comm_disconnect(&comm1); MPI_Comm_disconnect(&comm2); } elseif (rank == 1) { MPI_Recv(port1, MPI_MAX_PORT_NAME, MPI_CHAR, 0, 0, MPI_COMM_WORLD, &status); MPI_Comm_connect(port1, MPI_INFO_NULL, 0, MPI_COMM_SELF, &comm1); MPI_Recv(&data, 1, MPI_INT, 0, 0, comm1, &status); if (data != 1) { printf("Received %d from root when expecting 1n", data); fflush(stdout); num_errors++; } MPI_Comm_disconnect(&comm1); } elseif (rank == 2) { MPI_Recv(port2, MPI_MAX_PORT_NAME, MPI_CHAR, 0, 0, MPI_COMM_WORLD, &status); /* Pastikanbahwa proses 1 memilikiwaktuuntukmelakukankoneksisebelum proses inimencobauntuktersambung*/ Sleep(3000); MPI_Comm_connect(port2, MPI_INFO_NULL, 0, MPI_COMM_SELF, &comm2); MPI_Recv(&data, 1, MPI_INT, 0, 0, comm2, &status); if (data != 2) { printf("Received %d from root when expecting 2n", data); fflush(stdout); num_errors++; } MPI_Comm_disconnect(&comm2); } MPI_Barrier(MPI_COMM_WORLD); MPI_Finalize(); return 0; }