CPU+GPU: быть или не быть

Времена, когда вычислительная мощь ПК определялась только центральным процессором (CPU), остались далеко позади. Современный компьютер помимо CPU содержит еще один высокопроизводительный вычислительный блок – GPU, являющийся основой видеокарты. Но вот незадача – каждый из процессоров ориентирован на выполнение только «своего» набора инструкций, и «чужой» работы ни CPU, ни GPU до недавнего времени выполнять не могли. Получалось, что исполнение тех или иных задач приводило к пиковой загрузке одного из процессоров, в то время как другой спокойно прохлаждался, простаивая без работы. Естественно, данный факт не мог долго оставаться без внимания основных заинтересованных лиц — производителей процессоров, коими на сегодняшний день являются корпорации AMD (ATI), Intel и NVidia. Поэтому все три основных игрока на процессорном рынке кинулись искать решения, которые смогли бы распределить вычисления между CPU и GPU, повысив тем самым производительность всей системы и эффективность ее использования.

Реализовать идею распределения вычислений можно двумя способами. Первый – чисто программный. Для этого достаточно «сказать» одному из процессоров: «давай-ка, дружок, не стой, а помогай сотоварищу решить какую-нибудь задачку, ну например, по физике или рисованию». Казалось бы, все просто. Только вот процессоры русского не понимают, и «разговаривать» с ними приходится на понятном для них языке. Так, NVidia свои графические чипы учит «разговаривать» языком CUDA (Compute Unified Device Architecture, http://itc.ua/node/27969 ), а ATI — языком Stream (http://itc.ua/node/34067). Центральные же процессоры как Intel, так и AMD привыкли «общаться» на диалекте из семейства х86. В результате такого языкового многообразия программистам для решения задачи о распределении вычислений придется долго ломать голову над тем, кому какие задачки лучше подсунуть и какими «словарями» для этого придется пользоваться. Сложно? Еще бы.

Второй способ распределения вычислений – аппаратный. Зачем «распылять» вычислительную мощность, когда можно взять да и совместить оба процессора (CPU+GPU) в один? Так подумали все три корпорации и предложили свои решения. У Intel оно называется Larrabee (http://itc.ua/node/32135), у AMD — Fusion (http://ko-online.com.ua/node/39329), и, наконец, у NVidia – Tesla (http://www.itc.ua/node/28423). Казалось бы, языковая проблема решена, и теперь между CPU и GPU в рамках одного решения царит полное взаимопонимание. Но не все так просто… Три корпорации решили свои «внутренние» проблемы, но между собой-то не договорились. Так что конкурирующие решения по-прежнему «не понимают» друг друга. Что делать в этой ситуации программистам? Писать код под каждый «супер-чип» (Accelerated Processor Unit, APU в версии от AMD) в отдельности? Насколько ж тогда возрастет цена разработки одной игры? Оптимизация кода под два процессора – в два раза, под три – в три и т.д. А если учесть, что существуют еще и игровые консоли со своими особенностями, тогда хоть за голову хватайся… А ведь у программистов и без этого проблем хватало с оптимизацией кода. Только начали учиться «разбрасывать» вычисления между несколькими ядрами центрального процессора, как производители железек им уже подкинули гибридный чудо-чип со своими особенностями.

В свою очередь, у веселой тройки чипмейкеров свои проблемы: как остудить ту печь, которую они создали и назвали универсальным процессором. Мы все прекрасно знаем, с каким трудом сейчас удается снизить температуру современных процессоров, как центральных, так и графических. Ну, а если представить Core i7 с GTX280 на одной подложке – станет вообще дурно. Для подобного монстра не то что никакого вентилятора не хватит, тут и жидкостное охлаждение может не помочь. В результате на сегодняшний день реально работающие APU предложила только NVidia (http://itc.ua/node/34161), в то время как AMD со своим Fusion, и Intel с Larrabee решили немного (?) подождать (http://itc.ua/node/34139).

Так быть или не быть универсальному процессору (APU)? Вопрос сложный, и ответ на него неоднозначный. Скорей всего, программные реализации концепции распределения вычислений все-таки получат свое дальнейшее развитие. И в скором времени центральные процессоры научатся решать многие задачи, которые раньше возлагались на графические чипы. И наоборот: GPU возьмут на себя часть обязанностей CPU (http://itc.ua/node/33906). Что же касается идеи совместить оба процессора в одном устройстве, то успех в решении такой сложной задачи, на мой взгляд, будет во многом зависеть от координации действий все трех игроков рынка. Пока же каждый из них пытается тянуть одеяло только на себя, при первой же возможности тыча палки в колеса конкурента и маня к себе программистов сладкими и вкусными конфетами. Программисты, в свою очередь, уже и сами не понимают, как и подо что писать свои программы.