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

Allwinner T113-s3 уделал HiFi4 DSP. Смеяться или плакать?

27 minutes ago, mantech said:

У меня не дает скомпилить под thumb

Под "палец" компилирую только кодек.  Остальное в -marm.

5 minutes ago, GenaSPB said:

А как ыы заставить оьработчики в thumb делать? 

 

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


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

4 минуты назад, repstosw сказал:

Под "палец" компилирую только кодек.  Остальное в -marm.

Это можно как-то в файле задать, типа pragma  или еще как?

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


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

40 minutes ago, sasamy said:

у меня на Linux простой -O3 вместо этой бороды даёт +1 fps

У меня без явного указания -mthumb  результат такой же, как и с -marm.

Кроме того, без указания -ftree-vectorize  -ffunction-sections -fdata-sections - скорость декодирования меньше на 0,5 FPS.

1 minute ago, mantech said:

Это можно как-то в файле задать, типа pragma  или еще как?

Прагмами это надо будет каждую функцию обрамлять.

Использую  батники. Студии не использую.  Пример билд-файл в спойлере.

Spoiler
set INCLUDE=-IT113-s3 -IT113-s3/FB -ILL -IHiFi4 -IHiFi4/app -IHiFi4/app/from_FreeRTOS/include -IHiFi4/app/FEC -I.
set CFLAGS=-DNDEBUG -Ofast -marm -mcpu=cortex-a7 -mfloat-abi=hard -mfpu=vfpv4 -mfpu=neon -ftree-vectorize -fno-math-errno -fmax-errors=1 -ffunction-sections -fdata-sections
set CFLAGS2=-DNDEBUG -Ofast -mthumb -mcpu=cortex-a7 -mfloat-abi=hard -mfpu=vfpv4 -mfpu=neon -ftree-vectorize -fno-math-errno -fmax-errors=1 -ffunction-sections -fdata-sections
set ASMFLAGS=-mcpu=cortex-a7 -mfloat-abi=hard -mfpu=vfpv4 -mfpu=neon
set LINKFLAGS=-mthumb -mcpu=cortex-a7 -mfloat-abi=hard -mfpu=vfpv4 -mfpu=neon -ftree-vectorize -fno-math-errno -T main.lds -Xlinker -Map=main.map -L. -Wl,--gc-sections -Wl,--static -Wl,--strip-all -nostdlib -nostdinc -nostartfiles -ffreestanding -specs=nosys.specs -specs=nano.specs -u_printf_float

del *.o
del *.out
del *.a
del *.elf
del *.asm
del *.map
del *.bin
del *.fil
del *.113

:ASM
arm-none-eabi-as.exe %ASMFLAGS% -c LL/startup_s.S         -o startup_s.o
arm-none-eabi-as.exe %ASMFLAGS% -c LL/cache.S             -o cache.o

:V3s_LEGACY
arm-none-eabi-gcc.exe %CFLAGS% %INCLUDE% -c LL/startup_c.c
arm-none-eabi-gcc.exe %CFLAGS% %INCLUDE% -c LL/core_armv7.c
arm-none-eabi-gcc.exe %CFLAGS% %INCLUDE% -c LL/timer.c
arm-none-eabi-gcc.exe %CFLAGS% %INCLUDE% -c LL/delay.c
arm-none-eabi-gcc.exe %CFLAGS% %INCLUDE% -c LL/interrupt.c
arm-none-eabi-gcc.exe %CFLAGS% %INCLUDE% -c LL/LowLevel.c

:T113
arm-none-eabi-gcc.exe %CFLAGS% %INCLUDE% -c T113-s3/sys-clock.c

:FEC
arm-none-eabi-gcc.exe %CFLAGS2% %INCLUDE% -c HiFi4/app/FEC/init_rs.c
arm-none-eabi-gcc.exe %CFLAGS2% %INCLUDE% -c HiFi4/app/FEC/encode_rs.c
arm-none-eabi-gcc.exe %CFLAGS2% %INCLUDE% -c HiFi4/app/FEC/decode_rs.c

:main
arm-none-eabi-gcc.exe %CFLAGS2% %INCLUDE% -c main.c -Wno-strict-prototypes

:LINK
arm-none-eabi-gcc.exe %LINKFLAGS% ^
startup_s.o ^
cache.o ^
startup_c.o ^
core_armv7.o ^
interrupt.o ^
timer.o ^
delay.o ^
LowLevel.o ^
 ^
sys-clock.o ^
 ^
init_rs.o ^
encode_rs.o ^
decode_rs.o ^
 ^
main.o ^
 ^
-lgcc -lm -o main.elf


arm-none-eabi-objcopy.exe -O binary main.elf app.bin

pause
exit

 

 

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


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

5 минут назад, repstosw сказал:

Прагмами это надо будет каждую функцию обрамлять.

Зачем? Только начало и конец фрагмента, в нем может быть куча функций...

6 минут назад, repstosw сказал:

Использую  батники.

Жуть...

19 минут назад, repstosw сказал:

Прагмами это надо

Знать бы только что там писать в этой прагме, чтоб включить arm или thumb...

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


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

31 minutes ago, mantech said:

Знать бы только что там писать в этой прагме, чтоб включить arm или thumb...

А в настройках эклипсы, разве нельзя установить опции компиляции для отдельного файла отличными от дефолтных?  ЫАР это умеет.

На счёт что писать, в ЫАР есть строка "extra option" или как там её... В неё вписать -mthumb. Но переключение режима в ЫАР там и так есть.

 

31 minutes ago, mantech said:

Зачем? Только начало и конец фрагмента, в нем может быть куча функций...

Ну и про pragma push/pop ещё не забыть.

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

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


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

49 минут назад, repstosw сказал:

А в настройках эклипсы, разве нельзя установить опции компиляции

Вообщем скомпилировал, поставил прагмы. Результатом разочарован, бинарник стал на 20% меньше, распаковка Jpeg стала медленнее, процентов на 10, чем в АРМ режиме.

2 часа назад, sasamy сказал:

теоретически arm быстрей должен работать а на практике

Походу так и есть, а прирост видимо конкретно для этого алгоритма...

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


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

34 minutes ago, mantech said:

распаковка Jpeg стала медленнее, процентов на 10, чем в АРМ режиме.

Так в T113-s3 JPEG декодер аппаратный же...

34 minutes ago, mantech said:
3 hours ago, sasamy said:

теоретически arm быстрей должен работать а на практике

Походу так и есть, а прирост видимо конкретно для этого алгоритма...

дело не в алгоритме, а в промахах кеша из-за хаотичного обращения к большим таблицам.  Промахов в режиме "тумбочки", очевидно меньше

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

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


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

1 минуту назад, repstosw сказал:

Так в T113-s3 JPEG декодер аппаратный же...

Нее, я на программном "Чановском" проверял..

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


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

On 10/25/2023 at 8:04 PM, jcxz said:
On 10/25/2023 at 7:23 PM, repstosw said:

P.S.  Кстати, вопрос всем.   Кто-нибудь  пробовал вместо прерываний IRQ  задействовать FIQ ?

Конечно. В обязательном порядке. На ARM7 и на ARM9 - везде использовал.

Нашёл в каком-то регистре CP использование FIQ.

Чем отличается обработчик FIQ от обработчика IRQ?  Какие особенности?

Можно ли код обработчика IRQ использовать для FIQ?

Spoiler
	// save interrupt context on the stack to allow nesting
	SUB		LR, LR, #4
	STMFD   SP!, {LR}
	MRS     LR, SPSR
	STMFD   SP!, {R0, LR}

    MSR     CPSR_c, #MODE_SYS | I_F_BIT
	STMFD   SP!, {R1-R12, LR}
	// Although FPSID is a read-only register, software
	// can perform a VMSR to the FPSID to force Floating-point serialization,
	VMRS	LR, FPSID
	VMSR	FPSID, LR
	PUSH	{LR}

	// A VMRS or VMSR instruction that accesses the FPSCR acts as a Floating-point exception barrier
	// save VFP/Neon FPSCR register
	VMRS	R2, FPSCR	// R2 used below
	PUSH	{R2}
	// save VFP/Neon FPEXC register
	VMRS	R0, FPEXC
    ldr     LR, =(1 << 31) //check FPEXC.EX
	TST		R0, LR		// check FPEXC.EX
	//BEQ skipPUSH
	VMRSNE	LR, FPINST
	PUSHNE	{LR}
	VMRSNE	LR, FPINST2
	PUSHNE	{LR}
//skipPUSH:
   // Initialise FPSCR to a known state
    // Loaded in to R2
	LDR     R3,=0x00086060	//Mask off all bits that do not have to be preserved. Non-preserved bits can/should be zero.
	PUSH {R0}	// FPEXC
	AND     R2,R2,R3

//#if __ARM_NEON == 1
	// save neon data registers
	VPUSH.F32	{D16-D31}
//#endif // __ARM_NEON == 1
 	VMSR    FPSCR,R2	// Initialise FPSCR to a known state

	LDR		R2, =gic_irq_handler
	// save vfp/neon data registers
	VPUSH.F32	{D0-D15}

	MOV		LR, PC
	BX		R2     // and jump...

	// A VMRS or VMSR instruction that accesses the FPSCR acts as a Floating-point exception barrier
	VMRS	LR, FPSCR

	// restore vfp data registers
	VPOP.F32   {D0-D15}
	// restore VFP/Neon FPEXC register
    ldr     LR, =(1 << 31) //check FPEXC.EX
//#if __ARM_NEON == 1
	// restore vfp/neon data registers
	VPOP.F32	{D16-D31}
//#endif // __ARM_NEON == 1

	POP 	{R0}	// FPEXC
	TST		R0, LR	// check FPEXC.EX
	//BEQ skipPOP
	POPNE 	{LR}
	VMSRNE	FPINST2, LR
	POPNE 	{LR}
	VMSRNE 	FPINST, LR
//skipPOP:
	// restore VFP/Neon FPEXC register
	VMSR	FPEXC, R0
	// restore VFP/Neon FPSCR register
	POP		{LR}
	VMSR	FPSCR, LR
	POP		{LR}
	VMSR	FPSID, LR

	LDMIA   SP!, {R1-R12, LR}
    MSR     CPSR_c, #MODE_IRQ | I_F_BIT

	LDMIA   SP!, {R0, LR}
	MSR     SPSR_cxsf, LR
	ISB
	LDMIA   SP!, {PC}^

 

 

6 minutes ago, repstosw said:

дело не в алгоритме, а в промахах кеша из-за хаотичного обращения к большим таблицам.  Промахов в режиме "тумбочки", очевидно меньше

И кстати, эмуляторы этим страдают. Тоже код раскидан по бинарнику. Выборки хаотичны.  Особенно когда один ARM эмулируется другим ARM'ом.

Как это в GBA.   ARM 7TDMI нужно проэмулировать на Cortex A7.  Как проще?

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

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


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

On 11/15/2023 at 3:08 PM, GenaSPB said:

А как ыы заставить оьработчики в thumb делать?

а надо ли это ещё вопрос - может он и не даст прирост и достатчно только некоторые файлы в тумб собрать

On 11/15/2023 at 5:19 PM, mantech said:

Нее, я на программном "Чановском" проверял..

он не оптимизирован для simd ?

https://libjpeg-turbo.org/

 

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


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

2 часа назад, repstosw сказал:

Чем отличается обработчик FIQ от обработчика IRQ?  Какие особенности?

Вроде - только набором теневых регистров. По крайней мере на ARM7/ARM9.

2 часа назад, repstosw сказал:

Можно ли код обработчика IRQ использовать для FIQ?

Про ваш CPU - не знаю. Так как работал только на ARM7/ARM9.

К тому-же - зависит от обработчика, что он делает.

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


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

3 часа назад, sasamy сказал:

он не оптимизирован для simd ?

Нет, у меня старые либы, надо глянуть на эти...

А не подскажете, может случаем знаете, где есть несложные SIMD-оптимизированные либы для PNG?

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

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


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

On 11/15/2023 at 8:13 PM, mantech said:

где есть несложные SIMD-оптимизированные либы для PNG?

несложные  незнаю, при использовании ОС это никак не ощущается

http://www.libpng.org/pub/png/libpng.html

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


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

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

Ясно, нее, эта больно монстроидальная.

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


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

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

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

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

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

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

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

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

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