Для современных игр требуются все более мощные процессоры. Системные требования растут и сейчас даже четырех ядер не всегда хватает. Совсем недавно игры кое-как использовали два ядра, что же поменялось? Давайте посмотрим, как влияет на производительность рост числа ядер и почему распараллеливание крайне сложная вещь.
с чего все начиналось
В далеком 1967 году господин учёный по имени Джин Амдал сформулировал закон, описывающий рост производительности от увеличения числа вычислителей, то есть ядер, в нашем понимании. Закон этот не такой точный, не учитывает множества второстепенных факторов, однако, весьма хорошо согласуется с практикой.
Вдаваться в математику нам ни к чему, важно единственное – что бы получить существенный прирост производительности, необходимо максимально распараллелить программу. И процент параллельного кода должен быть более 90% для удовлетворительного результата. Учитывая, что 100% недостижимы в принципе, то линейного прироста добиться невозможно. Эту проблему и решают разработчики, зачастую далеко не очень удачно, многие игры и программы плохо оптимизированы под многоядерные системы. Так же оптимизация под разные процессоры существенно отличается, отсюда и разница в производительности в разных задачах в случае Intel и AMD.
очумелые ручки
А теперь закроем вкладку википедии и доверимся собственной голове, рукам и двухпроцессорной конфигурации с Xeon E5-2690. Ведь каким тестам можно доверять, кроме как своим? В наших руках 16 ядер и 32 потока. Была так же написана простая программа с высокой степенью параллелизма для расчета матрицы заданного размера. И в итоге были получены интересные результаты.
В итоге получается, что от сложности вычислений растет эффективность распараллеливания. Чем сложнее задача, тем более востребована многопоточность. А для простых задач она может даже приводить к потере эффективности выполнения программы.
Оптимизация позволяет сильно сгладить зависимость и увеличить эффективность использования многопоточности. Все что мы сделали - заставили программу динамически искать свободное ядро и загружать его, как только оно завершит предыдущую задачу.
Что же можно сказать в итоге? При определенном количестве ядер чисто математическая операция с практически максимально достижимой степенью параллелизма после 22-25 потоков уже не ускоряется. Учитывая, что скорее всего развитие процессоров надолго затормозится после 7 нм техпроцесса, вероятнее всего нас ждет стагнация как компьютерных технологий, так и программных решений. Надежд на многослойные чипы не так уж и много, до сих пор не понятно, как охлаждать такие решения.
А какие выводы можете сделать вы, посмотрев результаты этого маленького теста?
Комментарии