Darth Vader 0 11 ноября, 2019 Опубликовано 11 ноября, 2019 · Жалоба Добейтесь компиляции без ошибок с обычным inline. Потом уже добавляйте __forceinline. Попробуйте сделать: 1. Объявите метод класса без inline. 2. Перед определением поставьте inline. 3. Определение встраиваемых методов класса должно располагаться в файле хидера класса, т.е. в одном файле с их объявлением, после объявления самого класса. Это обязательное условие. Без него компилятор будет выдавать ошибку. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 61 12 ноября, 2019 Опубликовано 12 ноября, 2019 · Жалоба 6 hours ago, Darth Vader said: Добейтесь компиляции без ошибок с обычным inline. С ней ошибок нет, не было и не будет, надеюсь) Моя версия компилятора упорно не переваривает __forceinline. Ну и ладно. У меня уже интерес к этому пропал. И так понятно, что код нужно писать таким образом, чтобы компилятор безо всяких пренуждений оптимизировал код самостоятельно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 236 12 ноября, 2019 Опубликовано 12 ноября, 2019 · Жалоба 4 часа назад, haker_fox сказал: И так понятно, что код нужно писать таким образом, чтобы компилятор безо всяких пренуждений оптимизировал код самостоятельно. ....или писать на асме. У меня вот сейчас в текущем проекте при компиляции с оптимизацией "Medium" загрузка процессора примерно такая-же (33-34%) как при оптимизации "High-Balanced". На "Medium" даже чуть меньше (~1% разницы). IAR_7.80.4. Почему бы это?... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 61 12 ноября, 2019 Опубликовано 12 ноября, 2019 · Жалоба 10 minutes ago, jcxz said: ....или писать на асме. В принципе я бы попробовал. Но мои коллеги не поймут. В прямом и переносном смысле) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VladislavS 39 12 ноября, 2019 Опубликовано 12 ноября, 2019 · Жалоба 34 минуты назад, jcxz сказал: или писать на асме Это только усложняет оптимизацию. 35 минут назад, jcxz сказал: Почему бы это?... Факторов влияющих на оптимизацию много. Почему такое в вашем проекте происходит автору виднее. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 61 12 ноября, 2019 Опубликовано 12 ноября, 2019 · Жалоба 2 minutes ago, VladislavS said: Это только усложняет оптимизацию. Только компилятору. Но если нужен супер-супер быстрый алгоритм в прерывании, то компилятор не сможет использовать, например SIMD-команды. Нужны либо специальные либы, либо писать ручками. Может быть и на асме, учитывая все тонкости и нюансы. Как раз на столе система сбора данных лежит. Прерывания тикают каждые 50 мкс, нужно делать "кучу" математики с float, параллельно работает сетевой стек и что-то ещё (уже забыл). То-ли хреново пишу, то-ли действительно нужно оптимизировать. Но иногда всё это не успевает работать((((((((((((( Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VladislavS 39 12 ноября, 2019 Опубликовано 12 ноября, 2019 · Жалоба 28 минут назад, haker_fox сказал: В принципе я бы попробовал. Но мои коллеги не поймут. Случаи когда реально нужно вмешательство asm можно на пальцах пересчитать. Сделать сколь-либо серьёзный проект на asm лучше чем на ЯВУ ой как непросто. Компилятор ЯВУ оптимизирует без устали. 2 минуты назад, haker_fox сказал: компилятор не сможет использовать, например SIMD-команды Почему? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 61 12 ноября, 2019 Опубликовано 12 ноября, 2019 · Жалоба 3 minutes ago, VladislavS said: Компилятор ЯВУ оптимизирует без устали. Да кто ж спорит. Но все ли команды архитектуры компилятор может использовать эффективно?. Полагаю, что нет. В любом случае подглядывать в листинг приходится. Возможно, я заблуждаюсь, но как компилятору объяснить, что нужно параллельно просчитать произведение нескольких векторов? Библиотеки CMSIS DSP, которые реализуют подобные возможности, я глядел, написаны на асме и с использованием intrinsic-команд. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VladislavS 39 12 ноября, 2019 Опубликовано 12 ноября, 2019 · Жалоба Если честно, то я плотно вычислениями не занимался. В моём идеальном мире, если правильно задать типы данных и указать компилятору тип процессора/сопроцессора, то он сам должен "поработать". Ну и CMSIS DSP, наверное, хороший вариант. А на чём библиотека написана нас не должно сильно волновать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 61 12 ноября, 2019 Опубликовано 12 ноября, 2019 · Жалоба 7 minutes ago, VladislavS said: Если честно, то я плотно вычислениями не занимался А у меня работа такая: мы измериловку делаем) 8 minutes ago, VladislavS said: сопроцессора, то он сам должен "поработать" Ну так в основном и есть до тех пор... пока что-нить не начнёт тормозить или работать неправильно. 8 minutes ago, VladislavS said: А на чём библиотека написана нас не должно сильно волновать. Опять же до поры до времени))) Но я только про себя))) Плюс у меня иногда и профессиональный азарт - поотимизировать, обойтись максимально малым количеством ресурсов. Например, система сбора данных, которую делаю сейчас, использует LPC4337. Там два ядра: m0 и m4. Прошлая версия использовала оба ядра. Я решил всё завести на одном (m4, конечно). Просто хочется поглубже изучить железо и софт, подрасти, так сказать профессионально. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 236 12 ноября, 2019 Опубликовано 12 ноября, 2019 · Жалоба 5 часов назад, VladislavS сказал: Факторов влияющих на оптимизацию много. Почему такое в вашем проекте происходит автору виднее. Имхо: потому что самый тяжёлый код (по вычислениям) у меня на асме; а тот, что на си - мне кажется потому что я когда пишу, хорошо знаю систему команд и предвижу, во что оно скомпилится. Поэтому даже на си тяжёлый по вычислениям код, стараюсь писать оптимально. Ну и очень часто смотрю в листинг. Поэтому работы оптимизатору оставляю немного. 5 часов назад, VladislavS сказал: Это только усложняет оптимизацию. Почему это? 5 часов назад, haker_fox сказал: Прерывания тикают каждые 50 мкс В моём проекте главное прерывание - с такой же частотой. 5 часов назад, VladislavS сказал: Случаи когда реально нужно вмешательство asm можно на пальцах пересчитать. Сделать сколь-либо серьёзный проект на asm лучше чем на ЯВУ ой как непросто. Компилятор ЯВУ оптимизирует без устали. Если нужно тупо просуммировать (усреднить) кучу значений, зачем это делать на си, если это легко сделать на асме? Получив при этом ускорение на десятки %-ов с минимумом усилий. При сравнимой сложности. 5 часов назад, VladislavS сказал: Если честно, то я плотно вычислениями не занимался. В моём идеальном мире, если правильно задать типы данных и указать компилятору тип процессора/сопроцессора, то он сам должен "поработать". Покажите пример как заставить компилятор использовать например: UADD16/UHADD16 - очень интересно! Да хотя бы ту же самую CLZ - как?? Без интринсинков. Как написать код на си чтобы она появилась? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 236 12 ноября, 2019 Опубликовано 12 ноября, 2019 · Жалоба 5 часов назад, VladislavS сказал: Ну и CMSIS DSP, наверное, хороший вариант. А на чём библиотека написана нас не должно сильно волновать. Ну да, помнится когда я писал ещё для TMS320VC5502, там тоже были либы. Как же оно называлось?... DSPLIB вроде. Задействовал как-то из неё код 32-битного БИХ-фильтра на биквадратных звеньях. Ну ничё в принципе неплохо вроде. А потом заглянул в код этой функции... ии.... кто-ж так пишет??? Хотя вроде на асме написано, но такое ощущение, что писавший её даже не удосужился изучить систему команд ядра! Переписал её нафиг. Получил ускорение примерно в 3 раза! Т.е. - не %-ы, а именно в разы! Так что библиотеки - не панацея. Их пишут индусы. Хотя может потому что она бесплатная была?... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 61 12 ноября, 2019 Опубликовано 12 ноября, 2019 · Жалоба 6 hours ago, VladislavS said: Почему? А как?) Вот хочу я "разом" найти среднее трёх векторов? 35 minutes ago, jcxz said: Да хотя бы ту же самую CLZ - как?? Без интринсинков. Как написать код на си чтобы она появилась? Угу. Более того, если сегодня он её даже и вставит, где гарантия, что вставит завтра при модификации кода... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
scifi 1 12 ноября, 2019 Опубликовано 12 ноября, 2019 · Жалоба 41 minutes ago, jcxz said: Да хотя бы ту же самую CLZ - как?? Без интринсинков. Как написать код на си чтобы она появилась? На кортексах есть core_cmInstr.h, оч. помогает. Кстати, у gcc есть __builtin_clz(). Для тех, кто любит разгонять, советую изучить опцию gcc -mslow-flash-data. По моим измерениям ускорило на несколько процентов. Интересно, в яре есть такая штука? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 236 12 ноября, 2019 Опубликовано 12 ноября, 2019 · Жалоба 19 минут назад, scifi сказал: На кортексах есть core_cmInstr.h, оч. помогает. Кстати, у gcc есть __builtin_clz(). 1 час назад, jcxz сказал: Без интринсинков. Интринсики - это тот же ассемблер, завуалированный. 19 минут назад, scifi сказал: Для тех, кто любит разгонять, советую изучить опцию gcc -mslow-flash-data. По моим измерениям ускорило на несколько процентов. Интересно, в яре есть такая штука? Если в IAR включить High-speed оптимизацию то вроде будет как раз на несколько %% быстрее. И то не факт. И код сильно раздувается. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться