Grizzly 0 8 августа, 2019 Опубликовано 8 августа, 2019 · Жалоба 7 часов назад, thermit сказал: Дык, а кто мешает посмотреть эмуляцию команд? Так негде :( http://e2e.ti.com/support/processors/f/791/t/83269 Разве что некоторое описание: http://e2e.ti.com/support/processors/f/791/p/501173/1814959#1814959 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
thermit 1 8 августа, 2019 Опубликовано 8 августа, 2019 · Жалоба c_intrinsics_host_port-0_91_00-Setup.exe Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Grizzly 0 8 августа, 2019 Опубликовано 8 августа, 2019 · Жалоба 1 час назад, thermit сказал: c_intrinsics_host_port-0_91_00-Setup.exe Спасибо! Я уже несколько лет на Linux работаю, поэтому не знал о таком продукте. Сейчас в виртуалке запущу. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
thermit 1 8 августа, 2019 Опубликовано 8 августа, 2019 · Жалоба c_intrinsics_host_port-0_91_00-Linux-x86-Install.gz Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Grizzly 0 8 августа, 2019 Опубликовано 8 августа, 2019 · Жалоба 10 минут назад, thermit сказал: c_intrinsics_host_port-0_91_00-Linux-x86-Install.gz Круто! Да, жуткий код :) По тому, что на форуме тексаса было написано, я бы всю реализацию и близко не сделал. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Grizzly 0 8 августа, 2019 Опубликовано 8 августа, 2019 (изменено) · Жалоба Кстати, а это ожидаемое поведение, что при обращении полям структуры код замедляется раз в 6 по сравнению с доступом к ним как к массиву. То есть если я к массиву структур с I и Q обращаюсь не как samples.I и samples.Q, а бегу указателем на int16_t, то вижу большой прирост. Да, #pragma pack есть, чтобы дырки не было. Возможно, кстати это из-за запаковки и есть проигрыш... Такая часть кода пришла для адаптации под DSP. Но ведь указатель тоже бежит по запакованным по сути данным . Непонятно. UPD. Ну, получается, что к членам структуры идет обращение как к volatile. Приходится постоянно вычислять адреса до элементов. Изменено 8 августа, 2019 пользователем Grizzly Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
thermit 1 8 августа, 2019 Опубликовано 8 августа, 2019 · Жалоба Ну, в общем и целом - да. А в чем проблема? Процессор заточен под обработку упакованных данных. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Grizzly 0 8 августа, 2019 Опубликовано 8 августа, 2019 · Жалоба 20 минут назад, thermit сказал: А в чем проблема? Малой кровью хотелось обойтись, но приходится рефакторить код. Без различных оптимизаций он красивее выглядел. Хотелось бы под #ifdef сохранить общую кодовую базу. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
thermit 1 8 августа, 2019 Опубликовано 8 августа, 2019 · Жалоба Дык, да. Я изначально рисую с эмуляцией интринсиков, что бы потом не было мучительно больно. Правда, эмуляция самописная. Ну и для пц код получается не оптимальным. Что касается красоты - пустое это. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Grizzly 0 8 августа, 2019 Опубликовано 8 августа, 2019 · Жалоба Я сам стараюсь на ПК писать на C как можно ближе к сигнальникам алгоритмы ЦОС и ЦС. До этого хватало быстродействия, поэтому не приходилось оптимизировать. Сейчас передо мной задача добиться реал-тайма от кода, который вообще на плюсах написан + с динамическим выделением памяти. Приходится использовать самописный аллокатор для размещения объектов в глобальной памяти, выкашивать либы Фурье общего назначения и т.д. и т.п. Поэтому про эмуляцию интринсиков спрашивал. Хочу, чтобы автор алгоритмов проверил, достаточно ли точности и адекватность замены некоторых алгоритмов. Теперь сомневаюсь, что овчинка выделки стоила. Код написан для fixed-point, но в нем много long long. Оптимальные сетки не считались. Сегодня попрофилировал Фурье из DSPLib. Для 1024 отсчетов float и int показали практически идентичные результаты. Более того, инструкции 1/x нет для целочисленных типов. Приходится на время ко float приводить, а затем обратно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Grizzly 0 9 августа, 2019 Опубликовано 9 августа, 2019 · Жалоба 10 часов назад, thermit сказал: Правда, эмуляция самописная. Ну и для пц код получается не оптимальным. Что касается красоты - пустое это. Не сказал сразу, что для ряда заказчиков проект должен работать на ПК. Это была основная причина для сохранения единой кодовой базы, которая должна работать за разумное время и на обычном компьютере. Походу пора разъезжаться :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
stealth-coder 2 9 августа, 2019 Опубликовано 9 августа, 2019 · Жалоба 19 hours ago, Grizzly said: Для 1024 отсчетов float и int показали практически идентичные результаты. Так об этом в test report написано: Single precision: 816 (N=128) 1481 (N=256) Integer (32 bit): 801 (N=128) 1457 (N=256) Integer (16 bit): 454 (N=128) 743 (N=256) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
stealth-coder 2 9 августа, 2019 Опубликовано 9 августа, 2019 · Жалоба 19 hours ago, Grizzly said: Более того, инструкции 1/x нет для целочисленных типов Можно в "столбик" поделить, возможно это будет быстрее. Пример есть в sprp530.pdf a = (denom << normal) & 0x7fff0000; b = 0x80000000; /* dividend = 1 */ for(i = 15; i > 0; i--) b = _subc(b,a); b = b & 0x7fff; expn = (Int32) normal - 15; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Grizzly 0 9 августа, 2019 Опубликовано 9 августа, 2019 · Жалоба 1 час назад, stealth-coder сказал: Так об этом в test report написано: Угу. Но вот всё равно пока не верится, что WiFi 20 МГц с MIMO удастся на одном ядре запустить. 56 минут назад, stealth-coder сказал: Можно в "столбик" поделить Спасибо. Попробую. Уже почти добился реалтайма, осталось чуть-чуть. Вдруг это тоже поможет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Grizzly 0 11 августа, 2019 Опубликовано 11 августа, 2019 (изменено) · Жалоба В 08.08.2019 в 17:57, Grizzly сказал: Кстати, а это ожидаемое поведение, что при обращении полям структуры код замедляется раз в 6 по сравнению с доступом к ним как к массиву. То есть если я к массиву структур с I и Q обращаюсь не как samples.I и samples.Q, а бегу указателем на int16_t, то вижу большой прирост. Эти грабли, оказывается, тоже описаны как лет 10 тому назад: http://e2e.ti.com/support/processors/f/791/t/12524?C6000-compiler-suppport-for-complex-h Надо, конечно, попробовать на последнем компиляторе из 8.3.х, но вряд ли изменится поведении. Изменено 11 августа, 2019 пользователем Grizzly Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться