Пилотный выпуск видео курса «Параллельное Программирование и Оптимизация для Intel Xeon Phi копроцессоров»

  • Tutorial
Привет, Хабр!

Как указано в названии этого топика, я активно тружусь над созданием учебного видео курса о параллельном программировании и оптимизации кода для высоко-производительных систем на базе Intel'овских архитектур. Ниже представлена дополнительная информация об этом курсе, список покрываемых тем и лабораторных работ, а так же пилотных эпизод, который даст представление о содержании и формате этого курса.

В текущем модуле на примере построения гистограммы будут показаны две оптимизационные техники для улучшения автоматической векторизации кода компилятором и приведены результаты производительности для Intel Xeon CPU и Intel Xeon Phi копроцессора.




Этот курс снимается для компании Intel на английском языке, и будет использован там, где я или мои коллеги из компании не могут присутствовать лично. Список тем, включённый в этот видео курс основан на нашем однодневном трейнинге. Слайды этого курса можно посмотреть по следующей ссылке: http://research.colfaxinternational.com/post/2014/10/13/CDT-Slides.aspx. При скачивании файла со слайдами email и имя запрашиваются для внутренней статистики и в рассылки писем без согласия клиента не включаются.
Список тем трейнинга (на английском)
  1. Welcome
    • About This Document
    • Disclaimer
    • Introduction to the Intel Many Integrated Core (MIC) Architecture
    • Purpose of the Intel MIC Architecture
    • Details of the MIC Architecture
    • Software Tools for Intel Xeon Phi Coprocessors
    • Will My Application Benefit from the MIC architecture?
    • Models for Intel Xeon Phi Coprocessor Programming
  2. Overview of Programming Options
    • Native Coprocessor Applications
    • Explicit Offload
    • Data and Memory Buffer Retention
    • Virtual-Shared Memory Offload Model
    • Handling Multiple Coprocessors
    • Heterogeneous Programming with Coprocessors using MPI
    • File I/O in MPI Applications on Coprocessors
  3. Expressing Parallelism on Intel Architectures
    • SIMD Parallelism and Automatic Vectorization
    • Thread Parallelism and OpenMP
    • Thread Synchronization in OpenMP
    • Reduction Across Threads: Avoiding Synchronization
    • Distributed Memory Parallelism and MPI
    • Summary and Additional Resources
  4. Optimization Using Intel Software Development Tools
    • Optimization Roadmap
    • Library Solution: Intel Math Kernel Library (MKL)
    • Node-Level Tuning with Intel VTune Amplifier XE
    • Cluster-Level Tuning with Intel Trace Analyzer and collector
  5. Optimization of Scalar Arithmetics
    • Compiler-friendly Practices
    • Accuracy Control
    • Optimization of Vectorization
    • Diagnostics and Facilitation of Automatic Vectorization
    • Vector-friendly Data Structures
    • Data Alignment for Vectorization
    • Strip-Mining for Vectorization
    • Additional Vectorization ``Tuning Knobs''
  6. Optimization of Thread Parallelism
    • Reduction instead of Synchronization
    • Elimination of False Sharing
    • Expanding Iteration Space
    • Controlling Thread Affinity
  7. Optimization of Data Traffic
    • Memory Access and Cache Utilization
    • PCIe Traffic Optimization in Offload Applications
    • MPI Traffic Optimization: Fabric Selection
  8. Optimization of MPI Applications
    • Load Balancing in Heterogeneous Applications
    • Inter-Operation with OpenMP
    • Additional Resources
  9. Course Recap
    • Knights Landing, the Next Manycore Architecture
    • Where to Get More Information
    • How to Obtain an Intel Xeon Phi Coprocessor


Так же планируется включить лабораторные работы, в которых шаг за шагом показываются этапы оптимизации кода на конкретных примерах. Список названий этих практических упражнений представлен ниже.
Названия лабораторных (на английском)
  • 2.1-native
  • 2.2-explicit-offload
  • 2.3-explicit-offload-persistence
  • 2.4-explicit-offload-matrix
  • 2.5-sharing-complex-objects
  • 2.6-multiple-coprocessors
  • 2.7-asynchronous-offload
  • 2.8-MPI
  • 2.9-openmp4.0
  • 3.1-vectorization
  • 3.2-OpenMP
  • 3.3-Cilk-Plus
  • 3.4-MPI
  • 4.1-vtune
  • 4.2-itac
  • 4.3-serial-optimization
  • 4.4-vectorization-data-structure
  • 4.5-vectorization-compiler-hints
  • 4.6-optimize-shared-mutexes
  • 4.7-optimize-scheduling
  • 4.8-insufficient-parallelism
  • 4.9-affinity
  • 4.a-tiling
  • 4.b-Nbody
  • 4.c-cache-oblivious-recursion
  • 4.d-cache-loop-fusion
  • 4.e-offload
  • 4.f-MPI-load-balance
  • 4.g-hybrid
  • 4.h-MKL


Работа над записью и монтажом только началась. Поэтому очень хотелось бы узнать мнение Хабра по вопросам, представленным ниже. Для меня русский перевод одной только звуковой дорожки 10 минутного эпизода, а их будет 50-60 — это несколько часов работы. Так что хотелось бы знать заранее имеет ли моя затея ценность для посетителей Хабра. Так что любая конструктивная критика по содержанию/представлению или просто комментарий только приветствуется.

Only registered users can participate in poll. Log in, please.

Интересна ли эта тема сообществу?

С какими из следующих утверждений вы согласны?

Какие темы в видео курсе о параллельном программировании и оптимизации для Intel Xeon Phi копроцессоров будут для вас наиболее интересны?

Share post

Similar posts

Comments 20

    +2
    Какие задачи выгодно решать на Xeon Phi? Как-то те тесты, что я видел, показывают не очень радужные результаты.
      0
      Если кратко, то пока только в тех случаях, где есть compute-bound или bandwidth-bound задачи. Т.е. много вычислений на каждое число, так как доступно до 2.2 TFLOP/s для одинарной точности; или же последовательный доступ к памяти — т.к. 8 контроллеров памяти с прифетчингом справятся с этой задачей лучше (реальные 160 GB/s), чем CPU (~60GB/s). Проблемы возникают, если есть случайный доступ к данным. Тут пиши — «пропало!». Прифетчинг становится бесполезным и наблюдается резкое падение пропускной способности. Такая же картина будет на GPGPU, если у вас есть опыт программирования для этих архитектур.

      Можно ещё добавить, что пока Xeon Phi имеют только in-order ядра, т.е. параллелизм на уровне инструкций, как при out-of-order buffers — отсутствует. Это поменяется со следующим поколением Xeon Phi — Knights Landing.

      Ну и пока мы ограничены шириной PCIe шины, которая для 2ого поколения устройств (PCIe v2 with 16 lanes) может пропускать до 7 GB/s (реальных я видел только 6.5 GB/s). Т.е. из простого расчёта можно прикинуть, что нужно минимум где-то 1200 FLOPs на каждый double, что бы оправдать перегон этих данных по шине. Опять таки это поменяется со следующим поколением, т.к. Интел решил выпустить Knights Landing как CPU чип, т.е. все куча ядер будут сидеть прям на материнской плате с доступом к сотням гигабайт памяти.

      Как-то так… Я об этом буду подробно в курсе говорить.
        0
        А я вот, что нашёл www.nvidia.com/object/justthefacts.html может конечно и ангажировано но всё же…
        +5
        Копропроцессоры, ок.
          –2
          А если по сути вопроса, пожалуйста?
              –2
              Спасибо за поправку. Учту при дальнейших переводах. Хотя себя будет сложно переучить, т.к. в ангийской транскрипции это слово читается именно как «ко-», а не «со-». Это как в названии штата «Техас» отродясь не было буквы «х» (американцы произносят его как «Тексыс»), но в русском произношении — появилась, думаю из-за схожего написания ;)
                +2
                Причём тут транскрипция, когда префикс «co-» однозначно переводится как «со-» =)
                соfounder => соучредитель, а не коучредитель
                  –3
                  Префикс «со-» произошёл от латинского «cum», который читается как «кум» — cum laude (кум лауде) с похвалой. Как в русском «к» стало «с» — ума не приложу. Но я и не филолог, так что мне можно.

                  Предлагаю лучше на темы производительных вычислений поговорить.
                    0
                    Префикс co- (лат.) в данном случае не переходит в со- (рус.), а переводится, как и processor.
                    В отличие от coworking, который транслитерируется целиком, из-за трудности буквального однозначного перевода.
                  +2
                  нет, Texas в русском языке просто транслитерирован не с английского, а с испанского. отсюда и ударение.
            +2
            Вся суть видео могла быть передана 4 сниппетами кода и 4 графиками, соответственно. С парой абзацев про объяснения.
            Собственно, я сомневаюсь, что вы расскажете что-то большее, чем есть в книге «C++ Concurrency in Action: Practical Multithreading» by Anthony Williams. А прочитать её за две недельки можно, читается гораздо легче, чем просмотр данного видео :)
              –1
              Вы правы. Данный пример очень прост. Хуже дела, например, обстоят с кодом для оптимизации использования кеша. там снипет кода может не помочь, и проще будет выслушать чьё-то объяснение. В нашей книге (xeonphi.com/book) есть и такие примеры. А в целом, видео лекции создаются с двойной целью: 1) некоторые ученики предпочитают видео материал, чем чтение книг. 2) дальнейшее распространение учебного материала в странах не говорящих по-английски можно сделать просто переведя субтитры на нужный язык.
                0
                Упомянутая книга рассматривает особенности реализации параллельного доступа к С++11 структурам данных. При этом векторизация, распределённые вычисления в кластерах, оптимизация траффика, оптимизация доступа к памяти, и остальные 90% материала нашего учебного курса она не рассматривает. Так что можете, конечно, сомневаться, но я расскажу намного больше, чем покрыто в упомянутой книге.
                  0
                  Блин, я упоролся совсем. Конечно это не эта книга, хотел написать про www.akkadia.org/drepper/cpumemory.pdf «What every programmer should know about memory».
                    0
                    Да, это хорошая статья. Я её всем рекомендую, тем более, что с Уричем Дреппером я лично знаком, с тех пор когда он ещё работал в Red Hat, и приезжал к нам на кампус в North Carolina State University, где главный офис «красных шапочек» и находился. Но опять, это только работа памяти. А где векторизация, где неоднородные распределённые вычисления, я спрашиваю?..
                      0
                      Он же Ульрих :)
                        0
                        Прошу прощения, описочка вышла. Хотя, если честно, я его имени даже и не помнил. Будучи тогда студентом аспирантуры я осмелился его называть только «мистером Дреппером». До обращения к нему по первому имени я тогда ещё не дорос.
                +2
                Программа курса в целом интересна, однако предложенный видеоролик удручает. Зачем-то на протяжении 12 минут два раза объясняется тривиальная «оптимизация». Для того, видимо, чтобы в конце показать высокие синие столбики. Продемонстрировали бы их сразу на 7 минуте и дело с концом, все равно об их получении в ролике нет ни слова. Можно, правда, заметить, что использовались Cilk и OpenMP. В общем, лучше уж совсем без видео, нежели с таким.
                  0
                  Учтём.

                  Я согласен, сейчас это странно выглядит. Связано это с тем, что в начале были сняты два отдельных видео ролика: теоретическая часть отдельно от практической. Они были просто склеены вместе, когда я занялся русской озвучкой.
                  В дальнейшем, я думаю, стоит объединять их в месте. Т.е. при показе слайда с теоретическим объяснением можно сбоку ещё показывать изменение исходного кода программы.

                  В любом случае, спасибо за комментарий.

                Only users with full accounts can post comments. Log in, please.