Главная / Программирование /
Программирование больших вычислительных задач на современном Фортране с использованием компиляторов 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