Архитектура вычислительных систем
1. Введение
Назначение элементов суперкомпьютера. Правила пользования и основы безопасности работы с многопользовательскими компьютерными системами. Лицензионные соглашения, договоры о неразглашении, открытое программное обеспечение, свободное программное обеспечение. Подключение к суперкомпьютеру: основы асимметричной криптографии, ключи SSH, OpenSSH, PuTTY, Cygwin, OpenPGP, GNUPG.
2. Операционные системы и менеджеры ресурсов
Дистрибутивы Linux. FreeBSD. Утилиты командной строки. FHS. POSIX. Система прав UNIX. STDIO. Управление процессами. Текстовые редакторы, кодировки, перенос каретки. Системы контроля версий, GIT. Основы Bash. Менеджер ресурсов SLURM.
3. Информатика и программирование
Архитектура процессора, набор инструкций, x86, ARM, RISC-V. Исходный код, бинарный код, ASM, компиляция, GCC, ELF, objdump, GDB. Stack, пространство ядра, пространство пользователя, системный вызов, heap, утечка памяти, strace, valgrind. Профилирования, perf. Объектные файлы, статические и динамические библиотеки, линковка, переменные окружения PATH, INCLUDE_PATH, LIBRARY_PATH, LD_LIBRARY_PATH. Низкоуровневые пакетные менеджеры dpkg, rpm. Высокоуровневые пакетные менеджеры apt, yum. Репозитории программного обеспечения. Установка ПО в многопользовательской ОС с правами пользователя. Внесистемные пакетные менеджеры, pip —user. Системы конфигурирования и сборки исходного кода, make, cmake, autotools.
4. Векторное программирование
Переменные с плавающей точкой, FP32, FP64. Сопроцессор x87. SIMD, MMX, 3DNow!, SSE, AVX, FMA4, AVX2, AVX512. FLOPS. HPL. Автоматическая оптимизация и векторизация компилятором, переносимость бинарных файлов. Intrinsic. BLAS, LAPACK, Atlas, OpenBLAS. Memory Gap, RAM cache, оптимизация времени исполнения, FFTW.
5. Параллельное программирование на общей памяти
Многозадачность, прерывания, переключение контекста, вымывание cache, HyperThreading, Shared memory, UMA, NUMA, distributed memory, distributed-shared memory. OpenMP, fork-join model, состояние гонки, атомарность.
6. Параллельное программирование на распределенной памяти
MPI. OpenMPI, MPICH. Rank, Send. Broadcast, scatter, gather, reduction. Блокирующие и неблокирующие сообщения. Кривая масштабируемости. Задержки ввода-вывода. Последовательный и параллельный ввод-вывод.
7. Программная и аппаратная топология современных суперкомпьютеров при параллельном программировании
LLC, общие и раздельные кэши, каналы оперативной памяти, SNC, UPI, multi-socket platform topology, system bus topology, PCIe, NVLink. Конвергентные и неконвергентные сети, ethernet, TCP/IP stack, прерывания при передаче данных по сети, InfiniBand link level flow control, драйвер в пространстве пользователя. Блокирующие и неблокирующие сетевые топологии, Tree, FatTree, HyperCube. Данные, метаданные, размер сообщения и производительность. Кластерные файловые системы, POSIX, ROMIO, NCDF4, HDF5.
8. Графические ускорители
Программирования на неполных по Тьюрингу сопроцессорах. Пропускная способность и задержки различных архитектур оперативной памяти. DDR, GDDR, HBM. Длина процессорного конвейера. Аппаратная поддержка перемеренных разной точности и типов. PCIe, NVLink, InfinityFabric. Свободные и проприетарные драйверы. OpenCL, clBLAS, clFFT. NVIDIA HPC SDK, CUDA, CUDA compute capability, cuBLAS, cuFFT, cuSOLVER. AMD ROCm, HIP, hipSOLVER. ARRAY FIRE, MAGMA. CuPy, Numba. Аппаратное ускорение нейросетей, Nvidia CuDNN, MiOpen, pyTorch, TensorFlow. Google TPU, Google Coral.
9. Квантовые компьютеры
Квантовая суперпозиция. Кубит. Понятие квантовой логики. Твердотельные и ионные реализации. Классические компьютеры до использования транзисторов: механические, пневматические, ламповые. Квантово-сильное и квантово-слабое измерение. Измерение в классических аналоговых сопроцессорах. Нарушение суперпозиции. Вероятностный характер квантовых операций. Статистический анализ результатов. Квантовое превосходство. Квантовая оптимизация. Квантовая факторизация и криптография. Квантовое моделирование. Эмуляторы квантовых компьютеров. QOSF.