Выполнение задания является опционным требованием. Конкурсант самостоятельно принимает решение предоставлять решение задачи или нет.

Необходимо выбрать одну задачу из представленного ниже списка и представить ее решение на отдельном листе. Решенная правильно задача – оценивается в 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