Jump to content

    
jeka

cortex m7 CPU/FPU pipeline, оптимизация кода

Recommended Posts

57 minutes ago, jcxz said:

Что "CMSIS"?

Библиотека оптимизированных под SIMD ф-ий

Quote

DSP library collection with over 60 Functions for various data types: fixed-point (fractional q7, q15, q31) and single precision floating-point (32-bit). Implementations optimized for the SIMD instruction set are available for Cortex-M4/M7/M33/M35P.

на C

 

Edited by sasamy

Share this post


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

Не, лучше пусть memcpy перепишет на ассемблере. 

А чего тешитесь - memcpy гораздо быстрее работает на НЕОНе, и да, на ассемблере, так что тут шуточки в сторону...

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

Библиотека оптимизированных под SIMD ф-ий

Так лень все перекапывать, но подобные функции vdupq_n_s16 скорее всего на асме писаны...

24.01.2021 в 03:00, SII сказал:

Разработкой ОС, написанием драйверов и т.п. низкоуровневой фигнёй занимается тоже меньше 1% программистов, а основная масса тусуется в веб-разработке.

Ну тут уж мягкое с теплым не путайте, скорее всего все те, кто тут отписался все-таки больше занимаются как раз низкоуровневой разработкой, да платят вебщикам больше, но тут меньше быдлокода и интереснее :biggrin:

Edited by mantech

Share this post


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

А чего тешитесь - memcpy гораздо быстрее работает на НЕОНе, и да, на ассемблере, так что тут шуточки в сторону...

Она (библиотечная) и на Cortex-M написана на асме (в IAR по крайней мере). Если кто-то этого не знает - сразу видно, что он ни разу не запускал отладчик.

И вправда - на кой рекламщику отладчик?  :biggrin:

Share this post


Link to post
Share on other sites

Еще немного про кеш (тестировалось на DRAM памяти, кеш включен на чтение и запись)

Заметил, что при любом обращении на чтение незакешированных данных, читается _вся_ строка кеша (32 байта), а не только тот элемент что вы запросили. Т.е. достаточно одной операции (например PLD) чтоб предварительно загрузить всю строку кеша.

Предположительно, при чтении на границе будут читаться 2 строки кеша (будет полезно чтоб командой PLD грузить сразу 64 байта)

Share this post


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

Заметил, что при любом обращении на чтение незакешированных данных, читается _вся_ строка кеша (32 байта), а не только тот элемент что вы запросили. Т.е. достаточно одной операции (например PLD) чтоб предварительно загрузить всю строку кеша.

Возможно - дело не в кеше, а размере пакета для DRAM-интерфейса. DRAM позволяет производить пакетный обмен с памятью и размер пакета задаётся при инициализации в широких пределах.

Возможно задан размер пакета == 32 байта.

Share this post


Link to post
Share on other sites

При работе "кэш-память" всегда читается-пишется вся линия кэша. Размер линии у всех разный, но часто это 32 байта. Делать короче смысла мало — накладные обращения в DRAM большие.

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.