Курсовая по информатике и вычислительной технике в НИЯУ МИФИ естественно тяготеет к системным задачам. В актуальном перечне образовательных программ направление 09.03.01 связано с компьютерными системами и технологиями, а исторически и предметно подготовка включает сетевые аппаратно-программные комплексы, параллельную обработку, микропроцессорные системы и защищённые технологии.
Официальные страницы:
https://admission.mephi.ru/admission/baccalaureate-and-specialty/education/programs
https://admission.mephi.ru/about/specialty/090301-oz-vpo
Выберите уровень
Тема может быть про:
- CPU;
- memory;
- network;
- embedded;
- OS;
- distributed system;
- FPGA;
- storage.
Не пытайтесь исследовать весь компьютер.
Сформулируйте измеримый вопрос
Например:
«Как изменяется latency сетевого сервиса при росте batch size?»
Или:
«Как layout данных влияет на скорость обработки массива, превышающего размер cache?»
Такая постановка задаёт experiment.
Hardware context
Зафиксируйте:
- CPU;
- cores;
- RAM;
- storage;
- network;
- OS.
Benchmark без hardware почти невозможно повторить.
Software environment
Сохраните:
- compiler;
- version;
- flags;
- library;
- kernel.
-O0 и -O3 могут дать больше разницы, чем ваш алгоритм.
Baseline
Всегда нужен ориентир.
Например:
- standard library;
- single-thread;
- naive algorithm.
Без baseline ускорение не имеет смысла.
Correctness first
Сначала убедитесь, что обе реализации дают одинаковый результат.
Быстрая программа с другой математикой не является оптимизацией.
Используйте differential tests.
Memory hierarchy
Разделяйте:
- registers;
- cache;
- RAM;
- storage.
Задержки различаются на порядки.
Алгоритм может упираться в память, а не CPU.
Cache locality
Для массива сравните row-major и плохой stride.
Измерьте время при разных working set.
Можно увидеть переход через L1/L2/L3.
Data layout
Array of Structures и Structure of Arrays могут вести себя по-разному.
Если тема вычислительная, это хороший эксперимент.
SIMD
Vectorization ускоряет однотипные операции.
Но нужно подтвердить:
- compiler report;
- instruction;
- benchmark.
Не утверждайте SIMD только потому, что цикл короткий.
Branch prediction
Предсказуемое условие быстрее случайного.
Сгенерируйте разные distributions.
Не делайте вывод на одном удобном input.
Multithreading
Измеряйте:
T1
T2
T4
T8.
Рассчитайте speedup.
Число threads не равно ускорению.
Amdahl
Если часть программы остаётся последовательной, максимальный speedup ограничен.
Сопоставьте измерение с теорией.
Contention
Threads могут ждать mutex.
Profiler покажет, где.
Не ставьте lock вокруг всей критичной функции.
False sharing
Разные variables в одной cache line могут тормозить потоки.
Это хороший пример системной проблемы без race condition.
NUMA
Если hardware многосокетный, локальность памяти влияет на performance.
Но не включайте NUMA в курсовую на обычном laptop.
Метод должен соответствовать среде.
Network
Измеряйте:
- latency;
- throughput;
- jitter;
- loss.
Не используйте только ping.
Он не характеризует application workload.
TCP/UDP
Выбор зависит от требований.
TCP даёт reliability и order.
UDP даёт иной trade-off.
Не называйте один протокол «быстрее вообще».
