Jump to content

    
Sign in to follow this  
Grizzly

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

Recommended Posts

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

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

Так негде :(

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

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

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

Share this post


Link to post
Share on other sites
1 час назад, thermit сказал:

c_intrinsics_host_port-0_91_00-Setup.exe

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

Share this post


Link to post
Share on other sites
10 минут назад, thermit сказал:

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

Share this post


Link to post
Share on other sites

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

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

Edited by Grizzly

Share this post


Link to post
Share on other sites
20 минут назад, thermit сказал:

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

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites
10 часов назад, thermit сказал:

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

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

Share this post


Link to post
Share on other sites
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)

Share this post


Link to post
Share on other sites
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;

Share this post


Link to post
Share on other sites
1 час назад, stealth-coder сказал:

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

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

 

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

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

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

Share this post


Link to post
Share on other sites
В 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.х, но вряд ли изменится поведении.

Edited by Grizzly

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this