C++ Party 2014: Лекция 17. Параллелизм в С++: управляйте приложением, а не потоками! Куканов Алексей

1460

Куканов Алексей рассказал о последней версии стандарта С++, который добавляет в язык и библиотеку поддержки средства для использования потоков исполнения (threads) и синхронизации между ними. А так же о наиболее часто встречающихся параллельных шаблонах, реализованных в программных моделях Intel® Threading Building Blocks и Intel® Cilk Plus, и о примерах их использования.

  1. Параллелизм – норма жизни
  2. С++ до 2011+
  3. Как это всё использовать?
  4. Многопоточность – это сложно
  5. Deja vu
  6. Параллелизм без потоков – это как?
  7. Параллельные шаблоны
  8. Intel® Cilk™ Plus
  9. Intel®
  10. Fork-join запускает исполнение нескольких задач одновременно и затем дожидается завершения каждой из них
  11. Использование parallel_invoke
  12. Fork-Join в Intel® Cilk™ Plus
  13. Подробнее о cilk_sync
  14. Fork-Join в Intel® TBB task_group g; … g.run( functor1 ); … g.run( functor2 ); … g.wait()
  15. Пример: быстрая сортировка
  16. Рекурсивный (вложенный) параллелизм
  17. Эффективная рекурсия с fork-join
  18. Map применяет указанную функцию к каждому элементу из заданного набора
  19. Использование parallel_for
  20. Пример с #pragma simd
  21. cilk_for
  22. Пример с cilk_for void saxpy
  23. tbb::parallel_for parallel_for( lower, upper, functor )
  24. Пример с parallel_for void saxpy
  25. Управление распределением работы parallel_for
  26. Если parallel_for не подходит parallel_for_each
  27. Использование enumerable_thread_specific<float> sum; parallel_for
  28. Пример: свёртка с #pragma simd
  29. Редукторы /*Reducers*/ в Cilk Plus
  30. Более подробно о редукторах
  31. Пример с enumerable_thread_specific
  32. Пример с parallel_reduce
  33. Комментарии к parallel_reduce
  34. Конвейер – цепочка из стадий обработки потока данных
  35. parallel_pipeline
  36. Стадии конвейера
  37. make_filter<X,void>
  38. Запуск конвейера parallel_pipeline,
  39. Bzip2
  40. Параллельные шаблоны