LINUX.ORG.RU

История изменений

Исправление byko3y, (текущая версия) :

что сделает оптимизирующий компилятор, если эти переменные нигде больше не используются? правильно, оптимизатор просто выкинет этот код, он ничего не делает и ни на что не влияет

Итак, докладываю результаты бенчей самопальных ассоциативных массивов с volatile на структурах и примитивных типах, и без онных. Дизасм и отличия времени выполенния показывает, что volatile применилось. одна итерация - 4 изменения, 6 выборок; всего миллион итераций, ровно половина добавляемых элементов оставалась в массиве, вторая половина стиралась. Сборка на O2.

С volatile на всём, до чего дотянулись руки, кроме простейших локальных переменных char/int, время выполнения 2.58-3.64 секунд.
С volatile только на структурах глобальных данных время выполнения 2.58-2.63 секунд.
Без volatile время выполнения 2.32-2.38 секунд.

То есть, примерно 10% прироста. Ради этого вообще нужно было что-то делать? Ломать работающий код, нагибать програмистов раком и заставлять их расставлять идентификаторы const/volatile, чтобы первый вообще не дал прироста производительности, а второй дал 10%? К слову, бенчи strict aliasing показывали, что прирост производительности в среднем составлял 2-5%, с большим разбросом в плюс и даже минус на разных задачах.

Исходная версия byko3y, :

что сделает оптимизирующий компилятор, если эти переменные нигде больше не используются? правильно, оптимизатор просто выкинет этот код, он ничего не делает и ни на что не влияет

Итак, докладываю результаты бенчей самопальных ассоциативных массивов с volatile на структурах и примитивных типах, и без онных. Дизасм и отличия времени выполенния показывает, что volatile применилось. одна итерация - 4 изменения, 6 выборок; всего 1000 млн итераций, ровно половина добавляемых элементов оставалась в массиве, вторая половина стиралась. Сборка на O2.

С volatile на всём, до чего дотянулись руки, кроме простейших локальных переменных char/int, время выполнения 2.58-3.64 секунд.
С volatile только на структурах глобальных данных время выполнения 2.58-2.63 секунд.
Без volatile время выполнения 2.32-2.38 секунд.

То есть, примерно 10% прироста. Ради этого вообще нужно было что-то делать? Ломать работающий код, нагибать програмистов раком и заставлять их расставлять идентификаторы const/volatile, чтобы первый вообще не дал прироста производительности, а второй дал 10%? К слову, бенчи strict aliasing показывали, что прирост производительности в среднем составлял 2-5%, с большим разбросом в плюс и даже минус на разных задачах.