Есть работающее устройство на базе omapl-137. ARM9 и DSP разогнаны до 400 мГц. На DSP крутится серьезный алгоритм обработки данных. На арме тоже приходится помимо фронтэнда на базе Qt, считать достаточно сложные алгоритмы с float арифметикой. Поэтому у арма серьезная загрузка. Работает это хозяйство под Linux.
Возникла идея использовать DSP как FP сопроцессор для арма. Например, по определенным адресам в Shared memory кладем два float аргумента и команду для вычисления. Вызываем прерывание DSP, он обрабатывает данные и кладет результат обратно. Все это время арм опрашивает флаг готовности данных, по получению флага - забирает результат. Что имеем:
1. DSP занят своим основным алгоритмом, периодически отвлекаясь на запросы арма, "посчитай мол". 2. Ускорение float в десятки раз для арма. 3. Не требуется переписывание всего отлаженного алгоритма или его частей под DSP. 4. Простой алгоритм обмена, требуется только сделать ремапинг shared memory/ 5. В библиотеку можно включить код проверки загрузки DSP приложеним, если оно не загружено, то использовать стандартные float вычисления.
От техасовских монструозных библиотек обмена между DSP и ARM отказался и использую свой самописный UIO драйвер, чему несказанно рад.
Сразу возникает вопрос.
1. Как указать компилятору GCC, что мы используем свой FP сопроцессор. 2. Какие операции помимо умножения деления выполняет стандартный FP сопроцессор ARM?
Просьба покрититиковать или посоветовать по данному подходу.
--------------------
Если в сердце дверь закрыта - надо в печень постучать..
|