Разные платформы и процессоры #бенч
В продолжение разговора о разных ОС и процессорах, который был начат в посте про Random, необходимо понимать следующее.
И это нужно знать. Это нужно проверять. И с этим нужно смириться.
Ваш код на разных платформах и на разных процессорах будет исполняться по разному. Такова реальность. Особенно, если дело касается микрооптимизаций.
Вот, например, у нас простейший бенчмарк. Это старый бенчмарк, который я периодически запускаю на разных версиях .NET и на разных компьютерах. Бенчмарк пытается воспроизвести Array bound check elimination (оптимизацию JIT, которая позволяет избегать проверки границ массива). Штука уже не очень актуальная, но я люблю этот бенч, так как я подсмотрел его аж в 2015 году у некого Андрея.
И вот, мы снова запускаем его в 2024 году на одном .NET 8, но на разных машинах.
Что мы видим:
1. Версия BenchmakDotNet и самого .NET одинаковая.
2. Разные ОС (Windows 11 и MacOS 14.5).
3. Разные процессоры (Ryzen 5800H и M3 Max).
4. Разная скорость исполнения (46 ns против 29 ns).
5. И совершенно разные относительные результаты.
Если на Windows результат
IL код в моей IDE одинаковый.
Вывод: знайте результаты на целевой ОС и целевых процессорах. В идеале, нужно встроить проверку работы ключевых алгоритмов прямо в CI/CD. Всё иное (я говорю про микрооптимизации) - результат на вашей и только вашей машине.
Код бенчмарка в комментариях.
В продолжение разговора о разных ОС и процессорах, который был начат в посте про Random, необходимо понимать следующее.
И это нужно знать. Это нужно проверять. И с этим нужно смириться.
Ваш код на разных платформах и на разных процессорах будет исполняться по разному. Такова реальность. Особенно, если дело касается микрооптимизаций.
Вот, например, у нас простейший бенчмарк. Это старый бенчмарк, который я периодически запускаю на разных версиях .NET и на разных компьютерах. Бенчмарк пытается воспроизвести Array bound check elimination (оптимизацию JIT, которая позволяет избегать проверки границ массива). Штука уже не очень актуальная, но я люблю этот бенч, так как я подсмотрел его аж в 2015 году у некого Андрея.
И вот, мы снова запускаем его в 2024 году на одном .NET 8, но на разных машинах.
Что мы видим:
1. Версия BenchmakDotNet и самого .NET одинаковая.
2. Разные ОС (Windows 11 и MacOS 14.5).
3. Разные процессоры (Ryzen 5800H и M3 Max).
4. Разная скорость исполнения (46 ns против 29 ns).
5. И совершенно разные относительные результаты.
Если на Windows результат
_array.Length
и константы примерно одинаковый, то на MacOS результаты разные, что несколько внезапно и совершенно не понятно.IL код в моей IDE одинаковый.
Вывод: знайте результаты на целевой ОС и целевых процессорах. В идеале, нужно встроить проверку работы ключевых алгоритмов прямо в CI/CD. Всё иное (я говорю про микрооптимизации) - результат на вашей и только вашей машине.
Код бенчмарка в комментариях.
👍14🔥4❤3
tgoop.com/csharp_gepard/109
Create:
Last Update:
Last Update:
Разные платформы и процессоры #бенч
В продолжение разговора о разных ОС и процессорах, который был начат в посте про Random, необходимо понимать следующее.
И это нужно знать. Это нужно проверять. И с этим нужно смириться.
Ваш код на разных платформах и на разных процессорах будет исполняться по разному. Такова реальность. Особенно, если дело касается микрооптимизаций.
Вот, например, у нас простейший бенчмарк. Это старый бенчмарк, который я периодически запускаю на разных версиях .NET и на разных компьютерах. Бенчмарк пытается воспроизвести Array bound check elimination (оптимизацию JIT, которая позволяет избегать проверки границ массива). Штука уже не очень актуальная, но я люблю этот бенч, так как я подсмотрел его аж в 2015 году у некого Андрея.
И вот, мы снова запускаем его в 2024 году на одном .NET 8, но на разных машинах.
Что мы видим:
1. Версия BenchmakDotNet и самого .NET одинаковая.
2. Разные ОС (Windows 11 и MacOS 14.5).
3. Разные процессоры (Ryzen 5800H и M3 Max).
4. Разная скорость исполнения (46 ns против 29 ns).
5. И совершенно разные относительные результаты.
Если на Windows результат
IL код в моей IDE одинаковый.
Вывод: знайте результаты на целевой ОС и целевых процессорах. В идеале, нужно встроить проверку работы ключевых алгоритмов прямо в CI/CD. Всё иное (я говорю про микрооптимизации) - результат на вашей и только вашей машине.
Код бенчмарка в комментариях.
В продолжение разговора о разных ОС и процессорах, который был начат в посте про Random, необходимо понимать следующее.
И это нужно знать. Это нужно проверять. И с этим нужно смириться.
Ваш код на разных платформах и на разных процессорах будет исполняться по разному. Такова реальность. Особенно, если дело касается микрооптимизаций.
Вот, например, у нас простейший бенчмарк. Это старый бенчмарк, который я периодически запускаю на разных версиях .NET и на разных компьютерах. Бенчмарк пытается воспроизвести Array bound check elimination (оптимизацию JIT, которая позволяет избегать проверки границ массива). Штука уже не очень актуальная, но я люблю этот бенч, так как я подсмотрел его аж в 2015 году у некого Андрея.
И вот, мы снова запускаем его в 2024 году на одном .NET 8, но на разных машинах.
Что мы видим:
1. Версия BenchmakDotNet и самого .NET одинаковая.
2. Разные ОС (Windows 11 и MacOS 14.5).
3. Разные процессоры (Ryzen 5800H и M3 Max).
4. Разная скорость исполнения (46 ns против 29 ns).
5. И совершенно разные относительные результаты.
Если на Windows результат
_array.Length
и константы примерно одинаковый, то на MacOS результаты разные, что несколько внезапно и совершенно не понятно.IL код в моей IDE одинаковый.
Вывод: знайте результаты на целевой ОС и целевых процессорах. В идеале, нужно встроить проверку работы ключевых алгоритмов прямо в CI/CD. Всё иное (я говорю про микрооптимизации) - результат на вашей и только вашей машине.
Код бенчмарка в комментариях.
BY C# Heppard


Share with your friend now:
tgoop.com/csharp_gepard/109