Init
This commit is contained in:
commit
c394677d07
59 files changed
+5149
No files matched your search
@@ -0,0 +1,86 @@
|
||||
# Технология параллельного программирования (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
|
||||
```
|
||||
Reference in new issue
Block a user