Перейти к содержанию
    

TI Keystone vs Intel i7. Одноядерный режим

7 часов назад, thermit сказал:

Дык, а кто мешает посмотреть эмуляцию команд?

Так негде :(

http://e2e.ti.com/support/processors/f/791/t/83269

Разве что некоторое описание:

http://e2e.ti.com/support/processors/f/791/p/501173/1814959#1814959

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 час назад, thermit сказал:

c_intrinsics_host_port-0_91_00-Setup.exe

Спасибо! Я уже несколько лет на Linux работаю, поэтому не знал о таком продукте. Сейчас в виртуалке запущу.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

10 минут назад, thermit сказал:

Круто! Да, жуткий код :) По тому, что на форуме тексаса было написано, я бы всю реализацию и близко не сделал.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Кстати, а это ожидаемое поведение, что при обращении полям структуры код замедляется раз в 6 по сравнению с доступом к ним как к массиву. То есть если я к массиву структур с I и Q обращаюсь не как samples.I и samples.Q, а бегу указателем на int16_t, то вижу большой прирост. Да, #pragma pack есть, чтобы дырки не было. Возможно, кстати это из-за запаковки и есть проигрыш... Такая часть кода пришла для адаптации под DSP. Но ведь указатель тоже бежит по запакованным по сути данным . Непонятно.

UPD. Ну, получается, что к членам структуры идет обращение как к volatile. Приходится постоянно вычислять адреса до элементов.

Изменено пользователем Grizzly

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну, в общем и целом - да. А в чем проблема? Процессор заточен под обработку упакованных данных.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

20 минут назад, thermit сказал:

А в чем проблема?

Малой кровью хотелось обойтись, но приходится рефакторить код. Без различных оптимизаций он красивее выглядел. Хотелось бы под #ifdef сохранить общую кодовую базу.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Дык, да. Я изначально рисую с эмуляцией интринсиков, что бы потом не было мучительно больно. Правда, эмуляция самописная. Ну и для пц код получается не оптимальным. Что касается красоты - пустое это.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я сам стараюсь на ПК писать на C как можно ближе к сигнальникам алгоритмы ЦОС и ЦС. До этого хватало быстродействия, поэтому не приходилось оптимизировать. Сейчас передо мной задача добиться реал-тайма от кода, который вообще на плюсах написан + с динамическим выделением памяти. Приходится использовать самописный аллокатор для размещения объектов в глобальной памяти, выкашивать либы Фурье общего назначения и т.д. и т.п. Поэтому про эмуляцию интринсиков спрашивал. Хочу, чтобы автор алгоритмов проверил, достаточно ли точности и адекватность замены некоторых алгоритмов.

Теперь сомневаюсь, что овчинка выделки стоила. Код написан для fixed-point, но в нем много long long. Оптимальные сетки не считались. Сегодня попрофилировал Фурье из DSPLib. Для 1024 отсчетов float и int показали практически идентичные результаты. Более того, инструкции 1/x нет для целочисленных типов. Приходится на время ко float приводить, а затем обратно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

10 часов назад, thermit сказал:

Правда, эмуляция самописная. Ну и для пц код получается не оптимальным. Что касается красоты - пустое это.

Не сказал сразу, что для ряда заказчиков проект должен работать на ПК. Это была основная причина для сохранения единой кодовой базы, которая должна работать за разумное время и на обычном компьютере. Походу пора разъезжаться :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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;

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 час назад, stealth-coder сказал:

Так об этом в test report написано:

Угу. Но вот всё равно пока не верится, что WiFi 20 МГц с MIMO удастся на одном ядре запустить.

 

56 минут назад, stealth-coder сказал:

Можно в "столбик" поделить

Спасибо. Попробую. Уже почти добился реалтайма, осталось чуть-чуть. Вдруг это тоже поможет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В 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.х, но вряд ли изменится поведении.

Изменено пользователем Grizzly

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...