Intel Parallel Studio XE 2017: «Python до нас приходить» та інші новинки


На першому тижні вересня цього року вийшла в світ нова версія продукту Intel Parallel Studio XE 2017. Давайте розбиратися, що цікавого з'явилося в ній.

Як правило, пакет студії доступний в трьох варіантах: Composer, Professional і Cluster Edition.
У перший варіант входять компілятори (С/С++ та Fortran) і різні бібліотеки. Ще з минулої версії XE 2016 таких було аж 4 штуки:

  • швидка математичну бібліотеку Intel Math Kernel Library (MKL)
  • бібліотека для обробки даних і мультимедіа Intel Integrated Performance Primitives (IPP)
  • бібліотека шаблонів С++ Intel Threading Building Blocks (TBB)
  • бібліотека для машинного навчання та аналітики даних Intel Data Analytics Acceleration Library (DAAL).
У Professional Edition додаються засоби динамічного аналізу додатків, такі як профілювальник Intel VTune Amplifier, засіб для прототипування паралелізму та роботи з векторизацией коду Intel Advisor, а так само пошуку помилок з пам'яттю і потоками Intel Inspector. У флагманської версії Intel Parallel Studio XE Cluster Edition в наших руках весь набір інструментів, який допоможе створити і оптимізувати наш додаток вже на кластері, з допомогою Intel MPI і засобів для роботи з ним.

Крім всього цього є бібліотека IMSL від сторонніх розробників Rogue Wave, часто використовувана при обчисленнях. Вона доступна як в пакеті з компілятором Fortran, так і як окремий додаток. Наступна табличка показує розподіл коштів розробки по пакетах:



Важливе доповнення у всіх версіях студії (і не тільки) – з'явився пакет Intel Distribution for Python, який дозволяє використовувати Python (2.7 і 3.5), «оптимізований» дбайливими інженерами компанії Intel, на Windows, Linux і OS X. В самій мові нічого нового не з'явилося, просто пакети NumPy, SciPy, pandas, scikit-learn, Jupyter, matplotlib, і mpi4py тепер оптимізовані під «залізо» з використанням бібліотек Intel MKL, TBB, DAAL і MPI, за рахунок чого додаток виконується більш ефективно і швидко. До речі, викачати цей пакет можна абсолютно безкоштовно з сайту Intel. Там же можна побачити, чим же такий хороший «затюненый» Python:



Очевидно, що продуктивність Intel Python наближає його по швидкості роботи до З/Intel MKL, при цьому значно випереджаючи конкурентів. До речі, добре відомий профілювальник VTune Amplifier тепер так само підтримує Python.

З глобально нових продуктів в пакет Intel Parallel Studio XE це, мабуть, найголовніше.
Тепер про те, що з'явилося в кожному з складових пакету.

Компілятори
З ним я обов'язково напишу окремий, більш докладний блог. А тут, «коротенькі» перерахую те, що там з'явилося:

  • Бібліотека шаблонів С++ SIMD Data Layout Templates (SDLT) для вирішення проблеми переходу від масиву структур (AoS – Array of Structures) до структури масивів (SoA – Structure of Arrays), що призводить до зменшення непослідовних доступів до пам'яті і gather/scatter інструкцій при векторизації.

  • Підтримка процесорів другого покоління Intel Xeon Phi і нове ім'я mic_avx512.

  • Ще більш повна підтримка OpenMP (стандарту 4.0, так і більш пізнього 4.5).

  • Новий функціонал по оффлоду на Intel Xeon Phi з допомогою OpenMP

  • Можливість генерувати файли (html або текстові) з вихідним кодом і інтегрованим звітом про оптимізацію, що буде дуже корисно разрабочтикам, що працює з командного рядка без середовища розробки. Крім того, інформативність самих звітів про оптимізацію і векторизації покращено за багатьма напрямками.

  • Новий атрибут, директива і опція компілятора для вирівнювання коду (не даних, а саме самих інструкцій для функцій або циклів).

  • Більш широка підтримка стандарту C++14, зокрема тепер ми можемо використовувати шаблони змінних, звільняти пам'ять певного розміру глобальним оператором delete, користуватися constexpr функціями з помітно меншими обмеженнями, ніж було в стандарті С++11. Повний список підтримуваних можливостей стандарту можна знайти на цієї сторінці.

  • Стандарт С11 підтримується тепер повністю (не плутати з С++11, який вже давно підтримується), за винятком ключового слова _Atomic і відповідного атрибута __attribute((atomic)).

  • З'явився ряд нових опцій компілятора, покликаних спростити його використання. Наприклад, ключик /fp: послідовне (Windows) і -fp-model consistent (Linux), який включає в себе ряд інших (/fp:precise /Qimf-arch-consistency:true /Qfma-).

  • Нові можливості по оффлоду обчислень на інтегровану графіку з використанням OpenMP. Наприклад, тепер можливий асинхронний оффлод з допомогою клаузы DEPEND в TARGET директиві. Крім цього, компілятор може виробляти векторизацію з типом short.

  • В компіляторі Fortran так само сталося багато змін. Особливо цікавим буде істотне збільшення продуктивності коду на Coarray Fortran. У ряді випадків прискорення досягає трьох разів порівняно з попередньою реалізацією. Так само з'явилася можливість говорити компілятору про вирівнювання динамічно виділяються масивів, а стандарти Fortran 2008 і 2015 підтримуються ще більш широко. Зокрема, тепер на озброєння досвідченого розробника масив констант з неявної формою, можливість використовувати BIND© для внутрішніх процедур, а покажчики можуть бути ініціалізується при оголошенні (так, до 2008 стандарту в Фортране це не підтримувалося).
І це лише верхівка айсберга. Насправді змін величезна кількість. В цілому, компілятор, як і очікувалося, став генерувати ще більш продуктивний код, підтримуючи всі останні нововведення в «залозі». А порівняння компілятор Intel на бенчмарках з конкурентами зайвий раз доводить це.



Як видно, на тестах SPECfp і SPECint перевагу версії 17.0 компілятора досить значна.

Intel VTune Amplifier XE 2017
Раз вже на ринок вийшов процесор другого покоління Intel Xeon Phi (кодове ім'я Knights Landing (KNL), то звичайно ж профилировщике з'явилася підтримка різних типів аналізу для нього, щоб ваші програми просто «полетіли» після оптимізації. Тут і аналіз пропускної здатності пам'яті, щоб зрозуміти, які дані потрібно покласти в швидку MCDRAM, і микроархитектурный аналіз, та аналіз масштабованості MPI і OpenMP, і ще багато всього смачного.

До речі, у VTune є аналіз HPC Performance Characterization, який є свого роду точкою входу для оцінки продуктивності обчислювально-інтенсивних програм, що дозволяє подивитися в деталях (на відміну від Application Performance Snapshot, про який мова піде пізніше) на три важливих аспекти утилізації «заліза» — СPU, пам'ять і FPU:


Як я вже говорив, тепер VTune вміє профілювати програми на Python, виконуючи аналіз хотспотів через програмне семплювання (Basic Hotspots analysis). Ще одне нововведення – можливість профілювати програми на мові Go, збираючи апаратні події PMU.

Новий тип аналізу з'явився у версії 2017 – аналіз дискового введення-виведення (Disk Input and Output analysis). З його допомогою можна відстежувати використання дискової підсистеми, шин CPU і PCIe:



Крім того, аналіз допомагає знаходити операції вводу-виводу з високою латентністю, а так само дисбаланс між ними і реальними обчисленнями.

Розмір максимальної пропускної здатності DRAM тепер визначається автоматично при аналізі доступу до пам'яті (Memory Access analysis), дозволяючи тим самим розуміти наскільки добре вона використовується. У цьому типі аналізу так само додана підтримка кастомних аллокаторов пам'яті, що дозволяє правильно визначати об'єкти в пам'яті. Є можливість співвіднести промахи по кешу до конкретної структурі даних, а не просто кодом, який призводить до нього. До речі, тепер не потрібне встановлення спеціальних драйверів на Лінуксі для виконання цього аналізу.

Доповнення з'явилися і при профілюванні OpenCL і GPU. VTune покаже загальну зведення проблем з докладним описом:


Крім цього можна переглянути вихідний код або ASM для ядер OpenCL, а так само відловлювати випадки використання загальної віртуальної пам'яті (Shared Virtual Memory).
Користуватися профілювальником віддалено через командний рядок стало ще простіше.
Нова група Arbitrary Targets дозволяє згенерувати командний рядок для аналізу продуктивності системи, недоступною з поточного хоста. Це може бути дуже корисним для микроархитектурного аналізу, так як дає доступ до апаратних подій, доступним на платформі, яку ми обрали:



В пакеті з Parallel Studio з'являються спеціальні «легкі» інструменти, що дозволяють отримати загальне уявлення про нашому додатку. Вони отримали вивіску Performance Snapshots, і мають на даний момент три варіанти:

  • Application – для не MPI додатків
  • MPI – правильно, для MPI додатків
  • Storage – для аналізу використання сховища
Що вони з себе представляють? Розглянемо, для прикладу, інструмент Application Performance Snapshot:



Запустивши його, на виході ми маємо выосокоуровневую зведення за тим, де наш додаток може потеницально виграти. З іншого боку, можемо назвати це слабкими місцями, які потрібно виправити. Ми отримуємо час виконання програми, продуктивність в флопсах, а так само відповідь на 3 питання: як ефективно використовувалися обчислювальні ядра CPU (CPU Utilization), як багато ми витрачали на роботу з пам'яттю (Memory Bound), і як використовувався FPU (FPU Utilization). У підсумку нам уявляється загальна картина про програму. Якщо CPU Utilization показує занадто малі значення, значить є проблеми з «паралельністю» програми та ефективністю використання ядер. Наприклад, дисбаланс навантаження, занадто великі накладні витрати при плануванні, проблеми синхронізації або ж просто велика кількість регіонів, які виконуються послідовно. Наступна метрика скаже нам, впирається додаток в обмеження по пам'яті. Якщо цифри великі, значить можливі проблеми з використанням кешей, помилковим поділом даних (false sharing або ми впираємося у пропускну здатність.

Ну а характеристика FPU Utilization може показати, що є проблеми з векторизацией (її відсутністю або неефективністю), за умови наявності обчислення з числами з плаваючою точкою.

Intel Advisor
Починаючи з минулої версії 2016, Advisor отримав величезний функціонал для роботи з векторизацией, який був розширений і поліпшений в новій версії.

Звичайно з'явилася підтримка нового покоління Xeon Phi, як і в інших засобах, і AVX-512. Наприклад, Advisor може показати використання нового набору інструкцій AVX-512 ERI, специфічного для KNL. Але навіть якщо у нас немає поки нової залозки, ми зможемо отримати певні дані для AVX-512. Для цього необхідно дати вказівку компілятору генерувати дві гілки коду (AVX і AVX-512) для циклів з допомогою опцій –axMIC-AVX512 –xAVX, а Advisor у своїх результатах покаже інформацію навіть для тієї гілки, яка реально не виконувалася:



Крім цього, з'явилася можливість вимірювання FLOPS'ів для всіх процесорів, за винятком Xeon Phi попереднього покоління, заснована на використанні інструментації та семплювання. Було також покращено аналіз доступу до пам'яті (Memory Access Analysis), який тепер дасть нам ще більше корисної інформації (порівняння з розміром кешу, виявлення непотрібних gather/scatter). В плані зручності використання також ряд поліпшень. «Розумний режим (Smart Mode) дозволить показати тільки ті цикли, які нам найбільш цікаві, натисненням однієї кнопки:



А вибрати відразу кілька типів аналізу і запустити їх за один раз стало можливим з допомогою пакетного режиму Batch Mode.

У сухому залишку з новою версією 2017 ми маємо великий набір нових фіч, які обов'язково будуть корисні при оптимізації додатків для розробників у всіх областях. Спробувати протягом 30 днів нову версію можна, як завжди, абсолютно безоплатно на цій сторінці, як каже один мій колега: «З реєстрацією, але без SMS».
Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.