Я не очень понимаю что такое "последовательно включенный процессор DSP". Это всё же не линия задержки, не резистор и не конденсатор. В нынешнем мире распаралеленных операций и множественных ядрах "последовательное включение" это какая-то фантазия.
Обьясняю на пальцах) Мне не жалко.
Это для тех, кто в embedded разработке, в электронике и цифровой обработке сигналов дуб дубом. Если же человек в этом шарит, но задает подобные вопросы - мир ему уроком.
Любой DSP-процессор (или как в случае с современной тенденцией в обработке звука, в ARM-процессорах) имеет несколько каналов I2S, часть которых используется как входа, другие как выходы. Весь звук в цифровом виде передается по такой шине(I2S), от АЦП к CPU, и от CPU к ЦАП. Соответственно, если на плате стоят 2 процессора, то (совсем на пальцах) в один входит звук по и2с, из него выходит по и2с, заходит во второй процессор и так же из него выходит и идет на ЦАП. Это уже совсем если примитивно обьяснять.
Почему так? Потому что I2S - это аудиоданные, в которых уже есть информация о синхронизации. Можно конечно (технически реально) из одного CPU писать RAW-данные в виде сэмплов прямо в общую для обоих процессоров RAM-память, откуда уже будет читать второй процессор, но это накладывает огромные ограничения и сложности на процесс разработки и управления всей этой кухней, надо придумывать кучу примитивов синхронизации и другие технические костыли, чтобы все это работало как надо. Именно по этой причине писать однопоточные приложения намного проще, чем многопоточные.
Технически грамотнее и намного проще передавать данные от одного процессора в другой по I2S, по цепочке, точно так же как это происходит в педалборде, здесь и физическая(аналоговая) среда и цифровая работают совершенно одинаково. Любой инженер и разработчик, и я в том числе, сделали бы именно так, реализуя например, на 1-м CPU часть одних блоков обработки, и соответсвенно на втором проце так же. Отсюда вытекает следующее, что если мы имеем исходный CPU с вычислительной мощностью в XX, что дает нам физическую задержку по времени на выполнение 7мс (это задержка для Mg300) + точно такой же процессор, то получается очень простая математика, о которой я писал выше.
Это все верно, если я не ошибся с тем, что в 400-м стоит точно такой же камень как и в 300-м. Возможно они разорились и поставили туда 2 совершенно других DSP, круче и быстрее. Но я скажу, что даже TMS320C6720, что стоит в трехсотом, не такой уж и дешевый относительно самого процессора.
... и добавил:Александр Каинов,
А с какого перепугу два DSP последовательно это обязательно 7 + 7 мс?
Это не два DSP так будут, а два гитарных проца последовательно, с учётом задержек конвертеров.
Уважаемый Лютнер, в гитарных процессорах нет задержки на "конверторах", если вы так обозвали АЦП и ЦАП (если я правильно понял).
Поток данных по I2S приходит от CPU сразу в DAC, без каких либо задержек и буферов, то есть каждый тактовый сигнал (например 48000 раз в секунду) 4 байта данных, полученных по шине, защелкиваются в приемном буфере ЦАПа, что соответсвенно на каждый следующий такт окажется в виде электрического сигнала на аналоговом выходе ЦАПа. С АЦП все тоже точно также. Еще раз повторюсь, в гитарных процессорах нет никакой задержки между CPU и DAC/ACD. Все задержки возникают во время обработки цифровых данных процессором (оно конечное, но не нулевое).
В аудионтерфейсах - да, есть ADC, есть небольшая RAM и микроконтроллер, которые получает непрерывный поток байт от АЦП и складывает их в кольцевой буфер в RAM, по сигналу синхронизации от USB-драйвера отправляя данные из RAM пакетом на USB-интерфейс. Но это уже совсем другая история)))
... и добавил:У него задержка около 1,1 мс
Откуда информация, можно ссылку на источник?
... и добавил: Я не очень понимаю что такое "последовательно включенный процессор DSP". Это всё же не линия задержки, не резистор и не конденсатор. В нынешнем мире распаралеленных операций и множественных ядрах "последовательное включение" это какая-то фантазия.
Попытаюсь понять ваше недоумевание по поводу этого момента. Частично я уже обьсянил это в другом сообщении, здесь лишь добавлю про распараллеливание, которое вы скорее всего наблюдаете в видеокартах, с тысячами ядер CUDA.
Там совсем другой подход, принципиально другой: если говорить языком "дискретности", то "кадр", который в видео называется фрэймом, а в звуке называется сэмплом, имеет очень разную природу в обоих случаях. Если говорить совсем вкратце, то в звуке у нас очень высокая частота кадров(44800 раз в секунду), а в видео соответственно 60 раз в секудну (или 144 для про-геймеров с их крутыми мониторами). Здесь уже возникает куча проблем с паралелльными вычислениями, потому как количество кадров в единицу времени для звука огромное, и синхронизировать их будет просто нереально, это сверхзатратно в плане вычислений и железа. Второй очень важный момент, это то, как эти кадры связаны между собой во времени. В звуке - каждый кадр(сэмпл) - это аргумент одной большой функции, поэтому во время обработки невозможно рассматривать каждый кадр отдельно от другого, соответсвенно, невозможно выполнять обработку одного сэмпла, не имея информации о соседних сэмплах.
В обработке видео - все не так, там каждый кадр уникальный, и в каноническом подходе во время формирования следующего кадра информация о том, как строились предыдущие кадры, уничтожается в конвейере. Если уж совсем банально, если вместо целевого кадра (одного из 144) мы нарисуем черный или полностью белый экран("ошибка обработки", например), то человек это даже не заметит, тупо не увидит. А если мы один из сэмплов в потоке 48000 Гц удалим, и вместо него выставим 0-й уровень амплитуды (или наоборот, максимальный), то гитаристу это разобьет сердце - мы услышим долбанный щелчок, глитч. Лично мне это как ножом по сердцу.
... и добавил:Uncle_D,
Просто надо начать с того что DSP (даже собственно микроконтроллеры, MCU) не такие мощные, ну гигагерц с чем-то максимум, на фоне декстопных и мобильных процов это пшик, а может и ещё слабее придётся что-то ставить, может быть ситуация что DSP может обеспечить только часть обработки, ну и что делать в этом случае? Некоторая обработка принципиально плохо параллелится.
А большая задержка будет либо если что-то криво, либо если, например, петлю аналоговую поставить между ними, добавится ещё дополнительная задержка от конвертеров.
Уважаемый Лютнер, к сожалению, вы несколько ошибаетесь. Нет, это не сарказм. DSP в плане обработки сигналов уделывает любой "десктопный" проц общего назначения. На то он и "
Digital Signal Processor". Я мог бы расписать на целую страницу почему и отчего это так, но не стану. Потому что это требует уже многих сопутствующих знаний и компетенций, позволяющих понять что такое конвейер, переключение контекста, примитивы синхронизации, предсказание ветвлений, VLIW и x86-64, кэш и когерентность памяти. Если для вас все эти штуки просты и понятны - тогда вы просто троллите остальных)
... и добавил:MCU с ARM-ядром вполне себе используются в гитарных процессорах. С чистыми DSP просто будет немного сложнее в разработке, а специализированные возможности не всегда могут использоваться на полную. Ну может какие и дадут выполнять свёртку аппаратно, но всё равно часто это с небольшой длинной импульса, а более общий алгоритм может и на ARM дать возможность использовать более длинные импульсы итп.
Вот тут вы сильно правы. Классические DSP умирают в силу сложности оригинальной архитектуры последних, что вызывает большие проблемы с переносимостью кода, с наличием и развитием библиотек и фреймворков для разработки. В Nux MG30 за обработку звука отвечает ARM Cortex M7+M4, который намного проще прогать, слишком проще, и огромное кол-во библиотек просто дают все карты в руки.