Больше ядер не означает, что компьютер мощнее

Факт выбора процессора с большим количеством ядер часто не приводит к увеличению производительности в той же степени при использовании определенных программ. Почему возникает это явление и, следовательно, каковы его причины? Мы объясняем это вам подробно.

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

Больше ядер не означает, что компьютер мощнее

Программы никогда не масштабируются с количеством ядер

Важно учитывать, что программы, которые выполняются, не имеют возможности разделить свои активные процессы или задачи в любой момент, в соответствии с количеством потоков выполнения, которые у нас есть в нашем ЦП. Больше всего из-за того, что это деление явным образом выражено в коде программы, то есть является продуктом навыков программиста и дизайна приложения.

На самом деле, что актуально при кодировании программы, так это не ее оптимизация для использования максимально возможного количества ядер, а скорее латентность. Понимание последнего как время, необходимое процессору для выполнения задачи, измеряемое в единицах времени. И это то, что производительность процессора состоит в выполнении большинства задач в кратчайшие сроки. Что будет зависеть в первую очередь от вашей архитектуры, а затем от вашей тактовой частоты.

Однако что нас интересует в отношении задержки, так это знание того, сколько задач он может выполнить за определенный период, что является рабочей нагрузкой, и это будет зависеть от ситуации и способа написания программ. Другими словами, производительность зависит не только от оборудования, но и от того, насколько хорошо или плохо написано программное обеспечение.

Футуро процессоры рендеринга

Разделение труда на несколько ядер

Теперь, если мы увеличим количество ядер в системе, то станет возможным разбивать работу на части и выполнять ее намного проще. Здесь в дело вступает формула T/N, где T — количество задач, которые необходимо выполнить, а N — количество потоков выполнения, которые может выполнить система. Очевидно, мы могли бы загрузить максимальное количество заданий на несколько ядер и перебором исправить их. Проблема в том, что эта мера контрпродуктивна, потому что она выгодна для самых современных процессоров, которые имеют более высокую производительность в отдельности на каждом ядре.

Мультихило Нуклеос

Однако разделение работы между разными ядрами — это дополнительная работа, которая обычно возлагается на ядро, выступающее в роли проводника и выполняющее следующие задачи:

  • Вы должны создавать процессы и списки задач и постоянно их контролировать.
  • Они должны знать, как всегда предсказывать, когда задача начинается и заканчивается, включая время, необходимое для завершения одной и начала другой.
  • Различные ядра должны иметь возможность отправлять сигнал основному ядру, чтобы знать, когда процесс начинается и заканчивается.

Это решение было принято SONY, Toshiba и IBM в Cell Broadband Engine, центральном процессоре PS3, где главное ядро ​​отвечало за управление остальными. Хотя гораздо раньше он был принят Atari Jaguar. Для PS4 SONY больше не повторяла эту модель, и никто не реализовал ее на ПК, потому что это кошмар, однако это самый эффективный способ разделить работу.

Не все может работать на нескольких ядрах

Если мы спросим себя, можем ли мы разделить любую задачу на подзадачи, чтобы распределить их по большему количеству ядер на неопределенный срок, ответ будет отрицательным. В частности, мы должны разделить задачи на три разных типа:

  • Те, которые могут быть полностью распараллелены и, следовательно, разделены между разными ядрами, которые есть у центрального процессора.
  • Задачи, которые можно выполнять частично параллельно.
  • Части кода, которые нельзя выполнять параллельно.

В первом случае T/N применяется к 100%, во втором случае мы уже входим в так называемый закон Амдала, где ускорение за счет увеличения числа ядер частичное, а в третьем случае нам просто нужны все мощность одного ядра для этой задачи,

Что отличает CPU от GPU в многопоточности

Здесь мы подходим к дифференциальной точке, каждый GPU / ГРАФИЧЕСКИЙ ПРОЦЕССОР или графический чип имеет блок управления, который отвечает за чтение списков команд и их распределение между различными ядрами графического процессора и даже между различными блоками. Это аппаратная реализация предыдущего случая, и она отлично работает в любой конфигурации, где вы хотите насыщать, пока есть работа, и, следовательно, держать как можно больше ядер занятыми. Однако мы должны понимать, что понятие потока исполнения в графическом процессоре всегда соответствует соответствующим данным и его списку инструкций. То есть пиксель, вершина или любые данные.

ЦП ГП

Что облегчает их распараллеливание. То есть, если бы мы хотели поджарить яйцо, процесс в ЦП должен был бы поджарить яйцо, что было бы полностью последовательным. С другой стороны, в графическом чипе задачей было бы просто нагреть масло или добавить яйцо на сковороду. Все это ускорило бы поджаривание не одного яйца, а нескольких, поэтому GPU лучше подходят для таких задач, как вычисление миллионов полигонов или пикселей одновременно, но не для последовательных задач.