87 lines
4.8 KiB
Markdown
87 lines
4.8 KiB
Markdown
# Технология параллельного программирования (Python)
|
||
|
||
Курс лабораторных работ для направления «Прикладная математика и информатика».
|
||
|
||
## Цель курса
|
||
|
||
Научиться осознанно выбирать модель исполнения для конкретной задачи:
|
||
|
||
| Модель | Когда помогает | Инструменты |
|
||
|---|---|---|
|
||
| Последовательный код | базовая линия | stdlib |
|
||
| Потоки (threads) | задачи I/O-bound | `threading`, `concurrent.futures` |
|
||
| Процессы (processes) | задачи CPU-bound | `multiprocessing` |
|
||
| Асинхронность | много I/O-операций, кооперативность | `asyncio` |
|
||
| Распределённые вычисления | несколько машин / узлов | `mpi4py` (MS-MPI) |
|
||
|
||
Отдельное внимание: **GIL** — почему потоки в CPython не ускоряют чистый Python-код,
|
||
и как это обходить.
|
||
|
||
## Состав работ
|
||
|
||
| № | Папка | Тема |
|
||
|---|---|---|
|
||
| 0 | `lab00_intro/` | Окружение: Python, venv, VS Code, проверка готовности |
|
||
| 1 | `lab01_sequential/` | Последовательное вычисление, профилирование, CPU-bound vs I/O-bound |
|
||
| 2 | `lab02_threads/` | Многопоточность на I/O-bound задачах, `ThreadPoolExecutor` |
|
||
| 3 | `lab03_gil/` | GIL: почему потоки не ускоряют CPU-код; `hashlib` как исключение |
|
||
| 4 | `lab04_multiprocessing/` | Процессы, `Pool`, накладные расходы, spawn на Windows |
|
||
| 5 | `lab05_sync/` | Гонки данных, `Lock`, `Semaphore`, `Event`, producer–consumer |
|
||
| 6 | `lab06_asyncio/` | `async/await`, event loop, `gather`, семафор, сравнение с потоками |
|
||
| 7 | `lab07_comparison/` | Одна задача × 4 подхода, закон Амдала, итоговые графики |
|
||
| 8 | `lab08_mpi/` | Распределённые вычисления, MPI (по указанию преподавателя) |
|
||
|
||
## Варианты
|
||
|
||
Каждый студент выполняет **свой вариант** — см. `common/варианты.md`
|
||
(20 вариантов: CPU-задача + параметры + I/O-нагрузка). Ядра всех задач уже
|
||
реализованы в `common/tasks.py` — смысл лабораторных именно в *организации
|
||
вычислений и замерах*, а не в переписывании алгоритмов.
|
||
|
||
## Установка (Windows, 10/11)
|
||
|
||
1. Python 3.10+ с python.org (галочка **Add python.exe to PATH**).
|
||
2. Открыть папку курса в VS Code (расширение Python).
|
||
3. В терминале VS Code:
|
||
|
||
```bat
|
||
python -m venv .venv
|
||
.venv\Scripts\activate
|
||
pip install -r requirements.txt
|
||
python lab00_intro\check_env.py
|
||
```
|
||
|
||
Если вывод кириллицы «кракозябрами» — выполните `chcp 65001`.
|
||
|
||
На macOS/Linux всё то же самое, кроме `activate` (там `source .venv/bin/activate`).
|
||
|
||
## Как сдавать
|
||
|
||
- Код: `labXX_.../solution.py` (заполняются заготовки, интерфейсы менять нельзя —
|
||
по ним работают автотесты).
|
||
- Отчёт: по шаблону `common/шаблон_отчёта.md` — таблицы замеров, графики, выводы.
|
||
- Самопроверка перед сдачей: `python -m pytest tests/ -k labXX` из корня курса.
|
||
- Чек-лист: `common/чек-лист_сдачи.md`. Типичные ошибки: `common/типичные_ошибки.md`.
|
||
|
||
## Структура репозитория
|
||
|
||
```
|
||
common/ банк задач, варианты, утилиты замеров, шаблоны
|
||
lab00_intro/ ... lab08_mpi/
|
||
методичка.md теория + задание + контрольные вопросы + критерии
|
||
examples/ запускаемые демонстрации
|
||
solution.py заготовка решения (заполняет студент)
|
||
tests/ автотесты pytest (самопроверка студента, проверка преподавателя)
|
||
instructor_solutions/ эталонные решения (только для преподавателя)
|
||
```
|
||
|
||
## Запуск примеров и решений
|
||
|
||
Все команды выполняются **из корня курса**:
|
||
|
||
```bat
|
||
python lab01_sequential\examples\01_perf_counter_demo.py
|
||
python lab01_sequential\solution.py
|
||
python -m pytest tests\ -v
|
||
```
|