4.8 KiB
4.8 KiB
Технология параллельного программирования (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)
- Python 3.10+ с python.org (галочка Add python.exe to PATH).
- Открыть папку курса в VS Code (расширение Python).
- В терминале VS Code:
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/ эталонные решения (только для преподавателя)
Запуск примеров и решений
Все команды выполняются из корня курса:
python lab01_sequential\examples\01_perf_counter_demo.py
python lab01_sequential\solution.py
python -m pytest tests\ -v