-
- Физику не обманешь, данные нужно загрузить/обработать/сохранить,
пусть даже косвенной адресацией. Сэкономить можно автоинкрементом
регистров(указателей). Обычно при включении оптимизации по
скорости, так и происходит. - BlackMorda(06.09.2023 13:52)
- Физика тут не причем. Понятно, что если на косвенной адресации
сидят только LD и STR, то ничего путного не получить ни с
оптимизацией, ни без нее. А если арифметика с косвенной, то в
инструкции СРАЗУ происходит и загрузка и выгрузка. Ясен пень, что
не за один машинный цикл, но в конвейере - за один цикл. - my504(06.09.2023 14:22)
- Никогда не видел, чтобы по одной шине одновременно происходила
загрузка и выгрузка данных. Разве что в архитектуре ДВЕ шины для
данных и ДВУХ портовая память. - BlackMorda(06.09.2023 14:35)
- Я специально выше намекнул, что никакой двухпортовой памяти и разных шин не требуется. Загрузка и выгрузка происходят В РАЗНЫХ машинных циклах. Но поскольку это все работает в конвейере, то имеет место быть просто задержка на длину конвейера, а исполнение инструкций - за один цикл. - my504(06.09.2023 15:01)
- Если есть кеш то это вовсе не проблема. - =AlexD=(06.09.2023 14:44)
- Никогда не видел, чтобы по одной шине одновременно происходила
загрузка и выгрузка данных. Разве что в архитектуре ДВЕ шины для
данных и ДВУХ портовая память. - BlackMorda(06.09.2023 14:35)
- Физика тут не причем. Понятно, что если на косвенной адресации
сидят только LD и STR, то ничего путного не получить ни с
оптимизацией, ни без нее. А если арифметика с косвенной, то в
инструкции СРАЗУ происходит и загрузка и выгрузка. Ясен пень, что
не за один машинный цикл, но в конвейере - за один цикл. - my504(06.09.2023 14:22)
- на армах у меня лучшей методой для ускорения было объявление
переменной с типом размещения register Nikolay801_(105 знак., 06.09.2023 12:00)
- Кстати, да. Работа с локальными переменными, которые (если не
static) всегда регистровые, идет заметно быстрее. Вашу идею понял.
Спасибо, попробую. - my504(06.09.2023 12:06)
- есть такая проблема, глобальные переменные компилятор сбрасывает в
память после каждого чиха, резко обрубая скорость. - Nikolay801_(06.09.2023 15:34)
- Глобальные переменные - говнокод! - =AlexD=(06.09.2023 15:36)
- Таким образом, если я делаю доступ к глобальным переменным через
локальный указатель, то все должно быть чики-поки? - my504(06.09.2023 15:39)
- Методы! Работай через функции-методы, пусть даже inline. =AlexD=(335 знак., 06.09.2023 15:50)
- Если переменные запереть внутри модуля при помощи static и давать другим модулям доступ к ним через функции, возвращающие указатели, то это уже более терпимо. Но это имеет смысл в рамках методологии разбиения на модули, разделения интерфейса и реализации. А если просто чтобы обойти формальные запреты, то это бесполезно. - SciFi(06.09.2023 15:43)
- Таким образом, если я делаю доступ к глобальным переменным через
локальный указатель, то все должно быть чики-поки? - my504(06.09.2023 15:39)
- Глобальные переменные - говнокод! - =AlexD=(06.09.2023 15:36)
- есть такая проблема, глобальные переменные компилятор сбрасывает в
память после каждого чиха, резко обрубая скорость. - Nikolay801_(06.09.2023 15:34)
- ЕМНИП, register уже много лет игнорируется компиляторами. - SciFi(06.09.2023 12:01)
- действительно, игнорирует. - Nikolay801_(06.09.2023 15:22)
- Кстати, да. Работа с локальными переменными, которые (если не
static) всегда регистровые, идет заметно быстрее. Вашу идею понял.
Спасибо, попробую. - my504(06.09.2023 12:06)
- Это называется "load-store architecture". Там не получится избежать
"загрузку данных в РОН, арифметику, выгрузку данных из РОНа". Да и
зачем? Работает же, что ещё надо? SciFi(1 знак., 06.09.2023 11:53, ссылка)
- Надо быстро. Потому как DSP. Правильно я понимаю, что в ARM-ах с
косвенной адресацией работают только инструкции загрузки-выгрузки? - my504(06.09.2023 12:00)
- То есть не успеваете, поэтому нужно ускорить? Или успеваете, но всё
равно хочется ускорить? :-) Начинать в любом случае надо с
компиляции сишного кода. Современные компиляторы часто умеют без
заморочек выдавать вполне оптимальный код. - SciFi(06.09.2023 12:00)
- Ну наверное лучше сразу писать так, чтобы получить искомое. А не
рассчитывать на шаманство компилятора. И чего там рассчитывать в
регулярных вычислениях в цикле? По поводу успеваю-не успеваю. Пока
не знаю. И есть желание сначала сделать все возможное, а потом уже
узнать. - my504(06.09.2023 12:04)
- Если хочешь использовать определённую инструкцию – напиши функцию
на ассемблере Michael75(418 знак., 06.09.2023 15:17)
- Не путайте ненативное для Си DSP ядро в dsPIC-ах с совершенно нативной косвенной адресацией. - my504(06.09.2023 15:25)
- Вдруг выясняется, что искомое не существует. Для ускоряющих трюков,
применяемых в реальной жизни, советую заглянуть в CMSIS-DSP.
Например: SciFi(1 знак., 06.09.2023 12:13, ссылка)
- есть смысл покопать Nikolay801_(1 знак., 06.09.2023 15:24, ссылка)
- Если хочешь использовать определённую инструкцию – напиши функцию
на ассемблере Michael75(418 знак., 06.09.2023 15:17)
- Ну наверное лучше сразу писать так, чтобы получить искомое. А не
рассчитывать на шаманство компилятора. И чего там рассчитывать в
регулярных вычислениях в цикле? По поводу успеваю-не успеваю. Пока
не знаю. И есть желание сначала сделать все возможное, а потом уже
узнать. - my504(06.09.2023 12:04)
- То есть не успеваете, поэтому нужно ускорить? Или успеваете, но всё
равно хочется ускорить? :-) Начинать в любом случае надо с
компиляции сишного кода. Современные компиляторы часто умеют без
заморочек выдавать вполне оптимальный код. - SciFi(06.09.2023 12:00)
- Надо быстро. Потому как DSP. Правильно я понимаю, что в ARM-ах с
косвенной адресацией работают только инструкции загрузки-выгрузки? - my504(06.09.2023 12:00)
- Физику не обманешь, данные нужно загрузить/обработать/сохранить,
пусть даже косвенной адресацией. Сэкономить можно автоинкрементом
регистров(указателей). Обычно при включении оптимизации по
скорости, так и происходит. - BlackMorda(06.09.2023 13:52)