Stanford CS149: как правильно проектировать параллельные системы?

Stanford Online 21,3 тыс. 1 ч 17 мин 2 мин 15.09.2024
Главное

Основы параллельного программирования: от принципов к реализации 2:49

Параллельное программирование требует четкого разделения между тем, что программа должна вычислять, и тем, как она фактически выполняется на аппаратном обеспечении. Лекция профессора в рамках курса Stanford CS149 охватывает ключевые концепции: работу с ispc, управление задачами и вопросы синхронизации потоков. Основная идея заключается в том, что эффективная масштабируемость программ зависит от способности программиста грамотно декомпозировать задачи и минимизировать последовательные участки кода.

⚙️ Модель программирования ispc 3:03

ispc (Intel Implicit SPMD Program Compiler) позволяет писать код, который выполняется одновременно в нескольких потоках, используя векторные инструкции (SIMD).

Важные конструкции:

🛠 Управление задачами и производительность 32:06

При создании параллельных задач важно избегать чрезмерных накладных расходов.

🔄 Синхронизация и декомпозиция: пример итеративного решателя 53:03

Разбор итеративного решателя (fluid solver) наглядно показывает, как декомпозиция влияет на параллелизм.

Рекомендация: Чтобы избежать проблем с производительностью из-за конкуренции за общие ресурсы (например, общую переменную diff), рекомендуется использовать локальные копии данных для накопления промежуточных результатов, которые суммируются лишь один раз в конце итерации.

💬 Цитаты

«Магия компилятора, который сам всё распараллеливает, в основном не существует.»

Профессор CS149 42:42

«Если вы создадите 100 000 задач, создавать 100 000 потоков будет глупо.»

Профессор CS149 32:19
👥 Спикер
🔗 Упомянутые сайты и проекты
📖 Термины
SIMD
Архитектура процессора, позволяющая выполнять одну и ту же операцию над множеством данных одновременно.
Gang size
Количество экземпляров (потоков выполнения) `ispc`-программы, работающих параллельно.
Race condition
Ситуация, когда результат работы программы зависит от непредсказуемого порядка выполнения операций разными потоками.
Barrier
Примитив синхронизации, заставляющий все потоки ждать достижения определенной точки в коде перед тем, как продолжить.
📊 Цифры
⚖️ Другая сторона
Технологии и IT Parallel Computing ispc SIMD Amdahl's Law