Курсовая по информатике и вычислительной технике в МФТИ имеет прямой образовательный контекст. В базовом наборе 2026 года направление 09.03.01 «Информатика и вычислительная техника» представлено несколькими конкурсными группами, включая компьютерные технологии, программную инженерию и компьютерные технологии, системное программирование и прикладную математику, естественные и компьютерные науки, математическое моделирование и теорию управления.
Это означает, что одинаковая поисковая фраза может вести к очень разным типам курсовых. Нужно ориентироваться на свою школу и дисциплину.
Официальный перечень:
https://pk.mipt.ru/bachelor/2026_places/
Системная тема
Подходящие задачи:
- allocator;
- scheduler;
- network stack;
- compiler;
- database engine;
- distributed service;
- embedded;
- HPC.
Не обязательно делать очередной CRUD-сервис.
Постановка
Например:
«Сравнение стратегий memory allocator при нагрузке с объектами разных размеров».
Или:
«Исследование задержки RPC при изменении batch size».
Есть метрика и эксперимент.
Baseline
Для системной работы baseline обязателен.
Это может быть:
- standard library;
- existing algorithm;
- naive implementation.
Без него непонятно, что улучшено.
Аппаратная среда
Зафиксируйте:
- CPU;
- cores;
- RAM;
- storage;
- OS.
Benchmark без hardware context трудно интерпретировать.
Версии
Сохраните:
- compiler;
- flags;
- library;
- kernel.
Оптимизация -O0 и -O3 может дать огромную разницу.
Не скрывайте настройки.
Compiler flags
Если сравниваете алгоритмы, используйте одинаковую конфигурацию.
Иначе вы сравниваете ещё и компилятор.
Warm-up
JIT, cache и lazy initialization могут делать первый запуск нетипичным.
Отделите warm-up от измерения.
Повторы
Один runtime недостаточен.
Сделайте, например, 20-100 повторов в зависимости от задачи.
Покажите:
- median;
- p95;
- variance.
Timer
Для короткой функции обычные часы могут иметь недостаточное разрешение.
Измеряйте batch операций.
Не выводите наносекунды с ложной точностью.
Cache
Кеш может полностью изменить результат.
Для memory benchmark задайте:
- working set;
- sequential/random;
- stride.
Покажите, где размер выходит за L1/L2/L3.
Memory bandwidth
Некоторые задачи ограничены не CPU, а memory.
Если увеличение числа cores перестаёт ускорять код, это возможная причина.
Используйте profiler или counters, если доступны.
Branch prediction
Для условного кода distribution input влияет на prediction.
Сравнивайте одинаковые данные.
Не делайте вывод на одном идеально предсказуемом наборе.
SIMD
Vectorization может ускорять численный код.
Проверьте:
- compiler report;
- alignment;
- data layout.
Не утверждайте SIMD по самому факту использования NumPy.
Многопоточность
Измерьте speedup:
T1 / Tp.
И efficiency:
speedup / p.
Не показывайте только время.
Amdahl
Если serial fraction остаётся большой, speedup ограничен.
Сопоставьте эксперимент с теоретическим пределом.
Synchronization
Mutex, atomic и barrier имеют overhead.
Профилируйте contention.
Не добавляйте lock вокруг всей функции.
False sharing
Два потока могут изменять разные переменные в одной cache line.
Производительность падает без логической race condition.
Это хороший системный кейс.
NUMA
На многосокетной системе память имеет разную локальность.
Если курс и hardware позволяют, можно исследовать pinning.
Но не добавляйте NUMA, если используется обычный ноутбук.
Сеть
Измеряйте:
- throughput;
- latency;
- jitter;
- packet loss.
Разделяйте localhost и реальную сеть.
Loopback не отражает физический канал.
RPC
На latency влияют:
- serialization;
- network;
- handler;
- queue.
Профиль помогает понять вклад.
Не приписывайте всё протоколу.
