История изменений
Исправление 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%, с большим разбросом в плюс и даже минус на разных задачах.