Главная / Программирование /
Параллельное программирование с использованием технологии MPI / Тест 4
Параллельное программирование с использованием технологии MPI - тест 4
Упражнение 1:
Номер 1
Каких коллективных операций в MPI
не существует?
Ответ:
 (1) с блокировкой 
 (2) без блокировки 
 (3) как тех, так и других 
Номер 2
Могут ли использоваться в коллективных операциях те же коммуникаторы, использовавшиеся для операций точка-точка?
Ответ:
 (1) да 
 (2) иногда 
 (3) нет 
Номер 3
В MPI сообщения, вызванные коллективными операциями, не могут...
Ответ:
 (1) иметь доступ к буферу приема или посылки 
 (2) повлиять на выполнение других операций 
 (3) пересекаться с сообщениями, появившимися в результате индивидуального взаимодействия процессов 
Упражнение 2:
Номер 1
Возможна ли синхронизация процессов с помощью коллективных операций?
Ответ:
 (1) да 
 (2) не всегда 
 (3) нет 
Номер 2
С помощью какой коллективной процедуры возможна синхронизация процессов
Ответ:
 (1) MPI_STARTAL
 
 (2) MPI_WAITALL
 
 (3) MPI_BARRIER
 
Номер 3
Какой атрибут не используется в коллективных операциях?
Ответ:
 (1) номер процесса 
 (2) тег 
 (3) номер в коммутаторе 
Упражнение 3:
Номер 1
Какая из перечисленных процедур используется для барьерной синхронизации процессов?
Ответ:
 (1)
DOUBLE PRECISION MPI_WTIME(IERR)
INTEGER IERR
 
 (2)
MPI_START (REQUEST, IERR)
INTEGER REQUEST, IERR
 
 (3)
MPI_BARRIER (COMM, IERR)
INTEGER COMM, IERR
 
Номер 2
Для чего используется процедура
MPI_BARRIER (COMM, IERR)
INTEGER COMM, IERR
Ответ:
 (1) для барьерной синхронизации процессов 
 (2) для совмещенного приема и передачи сообщений с блокировкой 
 (3) для инициализации отложенных запросов 
Номер 3
Какая из предложенных процедур является коллективной?
Ответ:
 (1)
DOUBLE PRECISION MPI_WTIME(IERR)
INTEGER IERR
 
 (2)
MPI_START (REQUEST, IERR)
INTEGER REQUEST, IERR
 
 (3)
MPI_BARRIER (COMM, IERR)
INTEGER COMM, IERR
 
Упражнение 4:
Номер 1
С помощьюкакой процедуры использование отложенных запросов позволяет инициализировать посылку данных только один раз?
Ответ:
 (1) MPI_START
 
 (2) MPI_BARRIER
 
 (3) MPI_INIT
 
Номер 2
С помощью какой процедуры можно проиллюстрировать действие процедуры MPI_BCAST
?
Ответ:
 
(1)  
 
(2)  
 
(3)  
Номер 3
С помощью какой процедуры можно проиллюстрировать действие процедуры MPI_GATHER
?
Ответ:
 
(1)  
 
(2)  
 
(3)  
Упражнение 5:
Номер 1
Какие значения в данной процедуре должны быть одинаковыми у всех процессов?
MPI_BCAST(BUF, COUNT, DATATYPE, ROOT, COMM, IERR)
<type>BUF(*)
INTEGER COUNT, DATATYPE, ROOT, COMM, IERR
Ответ:
 (1) COUNT
 
 (2) ROOT
 
 (3) COMM
 
Номер 2
Каким образом собирающий процесс сохраняет данные в буфере RBUF
?
Ответ:
 (1) в порядке возрастания номеров процессов 
 (2) в порядке убывания номеров процессов 
 (3) в произвольном порядке 
Номер 3
Значения каких параметров должны быть одинаковыми у всех процессов?
Ответ:
 (1) ROOT
 
 (2) STYPE
 
 (3) COMM
 
Упражнение 6:
Номер 1
Каким массивом задается порядок расположения данных в результирующем буфере RBUF
?
Ответ:
 (1) RCOUNTS
 
 (2) DISPLS
 
 (3) RTYPE
 
Номер 2
Какой массив содержит количество элементов, передаваемых от каждого процесса?
Ответ:
 (1) RCOUNTS
 
 (2) DISPLS
 
 (3) RTYPE
 
Номер 3
В каком массиве индекс равен рангу посылающего процесса, размер массива равен числу процессов в коммуникаторе COMM
?
Ответ:
 (1) RCOUNTS
 
 (2) DISPLS
 
 (3) RTYPE
 
Упражнение 7:
Номер 1
Какая из перечисленных процедур является обратной по своему действию MPI_SCATTER
Ответ:
 (1) MPI_BCAST
 
 (2) MPI_BARRIER
 
 (3) MPI_GATHER
 
Номер 2
Какая из перечисленных схем иллюстрирует действие процедуры MPI_SCATTER
?
Ответ:
 
(1)  
 
(2)  
 
(3)  
Номер 3
Какому процессу соответствует данная схема
Ответ:
 (1)
MPI_ALLTOALLV(SBUF, SCOUNTS, SDISPLS, STYPE, RBUF, RCOUNTS,
RDISPLS, RTYPE, COMM, IERR)
<type> SBUF(*), RBUF(*)
INTEGER SCOUNTS(*), SDISPLS(*), STYPE, RCOUNTS(*), RDISPLS(*),
RTYPE, COMM, IERR
 
 (2)
MPI_ALLTOALL(SBUF, SCOUNT, STYPE, RBUF, RCOUNT, RTYPE, COMM, IERR)
<type> SBUF(*), RBUF(*)
INTEGER SCOUNT, STYPE, RCOUNT, RTYPE, COMM, IERR
 
 (3)
MPI_ALLGATHERV(SBUF, SCOUNT, STYPE, RBUF, RCOUNTS, DISPLS,
RTYPE, COMM, IERR)
<type> SBUF(*), RBUF(*)
INTEGER SCOUNT, STYPE, RCOUNTS(*), DISPLS(*), RTYPE, COMM, IERR
 
Упражнение 8:
Номер 1
С помощью какой процедуры возможна рассылка каждым процессом коммуникатора COMM
различных порций данных всем другим процессам
Ответ:
 (1) MPI_ALLTOALL
 
 (2) MPI_ALLGATHER
 
 (3) MPI_BARRIER
 
Номер 2
С помощью какой процедуры можно задать свою функцию для выполнения глобальной операции
Ответ:
 (1) MPI_OP_CREATE
 
 (2) MPI_INIT
 
 (3) MPI_COMM_RANK
 
Номер 3
какая схема моделирования операции глобального суммирования по эффективности сравнивается с коллективной операцией MPI_REDUCE
Ответ:
 (1) схема сдваивания с использованием асинхронных процедур 
 (2) схема сдваивания с использованием пересылок данных типа точка-точка 
 (3) схема сдваивания с использованием синхронных пересылок данных 
Упражнение 9:
Номер 1
С помощью каких констант можно задать логические "И", "ИЛИ", исключающее "ИЛИ"
Ответ:
 (1) MPI_MINLOC
, MPI_MAXLOC
 
 (2) MPI_LAND
, MPI_LOR
, MPI_LXOR
 
 (3) MPI_BAND
, MPI_BOR
, MPI_BXOR
 
Номер 2
С помощью каких констант возможно определение максимального и минимального значения
Ответ:
 (1) MPI_BAND
, MPI_BOR
 
 (2) MPI_MINLOC
, MPI_MAXLOC
 
 (3) MPI_MAX
, MPI_MIN
 
Номер 3
С помощью каких констант возможно вычисление глобальной суммы
Ответ:
 (1) MPI_PROD
 
 (2) MPI_BOR
 
 (3) MPI_SUM
 
Упражнение 10:
Номер 1
С помощью какого процесса возможно задать интерфейс пользовательской функции для создания глобальной операции
Ответ:
 (1)
MPI_SCAN(SBUF, RBUF, COUNT, DATATYPE, OP, COMM, IERR)
<type> SBUF(*), RBUF(*)
INTEGER COUNT, DATATYPE, OP, COMM, IERR
 
 (2)
MPI_OP_CREATE(FUNC, COMMUTE, OP, IERR)
EXTERNAL FUNC
LOGICAL COMMUTE
INTEGER OP, IERR
 
 (3)
FUNCTION FUNC(INVEC(*), INOUTVEC(*), LEN, TYPE)
<type> INVEC(LEN), INOUTVEC(LEN)
INTEGER LEN, TYPE
 
Номер 2
Какой функцией будет вычисляться создание пользовательской глобальной операции OP
Ответ:
 (1) FUNC
 
 (2) COMMUTE
 
 (3) LEN
 
Номер 3
Какая процедура отвечает за уничтожение пользовательской глобальной операции
Ответ:
 (1)
FUNCTION FUNC(INVEC(*), INOUTVEC(*), LEN, TYPE)
<type> INVEC(LEN), INOUTVEC(LEN)
INTEGER LEN, TYPE
 
 (2)
MPI_OP_FREE(OP, IERR)
INTEGER OP, IERR
 
 (3)
MPI_ALLGATHERV(SBUF, SCOUNT, STYPE, RBUF, RCOUNTS, DISPLS,
RTYPE, COMM, IERR)
<type> SBUF(*), RBUF(*)
INTEGER SCOUNT, STYPE, RCOUNTS(*), DISPLS(*), RTYPE, COMM, IERR
 
Упражнение 11:
Номер 1
Из какого параметра данной процедуры берется первый аргумент
FUNCTION FUNC(INVEC(*), INOUTVEC(*), LEN, TYPE)
<type> INVEC(LEN), INOUTVEC(LEN)
INTEGER LEN, TYPE
Ответ:
 (1) INVEC
 
 (2) INOUTVEC
 
 (3) LEN
 
Номер 2
Какой из параметров данной процедуры задает количество элементов входного и выходного массивов
FUNCTION FUNC(INVEC(*), INOUTVEC(*), LEN, TYPE)
<type> INVEC(LEN), INOUTVEC(LEN)
INTEGER LEN, TYPE
Ответ:
 (1) INOUTVEC
 
 (2) LEN
 
 (3) TYPE
 
Номер 3
Какой из параметров данной процедуры задает тип входных и выходных данных
FUNCTION FUNC(INVEC(*), INOUTVEC(*), LEN, TYPE)
<type> INVEC(LEN), INOUTVEC(LEN)
INTEGER LEN, TYPE
Ответ:
 (1) INOUTVEC
 
 (2) LEN
 
 (3) TYPE
 
Упражнение 12:
Номер 1
Какая функция в данном процессе вычисляет поэлементную сумму по модулю 5 векторов целочисленных аргументов
MPI_OP_FREE.
program example15
include 'mpif.h'
integer ierr, rank, i, n
parameter (n = 1 000)
integer a(n), b(n)
integer op
external smod5
call MPI_INIT(ierr)
call MPI_COMM_RANK(MPI_COMM_WORLD, rank, ierr)
do i = 1, n
a(i) = i + rank end do
print *, 'process ', rank, ' a(1) =', a(1)
call MPI_OP_CREATE(smod5, .TRUE., op, ierr)
call MPI_REDUCE(a, b, n, MPI_INTEGER, op, 0,
& MPI_COMM_WORLD, ierr)
call MPI_OP_FREE(op, ierr) if(rank .eq. 0) print *, ' b(1) =', b(1) call MPI_FINALIZE(ierr) end
integer function smod5(in, inout, l, type)
integer l, type
integer in(l), inout(l), i
do i = 1, l
inout(i) = mod(in(i)+inout(i), 5) end do return end
Ответ:
 (1) smod5
 
 (2) inout
 
 (3) op
 
Номер 2
В вызове какой процедуры функция smod5
объявляется в качестве глобальной процедуры op
MPI_OP_FREE.
program example15
include 'mpif.h'
integer ierr, rank, i, n
parameter (n = 1 000)
integer a(n), b(n)
integer op
external smod5
call MPI_INIT(ierr)
call MPI_COMM_RANK(MPI_COMM_WORLD, rank, ierr)
do i = 1, n
a(i) = i + rank end do
print *, 'process ', rank, ' a(1) =', a(1)
call MPI_OP_CREATE(smod5, .TRUE., op, ierr)
call MPI_REDUCE(a, b, n, MPI_INTEGER, op, 0,
& MPI_COMM_WORLD, ierr)
call MPI_OP_FREE(op, ierr) if(rank .eq. 0) print *, ' b(1) =', b(1) call MPI_FINALIZE(ierr) end
integer function smod5(in, inout, l, type)
integer l, type
integer in(l), inout(l), i
do i = 1, l
inout(i) = mod(in(i)+inout(i), 5) end do return end
Ответ:
 (1) MPI_OP_CREATE
 
 (2) MPI_REDUCE
 
 (3) MPI_OP_FREE
 
Номер 3
С помощью вызова какой процедуры удаляется функция smod5
MPI_OP_FREE.
program example15
include 'mpif.h'
integer ierr, rank, i, n
parameter (n = 1 000)
integer a(n), b(n)
integer op
external smod5
call MPI_INIT(ierr)
call MPI_COMM_RANK(MPI_COMM_WORLD, rank, ierr)
do i = 1, n
a(i) = i + rank end do
print *, 'process ', rank, ' a(1) =', a(1)
call MPI_OP_CREATE(smod5, .TRUE., op, ierr)
call MPI_REDUCE(a, b, n, MPI_INTEGER, op, 0,
& MPI_COMM_WORLD, ierr)
call MPI_OP_FREE(op, ierr) if(rank .eq. 0) print *, ' b(1) =', b(1) call MPI_FINALIZE(ierr) end
integer function smod5(in, inout, l, type)
integer l, type
integer in(l), inout(l), i
do i = 1, l
inout(i) = mod(in(i)+inout(i), 5) end do return end
Ответ:
 (1) MPI_OP_CREATE
 
 (2) MPI_REDUCE
 
 (3) MPI_OP_FREE