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

Поділитися
Вставка
  • Опубліковано 26 вер 2024
  • Подробнее о конференции C++ Russia: jrg.su/W8skjE
    - -
    . . В прошлом году Ашот рассказывал о способах программирования для видеокарт. Они могут обсчитать большую data-parallel задачу существенно быстрее центрального процессора, но их едва ли можно назвать универсальным решением. Когда данные приходят маленькими пакетами или задача имеет суб-линейную сложность, их слишком долго пересылать по PCI-E шине.
    Что делать? Использовать SIMD-инструкции. Они есть в большинстве современных процессоров и вы уже заплатили за их наличие высокую цену. В железе появились большие регистры, раздулся CISC-RISC транслятор, да и планировщик задач стал сложнее... А компиляторы так и не научились самостоятельно подставлять сложные инструкции. Значит, будем писать руками!
    Ашот расскажет о ключевых правилах использования векторизованных инструкций, покажет несколько примеров оптимизаций и «анти-оптимизаций», с которыми ему пришлось столкнуться при работе над Unum.

КОМЕНТАРІ • 5

  • @xintreavideo
    @xintreavideo 3 роки тому +9

    Из-за того, что голос прерывался в самые неподхо м ен, по ть о ем рил ав о ень сложно.

  • @intelceleron8960
    @intelceleron8960 3 роки тому +3

    шикарно. было очень интересно, жаль времени не хватило

  • @niklkelbon3662
    @niklkelbon3662 3 роки тому

    Возник вопрос, как известно производительность зависит от частоты процессора линейно, а вот выделение тепла квадратично. Не получится ли при использовании AVX512 в таком случае повысить энергоэффективность, про которую так парится рассказывающий?

    • @ashvardanian
      @ashvardanian 3 роки тому +4

      That's a great question. The answer is - very much depends on the task and exact implementation of AVX-512 in hardware.
      In our case (with identical tasks across all the CPU cores) it's pretty easy to estimate the energy efficiency. Server CPUs are relatively constant in their power consumption under sustained load. So you can estimate Bytes/Joule using the GB/s numbers and reference TDP of the CPU used. When we went from AVX-2 to AVX-512 we jumped roughly from 9 GB/s to 10 GB/s in terms of speed, while the energy consumption remained more or less the same. So with those specific mnemonics/operations you are not going to get a lot more efficient when switching from AVX-2 to AVX-512.
      The devil is in the details. AVX-512 added not only new register sizes, but also all new kinds of operations. Some forms of compression/encryptions may not be easily expressible in AVX-2 set of operations, but can be elegantly mapped into just a couple of AVX-512. In that case you may get A LOT more energy-efficient and fast.
      PS: Sorry for replying in English, I don't have a Russian keypad.

  • @dat_21
    @dat_21 2 роки тому +1

    Можно избавиться от split loads, если хранить в регистрах побайтно-сдвинутые haystack, а пересечение со следующей линией собрать в регистр двумя шафлами - _mm256_shuffle_epi8 и _mm256_permute. Будет раза в полтора быстрее.