Практикум на ЭВМ

171 (2017-2018) группа

Максим Журавлев

Студент TODO №1 №2 №3 №4 №6
222 1 2 3 1 2 3 4 1 2 3 4 5 6 1 2 3 4 Client-Server
Богданов Егор 18
Евгений Богданов 15
Завадский Илья 17
Келим Илья 16
Кутленков Дмитрий 15
Мясников Владислав 15
Орачев Егор 15
Осипова Александра 15
Погребной Дмитрий 18
Погребной Дмитрий 15
Рыбина Екатерина 16
Сергеев Егор 15
Фунт Дина 17
Ярош Дмитрий 15

Задачи

Домашняя работа 6. 29.11.18
Алексей Шипилёв — ForkJoinPool в Java 8
Software Transactional Memory in Java Using Multiverse
  1. Client-Server

    Аналогично заданию №7 второй подгруппы с соответствующей заменой тезнологий.
    Клиентская часть:
    • Получает от сервера список известных ему фильтров;
    • Позволяет загружать изображение из файла и отображать его на форме;
    • Позволяет отправлять изображение на сервер для применения к нему фильтра;
    • Во время ожидания ответа от сервера интерфейс остаётся отзывчивым (то есть, например, можно нажимать на кнопки);
    • Во время ожидания ответа от сервера есть возможность отменить предыдущее задание;
    • Во время ожидания ответа от сервера отображает текущую степень готовности на контроле вроде ProgressBar.
    Серверная часть:
    • При запуске загружает список доступных фильтров из конфигурационного файла;
    • Выдаёт список доступных фильтров на запрос клиентского приложения;
    • Обрабатывает получаемые от клиентских приложений изображения выбранным фильтром и возвращает результат;
    • Каждую секунду возвращает клиентскому приложению процент готовности текущего задания.
    Провести нагрузочное тестирование серверного приложения, выложить приложение или скрипт для тестирования в Git и оформить результаты отдельным файлом:
    • Построить график распределения времени выполнения запросов при фиксированном размере изображения в отсутствие другой нагрузки и при двух заданных уровнях нагрузки, исчисляемых в запросах в секунду.
    • Построить графики среднего и медианного времени выполнения запросов при различном общем числе пикселов в изображении в отсутствие другой нагрузки и при двух заданных уровнях нагрузки, исчисляемых в запросах в секунду.
    • Найти число клиентов, приводящее к отказу от обслуживания, для некоторого фиксированного размера изображения.

Домашняя работа 5. 22.10.18
[Дополнительно] Atomic vs. Non-Atomic Operations
[Дополнительно] Memory Ordering at Compile Time
[Доплонительно] Memory Barriers Are Like Source Control Operations
[Дополнительно] Weak vs. Strong Memory Models
[Дополнительно] Acquire and Release Semantics
Домашняя работа 4. 11.10.18
[Дополнительно] Обзор параллельных коллекций Scala
[Дополнительно] Шипилёв о недавно разработанном параллельном сборщике мусора Shenandoah. Часть 1.
[Дополнительно] Шипилёв о недавно разработанном параллельном сборщике мусора Shenandoah. Часть 2.
Шипилёв — Прагматика Java Memory Model
Шипилёв — Близкие Контакты JMM-степени
[Дополнительно] Андрей Паньгин — Искусство Java профилирования
[Дополнительно] Цикл статей автора C++ библиотеки c набором lock-free структур данных
[К заданию] WampServer
Определения blocking -> lock-free -> wait-free на одной странице с примерами
JMM Pragmatics слайды
  1. Реализовать mini web crawler. На вход программа получает URL сайта, не являющегося SPA, и максимальную глубину.
    Примерный алгоритм:
    - взять путь к очередной странице из некоей очереди,
    - скачать страницу,
    - найти все ссылки, добавить их в очередь на скачивание (одна страница не должна быть скачана более одного раза) ,
    - поставить страницу в очередь для сохранения на диск.
    В первой версии использовать пул потоков и коллекцию(и) из java.util.concurent

  2. Заменить используемые многопоточные коллекции на собственную реализацию. Реализация должна быть сложнее, чем "грубый" лок (synchronized(this) в каждом методе).

  3. Заменить стандартный пул потоков своей реализацией.

  4. Провести замеры производительности. Зависимость от кол-ва потоков, стандартных/собственных коллекций.
    Чтобы исключить влияние сетевых задержек, эксперименты лучше проводить используя web server, запущенный на локальной машине. Директория с файлами сайта на одном физическом диске, место сохранения скачанного на другом.

Домашняя работа 3. 05.10.18
[Дополнительно] Who ordered memory fences on an x86? - Пример алгоритма требующего барьеров памяти для корректной работы
[Дополнительно] Презентация про виды гарантий, примеры сломанных алгоритмов и алгоритмы когерентности кешей
[Лополнительно] Выжимка статьи, дающей формальное описание модели памяти x86, для инженеров
[К заданию]Introduction to parallel & distributed algorithms
[Дополнительно] What every programmer should know about computer memory
  1. Ознакомиться со статьей [К заданию]

  2. Реализовать алгоритм 3.3 (+ однопоточная версия)

  3. Упражнение 8. Найти решение. Реализовать (+ однопоточная версия).

  4. Упражнение 9. Найти решение. Реализовать (+ однопоточная версия).

  5. Упражнение 10. Найти решение. Реализовать (+ однопоточная версия).

  6. Произвести измерения времени работы
    - однопоточных версий,
    - многопоточных (n = 1, 2, 4, 8, ... количество ядер * 2)

Домашняя работа 2. 27.09.18
[К заданию]Введение в JMH на русском
[К заданию]Документация по JMH
[Дополнительно/К заданию]Презентация Шипилева о микробенчмаркинге в Java
[Дополнительно]Советы по использованию JMH
[Дополнительно]Анимированные пояснения к java.util.concurent.*
[Дополнительно]Обзор java.util.concurrent.* (Java 7)
  1. Реализовать Blur фильтр в соответствие с описанием, которое будет дано в классе.

  2. Применить фильтр к изображению, используя несколько потоков параллельно, разбивая пиксели на горизонтальные и вертикальные полосы.

  3. Проанализировать влияние на ускорение количества потоков, направления разбиения и размера картинки. Для замеров использовать JMH или другой бенчмарк-фреймворк.

  4. Массив байт для обработки формировать чтением картинки из файла.
    Обработанную фильтром картинку созранять файл.
    Время чтения - записи в замерах участвовать не должно.

Домашняя работа 1. 20.09.18
[К заданию]Отладка как процесс
[Дополительно]24-ядерный CPU, а я не могу набрать электронное письмо
[Дополительно]Рефакторинг программы на Go: ускорение в 23 раза
[К заданию]Guide to Java locks
[К заданию]Meaning of “ StringBuilders are not thread safe”
[К заданию]Документация Thread
Слайды к книге
Роман Елизаров. Слайды к выступлению на Devexperts 2016, на русском. Пересекаются с первыми лекциями.
  1. В статье "Отладка как процес" найти описание бага, который не возник бы, используй разработчик паттерн, описанный на лекции

    • Написать потоконебезопасный код (счетчик из слайдов/использование StringBuilder/что-то своё).
    • Убедиться, что результат некорректен.
    • Добиться корректности используя lock из стандартной библиотеки Java.
    • Релизовать свой lock, используя алгоритм Петерсона.
    • Заменить использование встроенного lock на свой.
    • Проверить, сохранится ли корректноть программы. Отчетность - скриншоты вывода каждой из версий программы. Алгоритм Петерсона очень вероятно на современной архитектуре работать не будет. Не ищите ошибку часами.
  2. Проверить измерениями, что графики производительности локов TAS и TTAS похожи на предсказанные теорией. Примечание: указанные локи реализовать, как на слайдах. Атомарный bool использовать из стандартной библиотеки Java.

© 2014-2018 HwProj