Выполнение задания является опционным требованием. Конкурсант самостоятельно принимает решение предоставлять решение задачи или нет.
Необходимо выбрать одну задачу из представленного ниже списка и представить ее решение на отдельном листе. Решенная правильно задача – оценивается в 10 баллов; неправильно – 0 баллов.
Задачи
Задача 1. Реализовать на языке программирования Си параллельную программу и теста к ней с помощью одной или нескольких технологий
· OpenMP
· MPI
· MPI+OpenMP
для максимально быстрого решения одной задачи из списка:
1. Даны две вещественные матрицы A и В. Вычислить матрицу С=А∙В.
2. Дана вещественная матрица А и матрица У. Найти решение системы уравнений А∙Х=У.
3. Дана вещественная треугольная матрица А и матрица У. Найти решение системы уравнений А∙Х=У.
4. Даны вещественные или комплексные векторы х и у, вычислить их скалярное произведение.
5. Дан вещественный или комплексный вектор х, найти первый по порядку максимальный по модулю элемент вектора.
6. Дана вещественная матрица А и вектор х. Найти их произведение.
7. Дана вещественная матрица А, нужно транспонировать её.
Предоставить программу и тест к ней в виде исходного кода. Предоставить краткое описание способа их использования, применённые подходы к ускорению и мотивацию по выбору этих подходов к ускорению. Решение более чем одной задачи будет плюсом.
Задача 2. Пакетный менеджер
Дан список пакетов java. Каждый пакет имеет список зависимостей. Например, пакет hadoop-yarn имеет зависимости [hadoop-core, hadoop-dfs].
Необходимо написать программу, которая способна выполнить все ниже указанные пункты.
1) Принимает на вход файл с требуемыми зависимостями, в формате:
hadoop-yarn -> [hadoop-core, hadoop-dfs]
hadoop-hdfs ->
[apache-commons]
hadoop-core -> [apache-commons]
apache-commons ->
[]
flink-table-api -> [flink-core, apache-calcite, junit]
flink-core
-> [apache-commons, joda-time, lombok]
lombok -> []
joda-time ->
[]
apache-calcite -> [lombok]
flink-connectors -> [flink-core,
hbase, hadoop-yarn]
hbase -> [apache-commons, joda-time]
2) Принимает на вход файл с пакетом, который надо собрать и фактическим списком зависимостей, в формате:
flink-table-api -> [flink-core, apache-commons,
joda-time, hbase, apache-calcite]
3) Реализует метод getMissingDependencies(), в данном случае он должен вернуть:
Missing
dependencies:
flink-table-api -> junit
flink-table-api -> flink-core
-> lombok
4) Реализует метод getExcessDependencies(), в данном случае он должен вернуть:
Excess dependencies:
- hbase
5) Реализует метод отображения ветки с зависимостью (getDependencyTree("apache-commons")), в данном случае он должен вернуть:
flink-table-api -> flink-core ->
apache-commons
6) Определяет циркулярные зависимости и выводит сообщение об этом
7) Дополнительно (если осталось много времени): адаптировать программу под работу с различными версиями каждой из зависимостей, например:
hadoop-yarn:3.2.1 -> [hadoop-core:3.2.1, hadoop-dfs:3.2.1]
hadoop-hdfs:3.2.1 -> [apache-commons:1.12]
hadoop-hdfs:3.2.0 -> [apache-commons:1.11]
hadoop-core:3.2.1 -> [apache-commons:1.12]
hadoop-core:3.2.0 -> [apache-commons:1.11]
apache-commons:1.10 -> []
apache-commons:1.11 -> []
apache-commons:1.12 -> [log4j:2.1.0]
flink-table-api:1.11.2 -> [flink-core:1.11.2, apache-calcite:2.13, junit:4]
flink-core:1.11.2 -> [apache-commons:1.10, joda-time:4.0.2, lombok:3.0.1]
lombok:3.0.1 -> []
joda-time:4.0.2 -> []
apache-calcite:2.13 -> [lombok:3.0.2]
flink-connectors:1.11.2 -> [flink-core:1.11.2, hbase:6.11, hadoop-yarn:3.2.1]
hbase:6.11 -> [apache-commons:3.2.1, joda-time:4.0.2