Здравствуйте, vdimas, Вы писали:
V>Если промежуточные результаты в регистрах сохранить не получится (а в моих экспериментах не получится с запасом раз так в 50-100), то трафик с памятью будет в любом случае.
Интересно посмотреть на формулы, в которых это так устроено. Откуда берутся промежуточные результаты размером в 100 регистр файлов?
V>Причём, самая мощная из разновидностей, бо способна на произвольные фазовые задержки, т.е. позволяет даже описывать реверберацию и эхо.
Хм, реверберация — она же только с рекурсивным фильтром.
Я так понимаю, что под "самой мощной" имеется в виду "среди линейных фильтров", так? С нелинейщиной всё может быть гораздо кучерявее.
V>Да пофик.
V>MemoryMarshal.CreateReadOnlySpan<T>(..) и зеркальный ему MemoryMarshal.AsRef<T>(..) — оба имеют нулевую стоимость в рантайм, это просто unsafe-реинтерпретация памяти.
Ну, так-то пофиг, но работать с этим неудобно. Это ж надо весь этот код по приведению Сolor* к Vector256<Color> порождать в MSIL.
V>При слишком большом N разворачивания цикла получается многократное N-дублирование тела цикла.
V>И чем больше в бинаре подобного кода, тем быстрее охлаждается кеш.
V>Всегда есть некий оптимум этого N.
А зачем слишком большой? При работе с SIMD больше чем 2-4 раза разворачивать и не приходится. Там всё равно всё быстро упирается в быстродействие памяти.
V>Включая здравый смысл, Intel не выгодно скрывать от общественности ту информацию, которая поможет скомпиллировать под их процессоры наилучший код.
Я имею в виду, что вряд ли бы они стали перемешивать код просто так, не имея к этому соображений.
V>"Я в курсе" не согласуется с написанным тобой выше:
V>V>>>Формулы одинаковые для каждого канала, просто в памяти эффективней расположить подряд данные от одного канала, а не "смесь" их.
S>>По-прежнему не вижу обоснования этой эффективности.
S>>Например, если мне нужно умножить оба канала на 0.74, то я просто
Вполне согласуется. Если формула одинаковая, то она будет записываться в виде SIMD хоть для отдельных каналов, хоть для пары каналов через один.
Та же свёртка просто будет не с вектором (a0, a1, a2, a3), а c вектором (a0, a0, a1, a1).
Кстати, каков типичный размер IR для практических фильтров?
V>Например, подобного рода баловство:
V>http://files.rsdn.org/21096/MusicFX.png
Ну, так это ж картинка. Надо смотреть внутрь — как там эти фильтры представлены. И можно ли представить их лучше/удобнее, чем они уже представлены.
V>Для дотнета ничего вменяемого нет.
Ну, так это типичная catch-22: перформанс — отстой, поэтому никто ничего не делает. Поэтому перформанс — отстой.
V>Поэтому, оффлайн-вычисления крутят на Питоне, а реалтаймовые на плюсах.
V>Если ты вплотную к плюсам подобрался, то представления о том, как должны выглядеть современные эксперименты, скажем, в области ИИ, могут малость поменяться. ))
Мои представления изменить нетрудно — я об этом знаю примерно ноль.