Куканов Алексей рассказал о последней версии стандарта С++, который добавляет в язык и библиотеку поддержки средства для использования потоков исполнения (threads) и синхронизации между ними. А так же о наиболее часто встречающихся параллельных шаблонах, реализованных в программных моделях Intel® Threading Building Blocks и Intel® Cilk Plus, и о примерах их использования.
- Параллелизм – норма жизни
- С++ до 2011+
- Как это всё использовать?
- Многопоточность – это сложно
- Deja vu
- Параллелизм без потоков – это как?
- Параллельные шаблоны
- Intel® Cilk™ Plus
- Intel®
- Fork-join запускает исполнение нескольких задач одновременно и затем дожидается завершения каждой из них
- Использование parallel_invoke
- Fork-Join в Intel® Cilk™ Plus
- Подробнее о cilk_sync
- Fork-Join в Intel® TBB task_group g; … g.run( functor1 ); … g.run( functor2 ); … g.wait()
- Пример: быстрая сортировка
- Рекурсивный (вложенный) параллелизм
- Эффективная рекурсия с fork-join
- Map применяет указанную функцию к каждому элементу из заданного набора
- Использование parallel_for
- Пример с #pragma simd
- cilk_for
- Пример с cilk_for void saxpy
- tbb::parallel_for parallel_for( lower, upper, functor )
- Пример с parallel_for void saxpy
- Управление распределением работы parallel_for
- Если parallel_for не подходит parallel_for_each
- Использование enumerable_thread_specific<float> sum; parallel_for
- Пример: свёртка с #pragma simd
- Редукторы /*Reducers*/ в Cilk Plus
- Более подробно о редукторах
- Пример с enumerable_thread_specific
- Пример с parallel_reduce
- Комментарии к parallel_reduce
- Конвейер – цепочка из стадий обработки потока данных
- parallel_pipeline
- Стадии конвейера
- make_filter<X,void>
- Запуск конвейера parallel_pipeline,
- Bzip2
- Параллельные шаблоны