Что такое векторизация в Юлии?

О Юлии

Julia — это новый язык для технических вычислений, сочетающий удобство интерактивного написания сценариев с высокой производительностью. Воспроизводимые среды позволяют воссоздавать одну и ту же среду Julia каждый раз на разных платформах с предварительно созданными двоичными файлами.

Джулия также использует множественную диспетчеризацию в качестве парадигмы, что упрощает выражение множества объектов -ориентированные и функциональные шаблоны программирования. Julia — это проект с открытым исходным кодом, в котором участвует более 1000 участников. Он доступен по лицензии MIT.

[Исходный код] для Джулии (https://github.com/JuliaLang/julia) доступен на GitHub.

Что такое векторизация?

Представьте, что вы были даны синие палочки в одном пакете и красные палочки в другом пакете. Ваша задача — склеить одну красную палочку с одной синей палкой как можно быстрее. Вы можете подойти к этой задаче двумя способами:

  1. Возьмите одновременно красную и синюю палочки и склейте их вместе. Повторяйте этот процесс, пока ваши пакеты с палками не опустеют.

  2. Выровняйте все красные палочки с одной стороны и все синие палочки с другой (как Кит Катс) . Затем склейте их вместе за один раз.

Кажется очевидным, что второй метод будет быстрее, потому что многократно возвращаясь к той же процедуре (как в методе 1 ) кажется утомительным и медленным.

Теперь замените пакеты массивами, а синие и красные палочки — случайным целым числом. Замените процесс нанесения клея оператором сложения. Первый метод может называться зацикливанием , а второй — как векторизация .

Взгляните на следующей иллюстрации, чтобы наглядно понять, что такое векторизация:

Intel определяет векторизацию в Julia как:

  1. Написание кода в терминах операций, которые работают с целыми массивами. Например, запись d = a + bc, где все переменные указывают на объекты массива.
  2. Преобразования компилятора, повышающие производительность за счет использования SIMD Одна инструкция Несколько данных инструкции, которые работают с порциями данных. Например, оборудование с Intel® Advanced Vector Extensions (Intel® AVX) может одновременно выполнять восемь 32-битных добавлений с плавающей запятой..

SIMD

Макрос @simd дает компилятору лицензию на векторизацию без проверки, изменит ли это видимое поведение программы. Векторизованный код будет вести себя так, как если бы он был написан для работы с фрагментами массивов.

SIMD

Обратите внимание на резкое изменение времени выполнения из-за векторизации. При масштабировании огромных объемов данных в терабайтах эта разница во времени выполнения может оказаться существенным изменением.

Оцените статью
nanomode.ru
Добавить комментарий