|
0 / 0 / 0
Регистрация: 13.09.2015
Сообщений: 16
|
|||||||||||||||||||||
Оптимизация кода, нарушающего правила strict aliasing13.09.2015, 10:57. Показов 2205. Ответов 5
Метки нет (Все метки)
Доброго времени суток. Имеется такой код в ядре Linux:
После некоторого раздумья я пришел к такому варианту:
Судя по получившимся результатам, в случае нарушений strict aliasing, код работает примерно на 20% медленнее. Другое дело, что применения флага -fstrict-aliasing, похоже, вообще не повлияло на скорость работы кода. Вопрос в следующем - означает ли это, что применение -fstrict-aliasing само по себе не оптимизирует код, а лишь позволяет выявлять (вкупе с -Wstrict-aliasing) то, что файл нарушает strict aliasing?
0
|
|||||||||||||||||||||
| 13.09.2015, 10:57 | |
|
Ответы с готовыми решениями:
5
warning: dereferencing pointer 't' does break strict-aliasing rules Strict aliasing и memcpy Каламбур типизации и strict aliasing |
|
|
||||
| 13.09.2015, 11:43 | ||||
Сообщение было отмечено Radical_Dreamer как решение
РешениеДобавлено через 2 минуты
5
|
||||
|
0 / 0 / 0
Регистрация: 13.09.2015
Сообщений: 16
|
|
| 13.09.2015, 12:42 [ТС] | |
|
Evg, спасибо за подробный и развернутый ответ. Просто встречал пример на хабре, который вроде бы как после оптимизации заработал в 1.5 раза быстрее(хотя лично мне не удалось получить какой-либо разницы), а также замены преобразования типов на memcpy на gerrit'е cyanogenmod'а, я уж было подумал, что эта оптимизация чего-либо стоит. А так получается, в "лучшем" случае отгенерирует какой-нибудь некорректный код ценой ускорения, которого даже замерить трудно. Еще раз прогнал бенчмарк, но с -O3, и теперь во всех случаях получился примерно одинаковый результат. Полагаю, вопрос закрыт, и тему можно закрыть.
0
|
|
|
|
||
| 13.09.2015, 13:21 | ||
|
Насчёт ускорения - множество оптимизаций выглядят примерно так же: каждая даёт привар по чуть-чуть. Но оптимизаций много, и в сумме они дают хороший привар. Для каждой оптимизации есть специфичная область применения и на каждую оптимизацию можно написать синтетический код, который даст весьма ощутимое ускорение. Сама оптимизация отдельно взятая может вообще не иметь никакого эффекта, но имеет сильный эффект для оптимизаций, работающих после неё. Так что тут всё слишком сложно. Конкретно strict aliasing конкретно на интеле большого привара не даёт, т.к. на интеле аппаратура в этом месте хорошо работает, а кэша много. Для других процессоров эффект от strict aliasing'а вполне может оказаться намного большим, чем 1%
1
|
||
|
|
|
| 22.06.2016, 14:52 | |
|
До кучи сюда подкину ссылок, чтобы всё было в одной теме
Часто требуется сделать "битовое копирование". Типа того, что из переменной float32 получить битовый образ в переменную int32. Есть разные способы, но не все они формально корректны с точки зрения strict aliasing rules: Битовый формат согласно спецификации IEEE 745 В одной из тем, посвящённой union'ам, присутствует выдержка из стандарта: Union что из себя представляет? Union что из себя представляет? Вкратце с точки зрения стандарта суть сводится к тому, что одновременно читать-писать можно только в одно из полей union'а Добавлено через 4 часа 40 минут Вот ещё хорошая ссылка по теме https://habrahabr.ru/post/114117/
1
|
|
|
|
|
| 07.04.2017, 09:51 | |
|
0
|
|
| 07.04.2017, 09:51 | |
|
Помогаю со студенческими работами здесь
6
Union, new placement, strict-aliasing, cross-platform
Реализовать 2 статических анализатора исходного кода, которые будут проверять правила оформления кода Оптимизация методом Ньютона (нахождение точки минимума). Оптимизация кода Оптимизация кода. Замер времени выполнения части кода. Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Символьное дифференцирование
igorrr37 13.02.2026
/ *
Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет
значение производной при заданном х
Логарифм записывается как: (x-2)log(x^2+2) -. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога
Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
|
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
|