SIMD. Производительность, за которую вы уже заплатили

RU / День 3 / 12:30 / Зал 3

В прошлом году Ашот рассказывал о способах программирования для видеокарт. Они могут обсчитать большую data-parallel задачу существенно быстрее центрального процессора, но их едва ли можно назвать универсальным решением. Когда данные приходят маленькими пакетами или задача имеет суб-линейную сложность, их слишком долго пересылать по PCI-E шине.

Что делать? Использовать SIMD-инструкции. Они есть в большинстве современных процессоров и вы уже заплатили за их наличие высокую цену. В железе появились большие регистры, раздулся CISC-RISC транслятор, да и планировщик задач стал сложнее... А компиляторы так и не научились самостоятельно подставлять сложные инструкции. Значит, будем писать руками!

Ашот расскажет о ключевых правилах использования векторизованных инструкций, покажет несколько примеров оптимизаций и «анти-оптимизаций», с которыми ему пришлось столкнуться при работе над Unum.


Почему этот доклад в программе

Чем хорош спикер: Автор доклада тестировал подход по прямому использованию SIMD в серии своих проектов. Он на примерах из своей практики сможет показать, в каких случаях явное использование SIMD в коде способно показать значительный прирост производительности.

Чем хороша тема: С выходом новых поколений процессоров постоянно расширяются наборы инструкция SIMD. При этом современные компиляторы C++ далеко не всегда используют эти новые наборы инструкций с целью ускорения компилируемых программ. Поэтому в текущий момент важно понимать, что для некоторых типов программ использование SIMD через интринсики может позволить получить заметный прирост в производительности.

Кому будет полезно: Доклад будет полезен разработчикам, которые часто сталкиваются с задачами ускорения вычислений. Также он будет полезен тем, кто хочет познакомиться с темой SIMD и их непосредственного использования в C++ без ассемблера.

Почему здесь и сейчас: При том, что последнее значительное расширение SIMD для intel под кодовым названием AVX512 появилось уже в 2015 году, использование этих инструкций в ассемблере, сгенерированном современными компиляторами, встретишь нечасто. С этой точки зрения получается, что программисты, рассчитывая только на компилятор, не используют в полной мере возможности современных процессоров.