repstosw 18 15 ноября, 2023 Опубликовано 15 ноября, 2023 · Жалоба 27 minutes ago, mantech said: У меня не дает скомпилить под thumb Под "палец" компилирую только кодек. Остальное в -marm. 5 minutes ago, GenaSPB said: А как ыы заставить оьработчики в thumb делать? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 53 15 ноября, 2023 Опубликовано 15 ноября, 2023 · Жалоба 4 минуты назад, repstosw сказал: Под "палец" компилирую только кодек. Остальное в -marm. Это можно как-то в файле задать, типа pragma или еще как? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
repstosw 18 15 ноября, 2023 Опубликовано 15 ноября, 2023 · Жалоба 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 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 53 15 ноября, 2023 Опубликовано 15 ноября, 2023 · Жалоба 5 минут назад, repstosw сказал: Прагмами это надо будет каждую функцию обрамлять. Зачем? Только начало и конец фрагмента, в нем может быть куча функций... 6 минут назад, repstosw сказал: Использую батники. Жуть... 19 минут назад, repstosw сказал: Прагмами это надо Знать бы только что там писать в этой прагме, чтоб включить arm или thumb... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
repstosw 18 15 ноября, 2023 Опубликовано 15 ноября, 2023 (изменено) · Жалоба 31 minutes ago, mantech said: Знать бы только что там писать в этой прагме, чтоб включить arm или thumb... А в настройках эклипсы, разве нельзя установить опции компиляции для отдельного файла отличными от дефолтных? ЫАР это умеет. На счёт что писать, в ЫАР есть строка "extra option" или как там её... В неё вписать -mthumb. Но переключение режима в ЫАР там и так есть. 31 minutes ago, mantech said: Зачем? Только начало и конец фрагмента, в нем может быть куча функций... Ну и про pragma push/pop ещё не забыть. Изменено 15 ноября, 2023 пользователем repstosw Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 53 15 ноября, 2023 Опубликовано 15 ноября, 2023 · Жалоба 49 минут назад, repstosw сказал: А в настройках эклипсы, разве нельзя установить опции компиляции Вообщем скомпилировал, поставил прагмы. Результатом разочарован, бинарник стал на 20% меньше, распаковка Jpeg стала медленнее, процентов на 10, чем в АРМ режиме. 2 часа назад, sasamy сказал: теоретически arm быстрей должен работать а на практике Походу так и есть, а прирост видимо конкретно для этого алгоритма... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
repstosw 18 15 ноября, 2023 Опубликовано 15 ноября, 2023 (изменено) · Жалоба 34 minutes ago, mantech said: распаковка Jpeg стала медленнее, процентов на 10, чем в АРМ режиме. Так в T113-s3 JPEG декодер аппаратный же... 34 minutes ago, mantech said: 3 hours ago, sasamy said: теоретически arm быстрей должен работать а на практике Походу так и есть, а прирост видимо конкретно для этого алгоритма... дело не в алгоритме, а в промахах кеша из-за хаотичного обращения к большим таблицам. Промахов в режиме "тумбочки", очевидно меньше Изменено 15 ноября, 2023 пользователем repstosw Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 53 15 ноября, 2023 Опубликовано 15 ноября, 2023 · Жалоба 1 минуту назад, repstosw сказал: Так в T113-s3 JPEG декодер аппаратный же... Нее, я на программном "Чановском" проверял.. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
repstosw 18 15 ноября, 2023 Опубликовано 15 ноября, 2023 (изменено) · Жалоба 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. Как проще? Изменено 15 ноября, 2023 пользователем repstosw Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sasamy 0 15 ноября, 2023 Опубликовано 15 ноября, 2023 · Жалоба 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/ Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GenaSPB 11 15 ноября, 2023 Опубликовано 15 ноября, 2023 · Жалоба На interoperability будет оверхед Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 242 15 ноября, 2023 Опубликовано 15 ноября, 2023 · Жалоба 2 часа назад, repstosw сказал: Чем отличается обработчик FIQ от обработчика IRQ? Какие особенности? Вроде - только набором теневых регистров. По крайней мере на ARM7/ARM9. 2 часа назад, repstosw сказал: Можно ли код обработчика IRQ использовать для FIQ? Про ваш CPU - не знаю. Так как работал только на ARM7/ARM9. К тому-же - зависит от обработчика, что он делает. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 53 15 ноября, 2023 Опубликовано 15 ноября, 2023 (изменено) · Жалоба 3 часа назад, sasamy сказал: он не оптимизирован для simd ? Нет, у меня старые либы, надо глянуть на эти... А не подскажете, может случаем знаете, где есть несложные SIMD-оптимизированные либы для PNG? Изменено 15 ноября, 2023 пользователем mantech Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sasamy 0 15 ноября, 2023 Опубликовано 15 ноября, 2023 · Жалоба On 11/15/2023 at 8:13 PM, mantech said: где есть несложные SIMD-оптимизированные либы для PNG? несложные незнаю, при использовании ОС это никак не ощущается http://www.libpng.org/pub/png/libpng.html Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 53 16 ноября, 2023 Опубликовано 16 ноября, 2023 · Жалоба 10 часов назад, sasamy сказал: http://www.libpng.org/pub/png/libpng.html Ясно, нее, эта больно монстроидальная. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться