Your SlideShare is downloading. ×
Mpi comm accept
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Mpi comm accept

577

Published on

Published in: Technology, Business
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
577
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
5
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. MPI_Comm_acceptmenerimapermintaanuntukmembentukintercommunicatorbaru 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 );Parametersport_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)RemarksMPI_COMM_ACCEPTmembangunkomunikasidenganklien.Sebutsajakomunikatorkolektif.Inimengembalikansebuahintercommunicator yangmemungkinkankomunikasidenganklien.Port_nameharustelahterbentukmelaluipanggilankeMPI_OPEN_PORT.informasi string didefinisikanolehaplikasi yang dapatmemungkinkankontrol yanglebihtepatuntukmenerimapanggilan.Thread and Interrupt SafetyThis routine is thread-safe. Iniberartibahwarutinitasdapatdenganamandigunakanolehbeberapa threadstanpaperluuntuksetiappenggunamemberikan threads lock.Namunrutinitasinitidakselamanyaaman.Biasanyainidisebabkankarenapenggunaanalokasimemorisepertimallocatauaktivitasruntime non-MPICH lainnya yang tidakaman.
  • 2. Notes for FortranSemuarutinitas MPI dalamFortran (kecualiuntuk MPI_WTIME dan MPI_WTICK)memilikiierrargumentambahan di akhirdaftarargumen. IERR adalah integer danmemilikiarti yangsamadengannilaikembalidarirutinitasdalam C. Dalam Fortran, rutinitas MPI adalahsubrutin,dandipanggildenganinstruksipanggilan (statement)All MPI objects (e.g., MPI_Datatype, MPI_Comm) are of type INTEGER in Fortran.ErrorsSemuarutinitas MPI (kecualiMPI_WtimedanMPI_Wtick) mengembalikannilai error. Rutinitas CsebagainilaidarifungsidanrutinitasFortranpada argument terakhir. Sebelumnilaidikembalikan,penangan error akandipanggil. Secara default, pembatalanpenanganan error adalahtugasdariMPI.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. MPItidakmenjaminbahwasebuah program MPI dapatberlanjutdalamdengan error sebelumnya,namunimplementasidari MPI akanmengusahakanjikaadakemungkinan.MPI_SUCCESS No error; MPI routine completed successfully.MPI_ERR_INFO Invalid InfoMPI_ERR_COMM Invalid communicator.Sebuahkesalahanumumadalahdenganmenggunakankomunikator null dalampanggilan (bahkantidakdiperbolehkandalamMPI_Comm_rank).Example CodeDibawahiniadalahilustrasidariMPI_Comm_accept.#include "mpi.h"#include<stdio.h>#include<stdlib.h>#include<string.h>#include<windows.h>/* Sleep */
  • 3. /* TesinimemeriksauntukmemastikanbahwakeduaMPI_Comm_connectsuntukdua port yangberbedasesuaidengan MPI MPI_Comm_acceptsterkait . Proses root membukadua port MPIdanmengirimkan port pertamauntuk proses 1 dan proses 2 kedua. Kemudian, prosesakarmenerimakoneksidari port keduadiikutioleh port pertama. Proses 1 dan 2 keduanyaterhubungkeroot,tetapi proses ke-2 pertama kali akansleepselama 3 detikuntukmemberikan proses 1waktuuntukmenghubungkankeroot. Root harusmenunggu*sampai proses 2menghubungkansebelummenerimakoneksidari 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 prosesinimencobauntuktersambung*/ 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;}

×