Главная / Программирование /
Программирование больших вычислительных задач на современном Фортране с использованием компиляторов Intel / Тест 3
Программирование больших вычислительных задач на современном Фортране с использованием компиляторов Intel - тест 3
Упражнение 1:
Номер 1
Перечислите возможности Intel Parallel Studio, Intel Visual Fortran для создания параллельных программ.
Ответ:
 (1) библиотека Intel Integrated Performance Primitives 
 (2) библиотека Intel Math Kernel Library 
 (3) режим компиляции /Qparallel 
 (4) библиотека Message Passing Interface 
 (5) директива !DEC$ DECLARE
 
Номер 2
Перечислите возможности Intel Parallel Studio, Intel Visual Fortran для создания параллельных программ.
Ответ:
 (1) Cilk Plus 
 (2) CoArray 
 (3) директива !DEC$ PARALLEL
 
 (4) библиотека Intel Integrated Performance Primitives 
 (5) OpenMP 
Номер 3
Перечислите возможности Intel Parallel Studio, Intel Visual Fortran для создания параллельных программ.
Ответ:
 (1) программа Intel Inspector 
 (2) библиотека Intel Math Kernel Library 
 (3) оператор associate 
 (4) оператор do concurrent 
 (5) режим компиляции /debug:parallel
 
Номер 4
Перечислите возможности Intel Parallel Studio, Intel Visual Fortran для создания параллельных программ.
Ответ:
 (1) программа Intel Advisor 
 (2) библиотека Intel Threading Building Blocks 
 (3) CoArray 
 (4) директива !DEC$ DEFINE
 
 (5) сечения массивов 
Номер 5
Перечислите возможности Intel Parallel Studio, Intel Visual Fortran для создания параллельных программ.
Ответ:
 (1) режим компиляции /Qpar-threshold 
 (2) асинхронный ввод/вывод 
 (3) CoArray 
 (4) сечения массивов 
 (5) библиотека Intel Threading Building Blocks 
Упражнение 2:
Номер 1
Какие из циклов не подходят для параллелизации с использованием опции компилятора /Qparallel
Ответ:
 (1)
while (cx > eps) do
cx=cx+A(k)*B(k)
A(k)=C(k)-D(k)
end do
 
 (2)
do k=1,M
A(k)=B(k+1)*C(k+1)
end do
 
 (3)
do k=1,1000
A(k)=sin(B(k))
B(k)=B(k-1)**2+B(k+1)+B(k)
end do
 
 (4)
do s=1,M
A(s,s)=B(s,s+1)*C(s-1)
end do
 
 (5)
do
if (s<100) exit
A(s)=B(s)*C(s)
s=V(s)+W(s-1)
end do
 
Номер 2
Какие из циклов не подходят для параллелизации с использованием опции компилятора /Qparallel
Ответ:
 (1)
do
sum=sum+A(k)
val=val-B(k)
if (sum > period) exit
end do
 
 (2)
do j=1,Mj
A(j)=(A(j+1)-2*A(j)+A(j-1))*koef
end do
 
 (3)
do k=1,1000
V(k)=W(k-1)*S(k)
R(k)=X(k)**2-S(k-1)
end do
 
 (4)
do p=1,M
A(p,s)=B(s,p+1)*B(p-1,s)*p
end do
 
 (5)
do i=1,100
do j=1,100
if ((i<50).AND.(j<30)) continue
A(i,j)=B(i,j)-C(i,j)
end do
end do
 
Номер 3
Какие из циклов не подходят для параллелизации с использованием опции компилятора /Qparallel
Ответ:
 (1)
do j=1,100
A(i,2)=B(2,i)*C(i,2)
end do
 
 (2)
do j=1,Mj
C(j)=C(j-1)*C(j+1)
end do
 
 (3)
do k=1,1000
R(k)=W(k)-A(k-1)
A(k+1)=A(k)*A(k+1)
end do
 
 (4)
do
if (A(s)<eps) exit
A(s)=A(s)*A(s-1)
end do
 
 (5)
do j=1,100
do k=1,200
do i=1,100
A(i,k,j)=B(i,k,j)+C(j,k,i)
end do
end do
end do
 
Номер 4
Какие из циклов не подходят для параллелизации с использованием опции компилятора /Qparallel
Ответ:
 (1)
do k=Mk,Mx
A(k,:)=B(:,k)+C(:,k+1)
end do
 
 (2)
do i=1,100
C(i)=A(i+1)*A(i-1)
A(i)=C(i)-B(i+1)*A(i)
end do
 
 (3)
do
ch=gectharqq()
if (ch='Q') exit
A(k)=B(k-1)+C(k+2)
end do
 
 (4)
do k=1,1000
V(k)=W(k-1)*S(k)
R(k)=X(k)**2-S(k-1)
end do
 
 (5)
while (cx > eps) do
cx=cx+A(k)*B(k)
A(k)=C(k)-D(k)
end do
 
Номер 5
Какие из циклов не подходят для параллелизации с использованием опции компилятора /Qparallel
Ответ:
 (1)
do k=1,M
A(k)=B(k+1)*C(k+1)
end do
 
 (2)
do
sum=sum+A(k)
val=val-B(k)
if (sum > period) exit
end do
 
 (3)
do j=1,100
A(i,2)=B(2,i)*C(i,2)
end do
 
 (4)
do k=1,1000
V(k)=W(k-1)*S(k)
R(k)=X(k)**2-S(k-1)
end do
 
 (5)
while (cx > eps) do
cx=cx+A(k)*B(k)
A(k)=C(k)-D(k)
end do
 
Упражнение 3:
Номер 1
Выберите верные утверждения
Ответ:
 (1) в CoArray Fortran используется модель параллельного программирования Partitioned Global Address Space 
 (2) в CoArray Fortran используется Single Program Multiple Data  
Номер 2
Какое количество копий CAF-программы можно создать на двухядерном процессоре ?
Ответ:
 (1) 2 
 (2) 4 
 (3) определяется параметром Coarray Images в свойствах проекта 
 (4) 8 
 (5) 1 
Номер 3
Выберите верные утверждения
Ответ:
 (1) каждая копия программы обрабатывает свои локальные данные 
 (2) каждая копия программы обрабатывает общие глобальные данные 
 (3) для пересылки данных между копиями программы используются coarray-переменные 
 (4) пересылка данных от 1-й к 2-й копии caf-программы происходит только по завершению работы 1-й копии 
 (5) каждая копия caf-программы имеет уникальный номер 
Номер 4
Выберите верные утверждения
Ответ:
 (1) количество копий caf-программы может быть установлено в настройках проекта 
 (2) количество копий caf-программы всегда соответствует количеству процессоров (ядер) 
 (3) каждая копия сaf-программы обрабатывает общие глобальные данные 
 (4) в CoArray Fortran используется разделенное глобальное адресное пространство 
 (5) пересылка данных происходит посредством обычных массивов с использованием специальных функций 
Номер 5
Какой режим компиляции позволяет использовать CoArray
Ответ:
 (1) /Qcoarray
 
 (2) /CAF
 
 (3) /CoArray
 
 (4) /Qcoarray images = 0
 
 (5) /Qcoarray:shared
 
Упражнение 4:
Номер 1
Укажите функцию, которая возвращает количество созданных копий CAF-программы
Ответ:
 (1) imagesize
 
 (2) this_image
 
 (3) image_index
 
 (4) num_images
 
 (5) inmax
 
Номер 2
Укажите функцию, которая позволит определить количество байт памяти отведенное под coarray-переменную?
Ответ:
 (1) this_image
 
 (2) imagesize
 
 (3) num_images
 
 (4) size
 
 (5) sizeof
 
Номер 3
Укажите функцию, которая возвращает номер копии caf-программы
Ответ:
 (1) getgid
 
 (2) getimage
 
 (3) this_image
 
 (4) num_images
 
 (5) imagesize
 
Номер 4
Укажите функцию, которая вычисляет верхнюю границу coarray-переменной
Ответ:
 (1) cobound
 
 (2) ucobound
 
 (3) ubound
 
 (4) lcobound
 
 (5) codimension
 
Номер 5
Укажите функцию, которая вычисляет нижнюю границу coarray-переменной
Ответ:
 (1) cobound
 
 (2) ucobound
 
 (3) lbound
 
 (4) lcobound
 
 (5) codimension
 
Упражнение 5:
Номер 1
Чему равна верхняя граница coarray-переменной CF, если caf-программа была скомпилирована для двухъядерного процессора и в настройках проекта указано значение Coarray Images = 64
.
CoArray-переменная CF, объявлена как type (flow) CF[-4:*]
Ответ:
 59 
Номер 2
Чему равна верхняя граница третьего измерения coarray-переменной CF, если caf-программа скомпилирована для восьмиядерного процессора и в настройках проекта указано значение Coarray Images = 32
.
CoArray-переменная CF, объявлена как type (grid) CF[2,3,4:*]
Ответ:
 14 
Номер 3
Чему равна верхняя граница третьего измерения coarray-переменной CF, если caf-программа скомпилирована для восьмиядерного процессора и в настройках проекта указано значение Coarray Images = 64
.
CoArray-переменная CF, объявлена как type (plot) CF [2,-1,2:*]
Ответ:
 33 
Номер 4
Чему равна нижняя граница первого измерения coarray-переменной CF, если caf-программа скомпилирована для восьмиядерного процессора и в настройках проекта указано значение Coarray Images = 0
.
CoArray-переменная CF, объявлена как type (cell) CF [2,2:*]
Ответ:
 1 
Номер 5
Чему равна нижняя граница второго измерения coarray-переменной CF, если caf-программа скомпилирована для восьмиядерного процессора и в настройках проекта указано значение Coarray Images = 256
.
CoArray-переменная CF, объявлена как type (cell) CF [2,2,3,4*]
Ответ:
 1 
Упражнение 6:
Номер 1
Укажите верные объявления coarray-переменных
Ответ:
 (1) integer, allocatable :: a[:,:]
 
 (2) integer, pointer :: b[*]
 
 (3) complex(16), allocatable :: TM(:,:)[:,:]
 
 (4) real(8) TMP[1:10,2:5,1:*]
 
 (5) real(8), allocatable :: UX[0:100,0:100,0:*]
 
Номер 2
Укажите верные объявления coarray-переменных
Ответ:
 (1) type(point), allocatable :: TM(:)[:,:]
 
 (2) type(point), allocatable :: TM(100)[:,:]
 
 (3) class(point), allocatable :: pt[:]
 
 (4) class(point), pointer :: pt[]
 
 (5) real nt(1:*,10,10)
 
Номер 3
Укажите верные объявления coarray-переменных
Ответ:
 (1) type(particle) TM[1:4,5:10,0:10,0:*]
 
 (2) logical, allocatable :: stat(:)[:,:]
 
 (3) class(particle), allocatable :: pt[*]
 
 (4) class(particle) pt[*]
 
 (5) character ft(10,10:*,10)
 
Номер 4
Укажите верные объявления coarray-переменных
Ответ:
 (1) integer, allocatable :: vx(:,:,:)[:]
 
 (2) integer :: par[*]=1000
 
 (3) class (grid) :: G1[*]
 
 (4) real, pointer :: TMP[*]
 
 (5) type(grid) as[*,*]
 
Номер 5
Укажите верные объявления coarray-переменных
Ответ:
 (1) type (flow) :: pt[*]=flow(0.0,0.0,0.0,0.0)
 
 (2) integer, allocatable :: A(:,:,:)[:]
 
 (3) !complex(16), pointer :: B[:]
 
 (4) real(4) :: AX(5)[*]=[1.0,2.0,0.0,5.0,0.0]
 
 (5) !class(flow) :: pt[*]=spec(1.0,2.0,.FALSE.)
 
Упражнение 7:
Номер 1
Выберите оператор выполняющий барьерную синхронизацию.
Ответ:
 (1) sync images(1)
 
 (2) sync all
 
 (3) critical
 
 (4) this_image
 
 (5) sync memory
 
Номер 2
Выберите оператор выполняющий синхронизацию избранных копий программы
Ответ:
 (1) sync images
 
 (2) sync all
 
 (3) critical
 
 (4) this_image
 
 (5) sync memory
 
Номер 3
Каждая копия программы генерирует массив из случайных чисел. Каждая копия программы должна записать массив целиком в файл C:\datа.txt.
Какой оператор следует использовать при записи данных в файл ?
Ответ:
 (1) sync images
 
 (2) sync all
 
 (3) critical
 
 (4) this_image
 
 (5) sync memory