О видеокартах

Периодически возникает вопрос — а чем так хороши видеокарты, почему бы просто не купить побольше обычных процессоров?
Когда-то я на этот вопрос отвечал, поэтому теперь просто перепишу ответ сюда. Он не претендует на точность или полноту, скорее это «executive summary» или «для чайников».
Итак, Intel Xeon (и его аналоги AMD, а также процессоры других архитектур, в том числе ARM) — это процессоры общего назначения, то есть процессоры, рассчитанные на решение «обычных» задач.
У «обычных» задач обычно есть особенности, которые диктуют устройство процессора.
Во-первых, задача выполняется совершенно непредсказуемо в зависимости от внешних условий, а значит, процессору приходится прыгать по коду туда-сюда. Каждый такой прыжок — это удар по производительности. Ну примерно как телефонный звонок человеку, вошедшему в «состояние потока». Поэтому процессор обвешан хитрой электроникой, которая пытается угадать, куда именно придётся прыгнуть (предсказание переходов), а после предположения выполнить несколько команд заранее (спекулятивное выполнение).
Во-вторых, задаче может потребоваться совершенно случайные данные из памяти, а скорость памяти растёт не такими бешеными темпами, как скорость процессора. Отсюда необходимость «быстрой памяти» (кеша), который занимает бóльшую часть площади кристалла.
В-третьих, обычные задачи решаются последовательно, «в лоб», соответственно, единственный способ решить их быстро — просто быстрее перебирать инструкцию за инструкцией. Скорость «перебирания» называется тактовой частотой и составляет у современных процессоров от 1,5 ГГц (это совсем медленные, «лоховские») до 4,5 ГГц у «реально пацанских» моделей. Чем больше тактовая частота, тем сильнее разогревается процессор, поэтому у современных процессоров на одном кристалле помещается максимум три десятка ядер (на относительно невысокой частоте) или около десятка на высокой.
А теперь рассмотрим рисование картинки методом трассировки лучей.
Алгоритм прямолинеен. Как говорят наши потенциальные противники по несколько другому поводу, «straight as a rail». Алгоритм берёт относительно небольшой объём данных, компактно расположенных в памяти. Расчёт для разных точек относительно независим, поэтому можно считать их параллельно.
Какие же решения отсюда следуют?
Сокращаем кеш до минимально разумных размеров. Выкидываем хитрые предсказательные блоки, оставляя только вычислительное ядро. Обнаруживаем, что частоту можно снизить на порядок, и при этом каждая конкретная точка всё равно посчитается быстро, потому что количество ядер можно увеличить на два порядка. В результате получаем процессор с безумным (до нескольких тысяч) количеством относительно медленных и простых ядер почти без кеша, называем это «графическим ускорителем» и выходим на рынок. Profit.
А потом внезапно обнаружилось, что 3D-моделирование — далеко не единственная задача, которая хорошо решается при помощи массивно-параллельных вычислений, и всё заверте...
|
</> |