courses:high_performance_computing:questions
Differences
This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| courses:high_performance_computing:questions [2016/11/20 00:23] – kel | courses:high_performance_computing:questions [2016/11/24 00:07] (current) – kel | ||
|---|---|---|---|
| Line 42: | Line 42: | ||
| - Захвачен в 1 строке, | - Захвачен в 1 строке, | ||
| - | ===== 6. Алгоритмы синхронизации | + | ===== 6. Ранжирование алгоритмов ===== |
| Расположите алгоритмы синхронизации в порядке увеличения потенциальной производительности в жёсткой конкурентной среде: | Расположите алгоритмы синхронизации в порядке увеличения потенциальной производительности в жёсткой конкурентной среде: | ||
| - Грубая, | - Грубая, | ||
| Line 49: | Line 49: | ||
| - Грубая, | - Грубая, | ||
| - | ===== Консенсус ===== | + | ===== 7. Выбор алгоритма ===== |
| + | Отметьте вид алгоритмов синхронизации, | ||
| + | - Грубая | ||
| + | - Тонкая | ||
| + | - Оптимистичная | ||
| + | - Неблокирующая | ||
| + | |||
| + | ===== 8. Wait-free алгоритм ===== | ||
| + | Выберите корректное определение wait-free класса алгоритмов: | ||
| + | - Любой поток ожидает, | ||
| + | - Любой поток может выполнить свои функции за конечное число шагов, если ни один другой поток не находится в критической секции | ||
| + | - Система в целом продвигается вперед не зависимо ни от чего | ||
| + | - Любой поток может выполнить свои функции за конечное число шагов, не зависимо ни от чего | ||
| + | |||
| + | ===== 9. Определение типа ошибки ===== | ||
| + | Какая ошибка потенциально может возникнуть в приведённом коде: | ||
| + | <code c++> | ||
| + | void f() { | ||
| + | first_mutex.lock(); | ||
| + | second_mutex.lock(); | ||
| + | ... | ||
| + | } | ||
| + | |||
| + | void g() { | ||
| + | second_mutex.lock(); | ||
| + | first_mutex.lock(); | ||
| + | ... | ||
| + | } | ||
| + | </ | ||
| + | - Гонка данных (Data Race) | ||
| + | - Взаимная блокировка (Deadlock) | ||
| + | - Проблема ABA | ||
| + | - Инверсия приоритетов | ||
| + | |||
| + | ===== 10. Реализация lock-free алгоритмов ===== | ||
| + | Почему lock-free алгоритмы легче реализовать на языке со сборщиком мусора, | ||
| + | - Невозможна инверсия приоритетов | ||
| + | - Наличие существующих базовых контейнеров в java.util.concurrent | ||
| + | - Невозможна проблема ABA | ||
| + | - Наличие CAS-операций | ||
| + | |||
| + | ===== 11. Профилирование ===== | ||
| + | Укажите какие виды профилирования желательно применить для комплексного анализа проблем приложения: | ||
| + | - Инструментирующее и сэмплирующее | ||
| + | - Поиск hot spots и анализ издержек на ожидание и синхронизацию (locks and waits) | ||
| + | - Интрузивное и неинтрузивное | ||
| + | - В отладочной сборке и release-сборке | ||
| + | |||
| + | ===== 12. Выбор шаблона ===== | ||
| + | Укажите, | ||
| + | - Thread Pool | ||
| + | - Double Check | ||
| + | - Local Serializer | ||
| + | - Pipeline | ||
| + | |||
| + | ===== 13. Выбор шаблона ===== | ||
| + | Укажите, | ||
| + | - Thread Pool | ||
| + | - Double Check | ||
| + | - Recursive Data | ||
| + | - Pipeline | ||
| + | |||
| + | ===== 14. Узкое место при работе с контейнерами ===== | ||
| + | В чём заключается одна из основных причин просадки производительности (увеличение времени выполнения операции) при активной конкурентной работе с контейнерами (в предположении, | ||
| + | - Сложность поиска / удаления / вставки элементов | ||
| + | - Переключение контекста процесса | ||
| + | - Потокобезопасность функции new | ||
| + | - Промашки по кэшу процессора | ||
| + | |||
| + | ===== 15. Task-based разработка ===== | ||
| + | Выберите технологию, | ||
| + | - OpenMP | ||
| + | - MPI | ||
| + | - Intel TBB / ForkJoin framework | ||
| + | - Java Threads | ||
| + | |||
| + | ===== 16. Выбор технологии ===== | ||
| + | Выберите технологию, | ||
| + | - OpenMP | ||
| + | - MPI | ||
| + | - Intel TBB / ForkJoin framework | ||
| + | - Java Threads | ||
| + | |||
| + | ===== 17. Оптимизации в компиляторе ===== | ||
| + | Выберите оптимизацию JIT-компилятора, | ||
| + | - Объединение захвата примитивов | ||
| + | - Оптимистичный захват | ||
| + | - Адаптивные блокировки | ||
| + | - Замена виртуального вызова | ||
| + | |||
| + | ===== 18. Модель памяти ===== | ||
| + | Выберите модель памяти, | ||
| + | - Sequential Consistency | ||
| + | - Strong-ordered | ||
| + | - Weak-ordered | ||
| + | - Super-weak | ||
| + | |||
| + | ===== 19. Асинхронный ввод/ | ||
| + | Выберите тип ввода/ | ||
| + | - Синхронный блокирующий | ||
| + | - Асинхронный блокирующий | ||
| + | - Синхронный неблокирующий | ||
| + | - Асинхронный неблокирующий | ||
| + | |||
| + | ===== 20. Консенсус ===== | ||
| Какое консенснусное число CAS-операций: | Какое консенснусное число CAS-операций: | ||
| - 1 | - 1 | ||
courses/high_performance_computing/questions.1479590616.txt.gz · Last modified: 2016/11/20 00:23 by kel