«Параллельное программирование»
Тема:
Введение в параллельное программирование
1.
Чем
ограничена предельная производительность последовательного вычислителя?
2.
Какие
архитектуры вычислительных систем входят
в классификацию Флинна?
3.
Чем
мультипроцессоры отличаются от мультикомпьютеров?
4.
В
чем различие между массивно-параллельными процессорами и кластерами?
5.
Какие
специфические проблемы возникают при разработке параллельных программ?
6.
Параллельное
программирование это:
7.
Информационная
зависимость итераций цикла возникает, если:
8.
Ситуация
гонок данных возникает, если:
9.
Какие
существуют способы распределения итераций распараллеливаемого цикла?
10. Что такое
блокировка (смертельное объятие - deadlock) двух процессов?
11.
Каким
правилам нужно следовать, чтобы избежать возможности попадания параллельной
программы в deadlock
Тема:
Технология OpenMP
12.
Для
какого класса параллельных вычислительных систем создана технология OpenMP?
13. Что такое
параллельный регион в OpenMP?
14. С помощью каких
директив в OpenMP создаются параллельные регионы?
15. Перечислите
составные части технологии OpenMP.
16. Что такое
критическая секция в OpenMP?
17. Как в OpenMP
обеспечить выполнение фрагмента параллельного региона только главным потоком?
18. Какая опция
директивы OpenMP #pragma omp for используется для указания способа
распределения итераций цикла между потоками параллельного региона?
19. Какие опции и в
каких директивах OpenMP используются для выполнения сведения данных?
20. Каким образом в
OpenMP можно установить нужное количество потоков для создания очередного
параллельного региона?
21. Какие средства
технологии OpenMP можно использовать для организации корректной модификации
общей переменной несколькими потоками?
22. Чем отличается
множественный замок (переменная типа omp_nest_lock_t) от простого (переменная
типа omp_lock_t)
23. Упорядочите по
степени быстродействия (от самого быстрого к самому медленному) способы
синхронизации доступа потоков OpenMP к общему ресурсу:
24. Что произойдет,
если два потока одновременно вызовут функцию omp_set_nest_lock(&mLock)?
где mLock - проинициализированный множественный замок?
25.
Пусть
в программе есть такой фрагмент кода:
#pragma omp critical
{ labelA: ... }
...
#pragma omp critical
{ labelB: ... }
Пусть поток 1
выполняет оператор, помеченный меткой labelA.
Может ли поток 2
войти во вторую критическую секцию, т.е. приступить к выполнению оператора,
помеченного меткой labelB?
26.
С
помощью какой функции библиотеки OpenMP можно попытаться захватить замок, но не
оказаться в состоянии блокировки, если замок уже захвачен другим потоком?
27. С помощью каких
средств в OpenMP можно программировать рекурсивный параллелизм?
28. В какие моменты
времени выполняется неявная барьерная синхронизация потоков в OpenMP?
29. С помощью каких
средств технологии OpenMP можно обеспечить сохранение значений частных
переменных потоков в промежутке между двумя параллельными регионами (т.е. в те
интервалы времени, когда выполняется единственный главный поток)?
30. Каким
ограничениям должен удовлетворять цикл для того, чтобы к нему можно было применить
директиву OpenMP #pragma omp for
31.
Сопоставьте
способы распределения итераций со значениями параметра type опции shedule в
OpenMP
Тема:
Технология CUDA
32.
Что
такое ядро в терминологии CUDA?
33. Какие уровни
памяти графического процессора доступны центральному процессору в технологии
CUDA?
34. Что такое ворп
(warp) в терминологии CUDA?
35. Какие уровни
памяти графического процессора доступны одному исполняемому потоку в технологии
CUDA?
36. Какое
синтаксическое расширение языка используется в CUDA для запуска ядра?
37. Каков диапазон
размера блоков потоков в технологии CUDA?
38. Выберите
правильное отношение вложенности понятий технологии CUDA
39. Должны ли в CUDA
совпадать количества измерений сетки блоков и блока потоков?
40. Какие виды
функций добавлены в языки С/С++ в синтаксическом расширении CUDA?
41. Какие
дополнительные встроенные типы данных языков С/С++ определены синтаксическим
расширением CUDA?
42. Укажите все
дополнительные векторные типы данных синтаксического расширения CUDA
43.
Как
гнездо из двух (или трех) циклов
for( ... ; ... ;
... )
for( ... ; ... ; ... ) {
…
}
}
без
информационной зависимости их итераций друг от друга формально можно
преобразовать в функцию-ядро CUDA?
44.
Как
одиночный цикл
for( ... ; ... ;
... ) {
…
}
без
информационной зависимости итераций друг от друга формально можно преобразовать
в функцию-ядро CUDA?
45.
Какие
встроенные переменные автоматически создаются и инициализируются при запуске
ядра в технологии CUDA?
46. Какие действия
необходимо выполнить для того, чтобы решить задачу с использованием технологии
CUDA?
47. Для чего могут
использоваться функции?: cudaError_t cudaEventCreate ( cudaEvent_t* event );
cudaError_t cudaEventRecord ( cudaEvent_t* event [, cudaStream_t stream ] );
cudaEventSynchronize ( cudaEvent_t* event ); cudaEventElapsedTime ( float*
time, cudaEvent_t firstEvent, cudaEvent_t secondEvent);
48. С помощью вызова
какой функции выполняется барьерная синхронизация потоков блока в технологии
CUDA?
49. Какие функции
используются в технологии CUDA для управления глобальной памятью графического
процессора из программы центрального?
50. Для чего может
использоваться функция cudaError_t cudaGetDeviceProperties( cudaDeviceProp*
props, int device );?
51. Как в
CUDA-программе определить переменные или массивы, которые должны размещаться в
регистровой памяти потока?
52. Как в CUDA-программе
определить переменные или массивы, которые должны размещаться в разделяемой
памяти блока потоков?
53. Как в
CUDA-программе определить переменные, которые должны размещаться в памяти
констант графического процессора?
54.
Чем
локальная память потока отличается от регистровой памяти в архитектуре CUDA?
Тема:
Технология OpenCL
55.
Какие
уровни памяти гетерогенного вычислительного устройства определены технологией
OpenCL?
56. Чем технология
OpenCL отличается от технологии CUDA?
57. Какой тип
расширения базового языка реализован в технологии OpenCL?
58. Выберите
наиболее адекватное определение платформы OpenCL
59. Какой может быть
размерность совокупности потоков OpenCL-программы?
60. Что такое ядро
OpenCL с точки зрения компилятора программы для центрального процессора?
61. В какой последовательности
выполняется компиляция последовательной и параллельной части OpenCL-программы?
62. Сколько очередей
работ может быть создано для одного OpenCL-устройства?
63. Можно ли в
технологии OpenCL синхронизировать все потоки в сетке?
64. Можно ли в
технологии OpenCL синхронизировать потоки в группе?
65. Расположите
этапы выполнения OpenCL-программы в правильной последовательности
66.
Правилен
ли такой вызов функции постановки ядра OpenCL в очередь на выполнение? Если
неправилен, то в чем ошибка?
clerr =
clEnqueueNDRangeKernel(
qE, // queue1 -
очередь
kernel, //
запускаемое ядро
2, // количество
измерений сетки потоков
NULL, // в
стандарте этот аргумент пока не задействован
{ 1000, 1000},
// размерности сетки потоков по ее измерениям
{ 32, 32 }, //
размерности группы потоков по ее измерениям
0, NULL,
&kEvent // связь с событиями не задана
);
67.
Какие
из перечисленных типов данных НЕ РЕАЛИЗОВАНЫ в OpenCL?
68. Какие ключевые
слова можно использовать в ядрах OpenCL для указания класса памяти переменных?
69.
Укажите
размеры в байтах для типов данных, которые можно использовать в ядрах OpenCL
Тема:
Технология MPI
70.
Какие
составные части входят в технологию MPI
71. Что такое
коммуникатор в MPI?
72. Какие
коммуникаторы автоматически создаются при запуске параллельной MPI-программы?
73. Какими
значениями задается (определяется) буфер данных сообщения в MPI?
74. Для чего в MPI
используются тэги?
75. С помощью каких
функций в MPI выполняется инициализация/завершение работы библиотеки и
определение координат процесса в коллективе?
76. Какие функции
используются в MPI для организации индивидуальных взаимодействий?
77. Какие существуют
разновидности функции передачи сообщения MPI_Send?
78. Чем различаются
блокирующие и неблокирующие варианты передач/приемов сообщений в MPI?
79. Что такое
инициирование отложенного запуска группы блокирующих индивидуальных
взаимодействий?
80. С помощью каких
групп функций можно проверять состояние и ожидать завершения ранее запущенных
неблокирующих индивидуальных операций приема/передачи сообщений в MPI?
81. Есть ли в MPI
возможность выполнять индивидуальные операции приема и передачи одновременно?
82. Каковы
отличительные особенности коллективных операций по сравнению с индивидуальными
в MPI?
83. С помощью какой
функции MPI одно сообщение целиком рассылается из одной ветви коммуникатора во
все остальные его ветви?
84. С помощью каких
коллективных функций MPI осуществляется сбор данных из всех ветвей параллельной
программы в одну ветвь?
85. Можно ли в MPI
собирать данные из всех ветвей во все ветви параллельной программы?
86. Какие из
перечисленных функций MPI выполняют редукцию/сведение данных?
87. Можно ли в MPI
создавать собственные типы данных для передачи/приема сообщений?
88. Какие
виртуальные топологии коллектива ветвей можно создавать в MPI?
89.
Различаются
ли в MPI понятия коммуникатора и группы ветвей?