Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Matlab
Форум разработчиков электроники ELECTRONIX.ru > Cистемный уровень проектирования > Вопросы системного уровня проектирования
Tpeck
День добрый.
Необходимо сформировать большой поток (в идеале >10 Мбит/с) в реальном времени и кидать его в UDP.
Формирователь состоит из источника данных, кодера, некая обработка над кодированными данными, добавление шума, формирование пакета.
Источник данных, кодер, добавление шума по отдельности работают ~ на 30 Мбит/с. А последовательно ~ 10 мбит/с при этом занято лишь одно ядро.
Внимание вопрос.
Можно ли организовать некий конвейер, когда источник данных занимает одно ядро, кодер другое, шум третье, а в UDP шлет четвертое?
Или это даже теоретически нельзя сделать?
Всем спасибо.
litv
Надо на С писать (точно успеете).
А на Matlab - Вы на Simulunk или как, как написано, может все данные в таблицу занести и т.д. ........ ?
Может я и на Matlabe успел бы.
Tpeck
Цитата(litv @ Apr 12 2016, 13:29) *
Надо на С писать (точно успеете).


Пока этот вариант не рассматриваю. Может после того, как в Matlabe запущу на меньшей скорости буду думать про C.
Цитата(litv @ Apr 12 2016, 13:29) *
А на Matlab - Вы на Simulunk или как, как написано, может все данные в таблицу занести и т.д. ........ ?


*.m
В той реализации, что хочу использовать зациклить не получиться.
jorikdima
Смотрите хелп по Parallel computing. Распараллелить что-то можно, что-то нет.
Генерация вектором происходит? Или каждый сампл генерируется функцией и вызов функции в цикле?
_4afc_
Цитата(Tpeck @ Apr 12 2016, 12:28) *
Источник данных, кодер, добавление шума по отдельности работают ~ на 30 Мбит/с. А последовательно ~ 10 мбит/с при этом занято лишь одно ядро.
Можно ли организовать некий конвейер, когда источник данных занимает одно ядро, кодер другое, шум третье, а в UDP шлет четвертое?


В качестве бреда: может 4 матлаба запущенные на разных ядрах и передающие друг-другу данные через локальные UDP?
Все ядра там только в нескольких функциях, типа фурье...
Fat Robot
doc 'parallel computing toolbox'

Это чтобы быстрее считать.

Если же затея - сделать на matlab систему реального времени с такой пропускной способностью, то это унылая затея.

Цитата(Tpeck @ Apr 12 2016, 12:28) *
Можно ли организовать некий конвейер, когда источник данных занимает одно ядро, кодер другое, шум третье, а в UDP шлет четвертое?
Tpeck
Цитата(jorikdima @ Apr 12 2016, 19:33) *
Смотрите хелп по Parallel computing. Распараллелить что-то можно, что-то нет.
Генерация вектором происходит? Или каждый сампл генерируется функцией и вызов функции в цикле?


Вектором.
Tpeck
Цитата(_4afc_ @ Apr 12 2016, 22:59) *
В качестве бреда: может 4 матлаба запущенные на разных ядрах и передающие друг-другу данные через локальные UDP?


UDP узкое место.
Вот вопрос можно ли как-нибудь по другому наладить скоростное взаимодействие между Matlab?
jorikdima
Цитата(Tpeck @ Apr 13 2016, 16:26) *
UDP узкое место.
Вот вопрос можно ли как-нибудь по другому наладить скоростное взаимодействие между Matlab?

Так дважды посоветовали уже: parallel computing toolbox
Tpeck
Цитата(jorikdima @ Apr 14 2016, 05:41) *
Так дважды посоветовали уже: parallel computing toolbox


- Дяденька милиционер, а можно я Вам анекдот расскажу.
- Ты что, я же милиционер!
- А я Вам два раза расскажу. sm.gif


Спасибо. sm.gif

Эдди
1. Выкинуть нафиг этот долбаный матлаб (хотя, вообще, странно, что тупит: матлаб уже давным-давно даже Cuda умеет, не то, что тупо потоки).
2. Использовать pthreads, а хорошо распараллеливаемые сложные вычисления вообще на видеокарту загонять!
syoma
В матлабе из m-кода можно сгенерить Си код, скомпилировать тем же C++ компилятором и заставить крутиться на той же или другой платформе в реальном времени. Как правило, это ускоряет работу кода в разы. Смотрите http://nl.mathworks.com/products/matlab-coder/

Еще для DSP обработки в Матлабе пердусмотрены различные тулбоксы. Они обычно гораздо быстрее выполняют такие функции, так как оптимизированы самими программистами Матлаба.
jorikdima
Цитата(syoma @ Apr 14 2016, 17:49) *
В матлабе из m-кода можно сгенерить Си код, скомпилировать тем же C++ компилятором и заставить крутиться на той же или другой платформе в реальном времени. Как правило, это ускоряет работу кода в разы. Смотрите http://nl.mathworks.com/products/matlab-coder/

На 100% не скажу, но по-моему это уже давно не так. Лет 5. Матлаб при запуске м файлов компилит их как-бы и исполняет в нативном коде.
Grizzzly
Цитата(jorikdima @ Apr 14 2016, 19:25) *
На 100% не скажу, но по-моему это уже давно не так. Лет 5. Матлаб при запуске м файлов компилит их как-бы и исполняет в нативном коде.

Зависит всё от исходного m-кода. Если в нем содержатся в основном встроенные функции, а операции выполняются векторно, возможен даже проигрыш от перехода к C. Обычно выигрыш от генерации в 1,5-2 раза. Был у меня случай с реализацией MPA алгоритма, содержащего много вложенных циклов, когда выигрыш составил порядка 15-20 раз. Но это, скорее, исключение.
syoma
Цитата(jorikdima @ Apr 14 2016, 18:25) *
На 100% не скажу, но по-моему это уже давно не так. Лет 5. Матлаб при запуске м файлов компилит их как-бы и исполняет в нативном коде.

Тогда зачем им было писать это в описании?
Цитата
You can also use the generated code within the MATLAB environment to accelerate computationally intensive portions of your MATLAB code.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.