Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Duisembiev-Parallel-esep.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
5.86 Mб
Скачать

Int mpi_Testsome( int incount, mpi_Request *requests, int *outcount, int *indexes, mpi_Status *statuses)

  • incount —асинхронды операциялардың идентификаторлар саны;

  • requests — асинхронды қабылдау немесе жіберу операцияларының идентификаторлары;

  • out outcount — аяқталған алмасу операцияларының идентификаторлар саны;

  • out indexes — аяқталған алмасу операцияларының нөмірі;

  • out statuses —хабарламаны қабылдау аяқталған операцияларының параметрлері.

Фортран тіліндегі нұсқасы:

MPI_TESTSOME(INCOUNT, REQUESTS, OUTCOUNT, INDEXES, STATUSES,

IERR)

Integer incount, requests(*), outcount, indexes(*), ierr,

STATUSES(MPI_STATUS_SIZE,*)

Бұл функцияны MPI_WAITSOME функциясының (процедурасының) аналогы десе болады. Бірақ мұнда қайтарылым тез арада жүргізіледі. Егер шақырылуға дейін көрсетілген операциялардың бірде-бірі аяқталмаса, онда OUTCOUNT мәні нөлге тең болады.

Int mpi_Iprobe( int source, int msgtag, mpi_Comm comm, int *flag, mpi_Status *status)

  • source — процесс-жіберушінің нөмірі немесе mpi_any_source;

  • msgtag — күтілетін хабарлама идентификаторы немесе mpi_any_tag;

  • comm —коммуникатор идентификаторы;

  • out flag — алмасу операциясының аяқталу белгісі;

  • out status — келіп тұрған хабарлама параметрлері.

Күтілетін бұғатталусыз хабарламаның құрылымы және келіп түсуі жайлы ақпаратты алу. Егер хабарламаны жарамды атрибуттарымен қабылдауға болатын болса, онда flag параметрінде 1 мәні қайтарылады, және 0 қайтарылады, егер көрсетілген атрибуттарымен хабарлама әлі болмаса.

Келесі мысалда, процестер арасында жол бойынша таратылған квадрат матрицаны транспонирлеу үшін бұғаттамайтын операцияларды қолдану бағдарламасы келтірілген. Алғашында әрбір процесс а массивінің n1 жолын жеке анықтайды. Одан ары mpi_isend және mpi_irecv бұғаттамайтын операцияларының көмегімен барлық деректер алмасуды транспонирлеу үшін қажеттілер инициалданады. Басталған алмасулар фонында әрбір процесс а массивіндегі өзінің жеке бөлігін транспонирлейді. Одан кейін MPI_WAITANE процедурасының шақыруы көмегімен кезкелген басқа процестен хабарламаның келуін күтеді және бұл процестен алынған а массиві бөлігін транспонирлейді. Бұл өңдеу, қашан барлық процестен хабарлама алынбайынша жалғаса береді. Соңында берілген а массиві және транспонирленген b массиві баспаға беріледі.

program example6

Include 'mpif.H’

Integer ierr, rank, size, n, nl, I, j

parameter (N = 9)

double precision a(N, N), b(N, N)

call MPI_INIT(ierr)

call MPI_COMM_SIZE(MPI_COMM_WORLD, size, ierr)

call MPI_COMM_RANK(MPI_COMM_WORLD, rank, ierr)

nl = (N-l)/size+l

call work(a, b, N, nl, size, rank)

call MPI_FINALIZE(ierr)

end

subroutine work(a, b, n, nl, size, rank) include 'mpif.h’

integer ierr, rank, size, n, MAXPROC, nl, i, j, ii, jj, ir parameter (MAXPROC = 64)

double precision a(nl, n), b(nl, n), с

Integer irr, status(mpi_status_size), req(maxproc*2)

do i = 1, nl

do j = 1, n

ii = i+rank*nl

if(ii .le. n) a(i, j) = 100*ii+j

end do

end do

do ir = 0, size-1

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]