LINUX.ORG.RU

Выпущены аудиоэффекты LSP Plugins 1.1.11

 


3

2

Выпущена новая версия пакета LV2-эффектов LSP PLugins, предназначенных для обработки звука при сведении и мастеринге аудиозаписей.

Изменения в версии 1.1.11 затронули преимущественно пользовательский интерфейс и производительность при обработке сигнала.

Прежде всего, в UI были добавлены дополнительные возможности вроде поддержки drag&drop, закладок и друггих улучшений.

С другой стороны, низкоуровневый DSP-код был дополнительно оптимизирован с использованием инструкций AVX и AVX2, что позволяет получить дополнительный запас по производительности на процессорах с быстрой реализацией AVX (все Intel Core поколения 6 и выше, AMD архитектуры Zen и выше).

Помимо этого, была улучшена поддержка архитектуры AArch64, и часть низкоуровневого кода DSP уже была перенесена под эту архитектуру. Также был проведён ряд дополнительных оптимизаций DSP-кода под 32-битную архитектуру ARMv7.

Проект стал ещё более переносимым ввиду того, что в нём реализован свой собственный механизм разбора XML-документов — это позволило исключить из зависимостей библиотеку expat.

Полный список изменений доступен по ссылке: https://github.com/sadko4u/lsp-plugins/releases/tag/lsp-plugins-1.1.11.

Поддержать проект финансово: https://salt.bountysource.com/teams/lsp-plugins

>>> Подробности

★★

Проверено: AP ()
Последнее исправление: AP (всего исправлений: 3)

каша из текста, хоть бы на абзацы поделил, я не знаю

Sh-
()

реализован свой собственный механизм разбора XML-документов — это позволило исключить из зависимостей библиотеку expat

Больше велосипедов богу велосипедов. И на какие платформы это дало возможность перенести?

Begemoth ★★★★★
()
Последнее исправление: Begemoth (всего исправлений: 1)
Ответ на: комментарий от Begemoth

И на какие платформы это дало возможность перенести?

Например, под Windows, где штатный парсинг XML убогий, а прилинковыванию сторонних GNU-библиотек в свой бинарь хочется всё же отдать предпочтение использование штатных средств, предоставляемых самой ОС и её окружением.

sadko4u ★★
() автор топика
Ответ на: комментарий от sadko4u

Например, под Windows, где штатный парсинг XML убогий, а прилинковыванию сторонних GNU-библиотек в свой бинарь хочется всё же отдать предпочтение использование штатных средств, предоставляемых самой ОС и её окружением.

читается шизофренично. Не хочется прилинковывать гну библиотеку. Хочется использовать штатные средства ОС. Делаю свой велосипед (не штатный для ос)…

anonymous
()
Ответ на: комментарий от anonymous

читается шизофренично

То есть, то, что штатные средства разбора XML меня не устраивают, было благополучно упущено из моего сообщения. Оооокеееей.

Ну и опять же, стоит помнить, что здесь мы обсуждаем не какой-то самостоятельный софт, а набор плагинов, которые запускаются и работают в контексте большого количества разного рода аудиософта. Поэтому любая дополнительная внешняя зависимость может приводить к серьёзным проблемам. Именно из-за этого в версии 1.1.0 был произведён полный отказ от GTK, использованного ранее в качестве графического тулкита. И чем меньше этих зависимостей будет, тем проще этот самый софт поставлять.

sadko4u ★★
() автор топика

Отлично!

Ты и есть разработчик, как я понял?

Спасибо за твою работу, продолжай это благое дело.

curufinwe ★★★★★
()
Ответ на: комментарий от curufinwe

Ты и есть разработчик, как я понял?

Да, всё верно.

Спасибо за твою работу, продолжай это благое дело.

Спасибо, стараюсь. Релизом 1.1.11, как раз, постарался закрыть всю накопившуюся рутину.

sadko4u ★★
() автор топика

С другой стороны, низкоуровневый DSP-код был дополнительно оптимизирован с использованием инструкций AVX и AVX2

Вот это - удивительно и очень хорошо! Мало кто так делает, а именно здесь разница между i7-2600 и i7-6700 (которая у всех интернет-экспертов 5%) может оказаться вдвое. Когда рендерю готовый проект с кучей обработок, всё время грущу.

Вот, кстати, а в реальности у новых AMD как с AVX2-кодом? Уже обогнали и перегнали, или как всегда?

ist76 ★★★★★
()
Ответ на: комментарий от ist76

Вот, кстати, а в реальности у новых AMD как с AVX2-кодом? Уже обогнали и перегнали, или как всегда?

По слухам «Неплохо».

cvv ★★★★★
()
Ответ на: комментарий от ist76

В целом Zen архитектура лучше работает с AVX/AVX2, чем Bulldozer/Piledriver, но ещё и не идеально. Архитектура Bulldozer однозначно эмулирует восьмивекторные операции как две четырёхвекторные. Поэтому если написать код с использованием 16 XMM-регистров, которые появились начиная с SSE3, то он вряд ли будет уступать аналогичному AVX-коду, а, возможно, местами даже и превосходить из-за особенностей конвейеризации.

Иными словами, «быстрый AVX» означает, что та же функция, написанная в AVX/AVX2-инструкциях даёт большую производительность, чем функция, написанная в SSE/SSE2 инструкциях.

А теперь небольшой single core тест, CPU Ryzen 2700. Умножение массива комплексных чисел на другой массив комплексных чисел. Размер массива изменяется на каждом шаге теста. Тестируются различные варианты реализации одной и той же функции: начиная с нативной и заканчивая AVX:

make clean
make test
.test/lsp-plugins-test ptest dsp.pcomplex.mul3

И результат:

┌Case───────────────────────────┬Time[s]┬────Iter┬Samp[s]┬─────Est┬──Perf[i/s]┬Cost[us/i]┬Rel[%]┐
│native::pcomplex_mul3 x 256    │   5.00│20227000│   5.00│20226842│ 4045368.45│    0.2472│100.00│
│sse::pcomplex_mul3 x 256       │   5.00│38073000│   5.00│38072664│ 7614532.99│    0.1313│188.23│
│sse3::pcomplex_mul3 x 256      │   5.00│55747000│   5.00│55746319│11149263.98│    0.0897│275.61│
│sse3::x64_pcomplex_mul3 x 256  │   5.00│62520000│   5.00│62519287│12503857.46│    0.0800│309.09│
│avx::pcomplex_mul3 x 256       │   5.00│73044000│   5.00│73043152│14608630.54│    0.0685│361.12│
│avx::pcomplex_mul3_fma3 x 256  │   5.00│75222000│   5.00│75221142│15044228.50│    0.0665│371.89│
├───────────────────────────────┼───────┼────────┼───────┼────────┼───────────┼──────────┼──────┤
...
├───────────────────────────────┼───────┼────────┼───────┼────────┼───────────┼──────────┼──────┤
│native::pcomplex_mul3 x 65536  │   5.04│   75000│   5.00│   74353│   14870.66│   67.2465│100.00│
│sse::pcomplex_mul3 x 65536     │   5.03│  157000│   5.00│  156015│   31203.16│   32.0480│209.83│
│sse3::pcomplex_mul3 x 65536    │   5.02│  199000│   5.00│  198262│   39652.52│   25.2191│266.65│
│sse3::x64_pcomplex_mul3 x 65536│   5.01│  193000│   5.00│  192615│   38523.11│   25.9584│259.05│
│avx::pcomplex_mul3 x 65536     │   5.02│  222000│   5.00│  221126│   44225.33│   22.6115│297.40│
│avx::pcomplex_mul3_fma3 x 65536│   5.00│  235000│   5.00│  234997│   46999.42│   21.2769│316.05│
└───────────────────────────────┴───────┴────────┴───────┴────────┴───────────┴──────────┴──────┘

То есть, AVX реализация обгоняет как нативную, так и SSE и SSE3, что уже неплохо. Но могло бы быть и лучше. У Core i5 показатели значительно лучше. К сожалению, сейчас данных не могу привести, под рукой компьютера на базе Intel нет.

Ну и для сравнения, AMD FX 4100:

┌Case───────────────────────────┬Time[s]┬────Iter┬Samp[s]┬─────Est┬─Perf[i/s]┬Cost[us/i]┬Rel[%]┐
│native::pcomplex_mul3 x 256    │   5.00│10441000│   5.00│10439999│2087999.97│    0.4789│100.00│
│sse::pcomplex_mul3 x 256       │   5.00│31149000│   5.00│31148215│6229643.01│    0.1605│298.35│
│sse3::pcomplex_mul3 x 256      │   5.00│34435000│   5.00│34434325│6886865.02│    0.1452│329.83│
│sse3::x64_pcomplex_mul3 x 256  │   5.00│38007000│   5.00│38006901│7601380.24│    0.1316│364.05│
│avx::pcomplex_mul3 x 256       │   5.00│18978000│   5.00│18977609│3795521.81│    0.2635│181.78│
├───────────────────────────────┼───────┼────────┼───────┼────────┼──────────┼──────────┼──────┤
...
├───────────────────────────────┼───────┼────────┼───────┼────────┼──────────┼──────────┼──────┤
│native::pcomplex_mul3 x 65536  │   5.09│   22000│   5.00│   21597│   4319.43│  231.5122│100.00│
│sse::pcomplex_mul3 x 65536     │   5.06│   43000│   5.00│   42514│   8502.82│  117.6081│196.85│
│sse3::pcomplex_mul3 x 65536    │   5.09│   50000│   5.00│   49123│   9824.72│  101.7840│227.45│
│sse3::x64_pcomplex_mul3 x 65536│   5.03│   68000│   5.00│   67583│  13516.80│   73.9820│312.93│
│avx::pcomplex_mul3 x 65536     │   5.03│   52000│   5.00│   51658│  10331.76│   96.7889│239.19│
└───────────────────────────────┴───────┴────────┴───────┴────────┴──────────┴──────────┴──────┘

Видим, что реализация на SSE3 быстрее, чем на AVX.

sadko4u ★★
() автор топика
Ответ на: комментарий от ist76

А вот и Core i5 6400 подъехал. Как видим, на небольших массивах AVX рвёт все остальные реализации в щепки:

┌Case───────────────────────────┬Time[s]┬─────Iter┬Samp[s]┬──────Est┬──Perf[i/s]┬Cost[us/i]┬Rel[%]┐
│native::pcomplex_mul3 x 256    │   5.00│ 13830000│   5.00│ 13829231│ 2765846.22│    0.3616│100.00│
│sse::pcomplex_mul3 x 256       │   5.00│ 37232000│   5.00│ 37231739│ 7446347.88│    0.1343│269.22│
│sse3::pcomplex_mul3 x 256      │   5.00│ 37847000│   5.00│ 37846364│ 7569272.84│    0.1321│273.67│
│sse3::x64_pcomplex_mul3 x 256  │   5.00│ 37520000│   5.00│ 37519354│ 7503870.93│    0.1333│271.30│
│avx::pcomplex_mul3 x 256       │   5.00│ 94897000│   5.00│ 94896183│18979236.78│    0.0527│686.20│
│avx::pcomplex_mul3_fma3 x 256  │   5.00│101510000│   5.00│101509390│20301878.19│    0.0493│734.02│
├───────────────────────────────┼───────┼─────────┼───────┼─────────┼───────────┼──────────┼──────┤
...
├───────────────────────────────┼───────┼─────────┼───────┼─────────┼───────────┼──────────┼──────┤
│native::pcomplex_mul3 x 4096   │   5.00│   846000│   5.00│   845575│  169115.10│    5.9131│100.00│
│sse::pcomplex_mul3 x 4096      │   5.00│  2069000│   5.00│  2068774│  413754.82│    2.4169│244.66│
│sse3::pcomplex_mul3 x 4096     │   5.00│  2298000│   5.00│  2297336│  459467.40│    2.1764│271.69│
│sse3::x64_pcomplex_mul3 x 4096 │   5.00│  2161000│   5.00│  2160520│  432104.16│    2.3143│255.51│
│avx::pcomplex_mul3 x 4096      │   5.00│  3434000│   5.00│  3433550│  686710.04│    1.4562│406.06│
│avx::pcomplex_mul3_fma3 x 4096 │   5.00│  3466000│   5.00│  3465805│  693161.18│    1.4427│409.88│
├───────────────────────────────┼───────┼─────────┼───────┼─────────┼───────────┼──────────┼──────┤
...
├───────────────────────────────┼───────┼─────────┼───────┼─────────┼───────────┼──────────┼──────┤
│native::pcomplex_mul3 x 65536  │   5.04│    48000│   5.00│    47598│    9519.75│  105.0448│100.00│
│sse::pcomplex_mul3 x 65536     │   5.03│   107000│   5.00│   106275│   21255.05│   47.0476│223.27│
│sse3::pcomplex_mul3 x 65536    │   5.02│   112000│   5.00│   111600│   22320.01│   44.8029│234.46│
│sse3::x64_pcomplex_mul3 x 65536│   5.02│   108000│   5.00│   107543│   21508.67│   46.4929│225.94│
│avx::pcomplex_mul3 x 65536     │   5.02│   140000│   5.00│   139307│   27861.57│   35.8917│292.67│
│avx::pcomplex_mul3_fma3 x 65536│   5.01│   139000│   5.00│   138689│   27737.97│   36.0517│291.37│
└───────────────────────────────┴───────┴─────────┴───────┴─────────┴───────────┴──────────┴──────┘

На более крупных массивах уже, видимо, сказывается недостаток кэша. Поэтому результаты не такие впечатляющие, но тем не менее, тоже на уровне.

Ну и, опять же, если сравнивать с Ryzen 2700 в абсолютных значениях (смотрим столбцы Perf и Cost), то малые массивы Core i5 молотит лучше, а большие - хуже. Опять же, вероятнее всего, из-за размеров кэша.

sadko4u ★★
() автор топика

К сожалению, вынужден констатировать факт, что одна инструкция CPU превратила релиз в выкладку :(.

Если вы используете lsp-plugins на процессоре, у которого есть поддержка AVX и нет поддержки AVX2, пожалуйста не применяйте апдейт: код будет пытаться вызвать не реализованный на вашем процессоре вариант инструкции vbroadcastss и, как следствие, падать. В ближайшее время будет подготовлен фикс.

Связанная задача: https://github.com/sadko4u/lsp-plugins/issues/61

sadko4u ★★
() автор топика
Ответ на: комментарий от sadko4u

Вывод для работающих с контентом, я так понимаю, следующий: если используемый софт умеет использовать последние поколения векторных инструкций и работа - именно поток фотографий/видео/аудио, то с переходом на АМД спешить не следует.

ist76 ★★★★★
()
Ответ на: комментарий от ist76

Вывод не совсем правильный. Надо учитывать ещё, сколько процессорных ядер будет работать с контентом. Если запустить Threadripper третьего поколения, то он, на мой взгляд, однозначно оставит любой Intel по совокупной производительности.

Ну и опять же, я не тестировал на Ryzen’ах третьего поколения производительность AVX. Это было бы интересно посмотреть.

sadko4u ★★
() автор топика
Ответ на: комментарий от sadko4u

Скажем, если цена за мать+память+процессор+кулер будет одинаковая.
Вот интересно было бы сравнить. Именно в контексте рабочей станции для мультимедиа. А то есть настроения, что, мол, Интел однозначно уже всё на свете проиграл и никому не нужен. Спрашиваешь, а как там с AVX512, а они - а кому он нужен?

ist76 ★★★★★
()
Последнее исправление: ist76 (всего исправлений: 1)
Ответ на: комментарий от ist76

Спрашиваешь, а как там с AVX512, а они - а кому он нужен?

AVX512 - на самом деле, интересная вещь. Но, насколько я помню, современные HEDT-процессоры, по-прежнему ещё не поддерживают этот набор расширений. Если верить сайту Intel, то только 10-е поколение Core i9 включает в себя какой-то определённый набор AVX512-расширений. Какой - не сказано, а их может быть как минимум вот сколько: F, DQ, IFMA, PF, ER, CD, BW, VL, VBMI.

Но, опять же, для того, чтобы перемножать матрицы 4x4 и векторы 1x4 на матрицы 4x4 (что требуется активно в гейминге) AVX512 может оказаться весьма неудобным. Хотя, не буду зарекаться. Когда мне кто-нибудь подарит CPU с поддержкой AVX-512 и возможностью поиграться с этим набором инструкций, тогда какие-то выводы и можно будет сделать.

sadko4u ★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.