Введение
Прошлый год дал немало продвижений в мире 3D-графики. Мы получили первое настоящее обновление архитектуры nVidia в виде GT200. Мы также стали свидетелями возвращения AMD на рынок производительных видеокарт с GPU RV770, который использовал совершенно другой подход, поскольку компания представила маленький и эффективный чип, а не крупный кристалл со сложным дизайном.
Что касается программного интерфейса приложений (API), то появились первые детали о DirectX 11, да и OpenGL 3 стал доступен. Но даже с учётом всех перечисленных продвижений, знаковым событием стало официальное объявление Intel технологии Larrabee на SIGGRAPH.
Что же здесь такого интересного? Всё очень просто: факт, как вы увидите дальше в статье, что Larrabee радикально отличается от любого GPU, доступного сегодня. И это интригует. Энтузиастам остаётся только гадать, изменит ли этот дизайн нынешнее восприятие, да и насколько хорошо Intel и графика будут сочетаться вместе?
Intel возвращается на рынок high-end GPU после того, как компания отказалась от i740 около десяти лет тому назад. Этот уход совпал с окончанием “золотой эры” графики для ПК, когда многочисленные компании боролись друг с другом за рынок топовых GPU, после чего они стали исчезать одна за другой или переквалифицировались на менее конкурентные секторы. Сегодня на рынке high-end GPU между собой бьются AMD и nVidia, а попытки других компаний проникнуть на этот рынок закончились неудачей. Matrox, со своей Parhelia почти семь лет назад, XGI со своей Volari и 3DLabs с видеокартой Realizm – все они ушли со сцены. Возможно, это и к добру: современные GPU очень сложные, поэтому они требуют существенных вложений средств и крупный интеллектуальный потенциал, что могут позволить себе немногие компании.
Ожидаемое возвращение?
Повторный выход Intel на рынок high-end графики привлёк немало внимания, у пользователей появились новые ожидания и надежды. Intel – одна из немногих компаний, которые обладают достаточными финансовыми ресурсами, чтобы войти в игру, а также всеми необходимыми технологиями для разработки современных производительных раздельных GPU. По этой причине Intel – единственный конкурент, который может реально растрясти устоявшееся положение на этом рынке. Но всё же давайте будем реалистами.
Десять лет назад многие пользователи думали то же самое, когда Intel вышла на сцену графики, и надежды были высоки. В то время рынок был поделён на две категории: стартапы, которые обеспечивали превосходную 3D-производительность (3Dfx, Nvidia и PowerVR), а также “тяжеловесы”, рассматривавшие потребительское 3D-ускорение больше как гаджет и добавку к традиционным сферам (Matrox, S3 и ATI до того, как её купила AMD).
Многие надеялись, что появление Intel оздоровит этот рынок и даст неслыханную производительность. Конечно, в то время у Intel был козырь в рукаве: компания только что купила Real3D, известную своими аркадными видеокартами Sega Model 2 и Model 3, которые в то время давали весьма высокую производительность. Да, несмотря на все свои качества, графический процессор i740 так и не смог соответствовать ожиданиям, и видеокарты, подобные Voodoo 2 и TNT, быстро затмили его по производительности. И вместо того, чтобы продолжать биться на этом рынке, Intel решила использовать данную технологию в своих чипсетах, намереваясь производить интегрированные платформы. И данная стратегия себя оправдала.
Нажмите на картинку для увеличения.
Всё могло бы остаться таким, каким оно есть, если бы некоторым исследователям, с учётом тенденции роста программируемости GPU, не пришла в голову необычная идея использования графического процессора в качестве высоко параллельного универсального вычислительного блока.
Поначалу эту идею никто не воспринимал всерьёз, но затем она получила широкую поддержку – до той степени, что nVidia и AMD, чувствуя возможность завоевать новый рынок, стали всё больше говорить о вычислениях на GPU при выпуске своих новых графических процессоров. А это Intel стерпеть не могла. Компания вряд ли позволила, чтобы GPU отобрали у неё свой хлеб. Графические процессоры, взявшие на себя наиболее “тяжёлые” вычислительные задачи, могли бы привести к тому, что high-end центральные процессоры стали бы избыточными. Вообще, само появление GPU ограничило эффект от высокопроизводительных CPU в игровом мире, поэтому для Intel было очень важно избежать подобного эффекта на этот раз (на самом деле, последствия ещё шире).
Поэтому компании пришлось реагировать и предлагать альтернативу. И, как часто бывает в случае Intel, альтернатива была построена на старой доброй проверенной архитектуре x86.
Общий обзор
Первое, что нужно отметить насчёт Larrabee – технология очень не похожа на другие GPU. На самом деле, перед нами даже не графический процессор в его классическом понимании. Как видно на приведённой диаграмме, Larrabee представляет собой набор очень простых процессоров x86, выполняющих инструкции упорядоченно, которые дополнены векторным блоком FPU, работающим с 512-битными векторами (вектор состоит из 16 чисел с плавающей запятой одинарной точности или целых чисел, либо из восьми чисел с плавающей запятой двойной точности). Каждое ядро снабжено 256 кбайт кэш-памяти, а связь между процессором и когерентность кэшей обеспечивается кольцевой шиной. Единственные компоненты, которые намекают, что перед нами не только высоко параллельный CPU, подобный Cell, это текстурные блоки и интерфейс дисплея.
Нажмите на картинку для увеличения.
Ядра в деталях: что-то новое, что-то (очень) старое
Подобно IBM с её архитектурой Cell, Intel сделала следующее наблюдение: у самых требовательных к вычислительной мощности приложений поток инструкций, как правило, очень линеен. Там немного операций ветвления и зависимостей между инструкциями, следовательно, современные процессоры, где большая часть кристалла отведена под управляющую логику (предсказание ветвлений и динамическое планирование инструкций) не очень хорошо подходят для подобных задач.
Давайте на момент откажемся от привычной тенденции современного дизайна CPU – интеграции двух или четырёх “больших” процессоров на кристалл. Для описанных выше задач с тем же количеством транзисторов будет намного полезнее использовать большое число маленьких, намного более простых процессоров. Intel даже представила сравнительную таблицу, оправдывая свой выбор.
Нажмите на картинку для увеличения.
Как видно по таблице, при сравнимой площади ядра и энергопотреблении, ядра с упорядоченным выполнением инструкций (не идентичные тем, что используются в Larrabee – взятые просто для примера) обеспечивают пропускную способность по выполнению векторных инструкций в 20 раз больше, чем у Core 2 Duo на той же тактовой частоте. Сделав выбор, настал время выполнить дизайн самих процессоров. Для набора инструкций других вариантов просто не было. Поскольку Larrabee должна стать “троянским конём” Intel, а именно такую роль можно отвести новому GPU на архитектуре x86, набор инструкций должен быть хорошо известен и проверен временем.
Впрочем, данный выбор всё равно несколько удивляет, так как набор инструкций x86 довольно сложный (всё же архитектура CISC) и поддержка всех инструкций, добавленных на протяжении существования архитектуры, не очень хорошо влияет на число необходимых транзисторов, если сравнивать с архитектурами RISC.
x86: правильный выбор?
Сегодня можно забыть о дополнительной стоимости нескольких сотен тысяч транзисторов, поскольку у современных процессоров их сотни миллионов. Но если вернуться на 15 лет назад, когда Pentium и PowerPC 601 были конкурентами, последний процессор Intel использовал примерно на 15% больше транзисторов, чем IBM. И разница в 500 000 транзисторов, если у всего процессора их было около трёх миллионов, довольно заметная. Значит, экономические факторы противоречат хорошему технологическому решению? Не совсем.
Во-первых, у Intel есть важное преимущество 30-летнего опыта со своей архитектурой x86, и даже если у компании есть навыки с архитектурами VLIW (IA64) и RISC (i860, i960), опыт с архитектурой x86 всё же намного весомее. Причём этот опыт касается как аппаратной части, так и программной, так как Intel может опираться на свои многолетние исследования в области компиляторов x86.
Нажмите на картинку для увеличения.
Во-вторых, выбор CISC имел как преимущества, так и недостатки. Если инструкции RISC имеют одинаковый размер и сконструированы по одному принципу, чтобы облегчить декодирование, инструкции CISC могут быть разного размера. И, пусть декодирование выполняется сложнее, но код x86 традиционно более компактный, чем эквивалентный код RISC. Здесь, опять же, можно подумать о ничтожности этого фактора, но данные процессоры оснащены очень маленьким кэшем, когда на счету каждый килобайт.
Выбор x86 имеет ещё одно преимущество: у Intel появляется возможность повторно использовать какой-либо старый дизайн, что, как раз, и сделали инженеры. Последним процессором Intel с упорядоченным выполнением инструкций был Pentium MMX (P55), но его улучшения по сравнению с классическим Pentium (P54C) не очень стоящие в рамках проекта Larrabee. Поэтому имело намного больший смысл использовать оригинал. Но возникает два вопроса: не лучше ли было начать “с нуля” и разработать процессор, который идеально подходил бы для Larrabee?
Вообще, в умах пользователей царит древний миф о начале “с нуля” при разработке новых дизайнов процессоров, что рассматривается даже как синоним качества. Большинство оценивают подобный шаг как возможность избавиться от всех недостатков прошлого. Но на практике инженеры редко создают что-то “с нуля”. Во-первых, потому что в этом нет особого смысла. Многие строительные блоки можно использовать повторно, их не нужно придумывать каждый раз. Во-вторых, подход “с нуля” более затратный как по времени, так и по деньгам.
Intel, вне всякого сомнения, знает, как разрабатывать и производить процессоры x86. И не стоит забывать о времени, которое требуется на полную отладку дизайна. Здесь на ум сразу всплывают знаменитые ошибки, такие как проблемы у Pentium с делением чисел с плавающей запятой или проблемы работы с буфером TLB у Phenom, которые были во всех новостях. Но на самом деле, у всех процессоров есть ошибки той или иной значимости. Достаточно просто почитать спецификации производителя, где приведён список ошибок для конкретной модели процессора. Преимущество модификации существующего дизайна, такого как Pentium, как раз и заключается в том, что он скрупулёзно протестирован и проверен, а это важный плюс. По информации инсайдеров, Intel повторно использовала дизайн Pentium, который был аккуратно модифицирован “Пентагоном” для военных применений. Это вряд ли заслуживает доверия, но увеличивает загадочность Larrabee, поэтому Intel особо и не торопится опровергать слух.
В деталях: скалярный блок и SMT
Теперь давайте рассмотрим ядра в деталях. Как мы уже отметили выше, они базируются на дизайне Pentium, к которому Intel добавила несколько важных изменений. Наследие P54C бесспорно по скалярному блоку, который использует конвейер суперскалярного выполнения Pentium с двумя блоками “U” и “V”.
Первый способен выполнять все скалярные инструкции x86, а второй ограничен относительно полным набором (за исключением, например, сложных арифметических и логических инструкций, таких как умножение и деление). Но Intel, как мы уже говорили, внесла в ядро Pentium ряд изменений. Сначала инженеры добавили 64-битную поддержку, а также несколько инструкций для управления кэш-памятью второго уровня. Эти инструкции особенно важны для приложений потокового типа, которые не следуют принципу временной локализации, характерному для традиционных программ. То есть, как только будет выполнена операция для каких-либо данных, они наверняка в ближайшее время не будут использоваться повторно.
Подобная характеристика, как доказывает практика, имеет просто ужасные последствия для кэш-памяти, использующей алгоритм LRU (алгоритм удаления дольше всех неиспользовавшихся элементов). Кэш-память будет тратить своё время и ресурсы на удаление важных данных и кэширование потоковых данных, которые будут использоваться только один раз. Прекрасно зная об этой проблеме, разработчики Larrabee добавили инструкции для маркировки строчек кэша как низкоприоритетных, то есть данные в них могут заменяться сразу же после доступа к ним. В данном случае Intel удалось сочетать лучшее из двух миров: временную буферную память и прозрачность стандартной кэш-памяти, с механизмом соблюдения когерентности (соответствия данных друг другу) среди кэшей разных ядер.
Нажмите на картинку для увеличения.
Ещё одно изменение заключается в добавлении Simultaneous Multithreading (SMT). Данная технология как раз недавно вернулась в архитектуры Intel с выпуском процессоров Core i7. Процессоры Larrabee тоже её поддерживают, причём важность этого шага здесь возросла из-за упорядоченной природы выполнения команд ядер. Современные CPU могут изменять порядок выполнения инструкций, чтобы максимально нагрузить вычислительные блоки, а ядра Larrabee этого сделать как раз не могут. Следовательно, некоторые участки кода будут слишком слабо использовать доступные ресурсы. А сочетая одновременное выполнение нескольких потоков, можно увеличить использование ресурсов. Если инструкция номер один временно блокирует выполнение инструкции номер два в потоке A, то вы можете переключить потоки и выполнить инструкцию номер один в потоке B.
Инженеры обеспечили выполнение четырёх потоков на одном ядре, конечно же, с разными регистрами для каждого потока. Использование четырёх потоков сказывается на задержке при доступе к кэшу первого уровня. Чтобы не снижать эффективность работы кэшей инструкций и данных L1, их размер был увеличен с 8 кбайт каждый (у Pentium) до 32 кбайт (у Larrabee).
Векторный блок и новый набор инструкций
Но, как вы можете представить, вычислительную мощь Larrabee дают не ядра Pentium. Чтобы конкурировать с GPU на их “домашней арене”, вам нужно намного больше, чем блок FPU или даже SSE. Поэтому Intel оснастила каждое ядро векторным блоком, одновременно работающим с 16 элементами (сравните с четырьмя для блоков SSE или SPU у Cell). Эти блоки способны работать с целыми числами, с числами с плавающей запятой одинарной точности и двойной точности. Конечно, при этом пропускная способность уменьшается в два раза, однако она всё равно больше, чем у современных GPU, которые в два-четыре раза медленнее в случае AMD и почти в десять раз медленнее в случае nVidia при переходе от одинарной к двойной точности.
Вместо расширения набора инструкций SSE (сколько можно?) для поддержки нового векторного блока, инженеры Intel создали новый набор под названием “Larrabee new instructions” (LRBni). Intel довольно смутно говорит о поддерживаемых инструкциях на данный момент, но мы должны получить больше информации на грядущей конференции Game Developers Conference (GDC). Intel планирует организовать на ней несколько пресс-конференций с Михаэлем Абрашом (Michael Abrash) из RAD Game Tools и Томом Форситом (Tom Forsyth) из Intel, которые должны пролить свет на новый набор инструкций.
Впрочем, кое-что мы уже знаем: инструкции в наборе будут поддерживать до трёх операндов, что позволяет реализовать инструкции умножения-и-сложения (MAD), а также выполнение неразрушающих (non-destructive) инструкций, в которых, в отличие от SSE, один из исходных регистров перезаписывается значением результата выполнения инструкции. По сравнению с набором инструкций VMX в PowerPC Processing Element (PPE) процессоров Cell, например, который работает только с регистрами, в данном случае операнды могут считываться напрямую из кэша L1, что позволяет рассматривать его как расширенный файл с регистрами. Блок очень гибкий, поскольку он может реорганизовывать данные в регистре или выполнять различные преобразования в “экзотические” форматы, часто использующиеся в GPU, без потери производительности. Или, в худшем случае, при небольшом падении скорости. Эти преобразования могут выполняться напрямую во время загрузки данных из кэш-памяти, позволяя хранить их в памяти в компактной форме, что позволяет максимизировать количество данных, содержащихся в кэш-памяти.
Ещё одна интересная деталь блока – возможность исполнять операции рассеяния/сборки (scatter/gather), которые обычно вызывают проблемы в GPU. Блоки SIMD часто очень ограничены по возможностям доступа к памяти. Вектор считывается из памяти по одному адресу, у которого часто бывают свои ограничения, связанные с выравниванием памяти. Архитектура Larrabee намного более гибкая. Можно загружать или выгружать 16 элементов вектора из памяти с 16 различных адресов, содержащихся в другом векторе. Конечно, полностью некогерентный доступ к памяти будет негативно сказываться на скорости кэш-памяти, и в худшем случае для выполнения подобной операции может потребоваться до 16 тактов (за один такт считывается, максимум, одна строчка кэша).
Векторный блок и регистр маски
Последний интересный момент о векторном блоке касается существования регистра маски, который в чём-то схож с регистром фильтра в набор инструкций VMX. Данный регистр, содержащий 16 булевых значений, указывает на то, нужно ли нет записывать получившиеся данные в регистр назначения. Маска позволяет использовать технологию под названием предикация. В случае условного перехода если-то вместо попытки предсказания результата этого условия для продолжения выполнения программы без потери производительности, обе ветки выполняются параллельно, но только правильная сохраняется (с помощью регистра маски). Если код необходимо выполнять в относительно коротких ветвлениях, то такой подход эффективнее, поскольку он предотвращает риск ошибочных предсказаний ветвления.
Данный блок, вне сомнения, является наиболее интересной особенностью Larrabee. Однако мы сохраним несколько замечаний по поводу выбора нового набора инструкций SIMD. Конечно, набор инструкций SSE, который стареет, да и был он предназначен для снижения нагрузки на аппаратную часть, здесь не подходит. Но мы также знаем, что инженеры Intel работают над новым набором инструкций SIMD под названием “advanced vector instructions” (AVX). Последние тоже поддерживают инструкции с тремя операндами, включая инструкции MAD, а размер обрабатываемых векторов увеличился до 256 бит по сравнению со 128 битами у SSE (и 512 битами у Larrabee).
Вполне возможно, что Larrabee, из-за своих особенностей, нужны были “экзотические” инструкции, которые не имеют смысла в традиционных CPU, да и размер векторов AVX в два раза меньше. Если взглянуть с другой стороны, то и 512-битные векторы слишком сильно нагружают стандартные CPU. Но на практике объяснения Intel весьма противоречивы. С одной стороны, они указывают на то, что Larrabee поддерживает набор инструкций x86, что обеспечивает совместимость с огромным числом программного обеспечения. С другой стороны, чтобы выжать максимум из Larrabee, вам потребуется использовать новый специфический набор инструкций – который не применяется в других CPU Intel.
Быстрая связь: кольцевая шина
Чтобы обеспечивать когерентность кэшей, связь между разными процессорами и доступ к фиксированным блокам, таким как текстурные блоки, Intel реализовала довольно классическую кольцевую шину. Данный тип топологии недавно вновь стал активно использоваться, в качестве примеров можно привести процессор Cell и некоторые GPU AMD (X1800, X1900 и т.д.), поскольку он существенно упрощает проблему связи между компонентами, когда количество передаваемых данных увеличивается.
Intel снабдила Larrabee двумя 512-битными шинами, по одной на каждое направление, чтобы снизить задержки на связь. Однако подобное решение недостаточно, чтобы избежать задержек, которые могут достичь проблематичного уровня, когда число процессоров превысит определённое число. Поэтому в реализациях Larrabee, которые используют более 16 ядер, применяются несколько более коротких кольцевых шин (вероятно, обслуживающих только по восемь ядер).
Нажмите на картинку для увеличения.
Кстати, диаграмма Intel Larrabee не совсем точная. Чтобы избежать лишнего усложнения, Intel расположила контроллеры памяти по обе стороны чипа, а все текстурные блоки слева. На практике текстурные блоки и контроллеры памяти будут распределены вдоль периферии кольца, а не будут располагаться в одном месте. Это позволит избежать проблем с перегрузкой на конфигурациях, подобных показанной.
Текстурные блоки
Как мы уже говорили чуть выше, Larrabee не очень похож на традиционный GPU, но если Intel удалось устранить движок настройки (setup engine) и блоки растровых операций (ROP), интегрировав эти функции напрямую на уровне ядер Larrabee, то для текстурных блоков такое сделать уже не получилось. Эти блоки выполняют довольно специфическую работу, с которой справляются именно специализированные блоки. Сжатие текстур (DXTC), например, очень просто сделать аппаратно, что и обусловило успех этой технологии, но оно требует существенных ресурсов для программной реализации. Intel посчитала, что выполнение текстурных операций на процессорах будет в от 12 до 40 раз медленнее, чем на отдельных блоках, в зависимости от конфигурации (такой как качество фильтрации, сжатый или несжатый формат текстур).
Текстурные блоки довольно классические, и Intel не даёт о них много информации, за исключением того, что они будут поддерживать все стандартные операции Direct3D 10 и режимы сжатия. Фактически, это единственная особенность, которая может ограничить способности эволюции Larrabee. Как мы увидим позже, программное обеспечение полностью управляет конвейером рендеринга Larrabee, оно может добавлять грядущие функции программного интерфейса приложений (API) Microsoft через простое обновление 3D-движка, исполняемого ядрами Larrabee. С другой стороны, текстурные блоки будут ограничены определённым уровнем функциональности, который будет определять работу чипа в целом.
Нажмите на картинку для увеличения.
Одна любопытная особенность данных текстурных блоков в том, что они могут выполнять преобразование виртуальных адресов в физические. Если быть более конкретным, это означает, что вам больше не нужно загружать полную текстуру с её mipmap-стеком в локальную память. В памяти в виде страниц размером в несколько килобайт будут храниться только те части текстуры, которые необходимы для её отображения. Если страницы в памяти нет (page fault), текстурный блок оповещает процессор, который может вызвать требующиеся данные. Этот механизм упростит жизнь программистам, которые не ленятся выполнять сложные реализации, например, алгоритма, подобного id Software MegaTexturing.
Larrabee против Cell
Очень заманчиво сравнить Larrabee и Cell. Оба процессора используют множество одиночных ядер (с упорядоченным выполнением команд), делают акцент на векторные вычисления, имеют 256 кбайт выделенной кэш-памяти на ядро, кольцевую шину для связи и т.д. На первый взгляд сходств много. Но и различия тоже весьма существенны: Cell, в первую очередь, это центральный процессор. И хотя он ориентирован на потоковые приложения, он не подходит для расчёта и вывода рендеринга, то есть текстурных блоков у него нет.
Нажмите на картинку для увеличения.
Другим существенным отличием является способ работы с памятью. У Cell, за исключением PPE, который является единственной частью процессора с глобальным доступом к пространству памяти, доступ к памяти всех SPU ограничен 256 кбайт локальной памяти. Поэтому доступ к основной памяти должен выполняться исключительно через операции прямого доступа (DMA). Как мы уже видели выше, все ядра Larrabee имеют доступ ко всему пространству памяти через кэш-память, работа которой прозрачна программисту, даже есть некоторые возможности управления. Выбор Intel существенно упрощает программирование и позволяет избежать добавления более общих ядер, таких как PPE. Подобная гетерогенная система является одним из недостатков Cell, поскольку она усложняет жизнь программистов. Кроме тщательной проработки доступа к памяти, программист должен собирать два исполняемых файла с помощью двух наборов инструкций, что предусматривает работу с двумя разными компиляторами.
Поэтому ядра Larrabee намного более функциональные, чем SPU у Cell, так как они поддерживают все инструкции x86. Да и производительность расчёта векторов тоже выше. Это связано с тем, что ядра работают с 512-битными векторами, а не 128-битными, как в SPU. И если у Cell сохранится преимущество по частоте (Larrabee, как ожидается, будет работать на частотах от 2 до 2,5 ГГц, но это всё пока очень предположительно), подобная особенность компенсирует столь крупный недостаток. Означает ли, что Cell нечего противопоставить? Отнюдь. Cell, с 234 миллионами транзисторов (число, которое впечатляло три года назад, но сегодня удивить им сложно) намного дешевле производить, чем Larrabee, который будет крупнее и существенно дороже в производстве.
Наконец, хотя процессор Cell не получил такого успеха, какого от него ожидали, процессор используется в более, чем 20 миллионах экземпляров PlayStation 3, и при этом большое количество программистов провели дни многие и ночи, разрабатывая приложения для этой платформы, чтобы выжать из неё максимум. А платформе, между прочим, уже три года. На данный момент Larrabee существует только на бумаге, и даже когда новый графический процессор Intel будет воплощён в кремнии, вряд ли многие программисты решаться “копать целину”. Большинство просто станет использовать API (OpenGL/Direct3D для 3D и OpenCL/Compute Shader для GPGPU).
Впрочем, с аппаратной точки зрения не вызывает сомнений, что Larrabee очень и очень интересный графический процессор. Cell послужил прообразом нескольких важных концепций, которые теперь проявили себя в Larrabee. Но если оглянуться в прошлое, процессор Cell был всё же слишком амбициозен для своего времени, и IBM пришлось пойти на серьёзные компромиссы, чтобы видение процессора было совместимо с технологиями, доступными тогда.
Larrabee против GPU
Как мы уже сказали раньше, Larrabee не похож на обычный GPU вообще за исключением текстурных блоков. Здесь нет ни малейшего следа других фиксированных блоков, которые обычно встречаются у GPU: движка настройки (setup engine), преобразовывающего треугольники в пиксели и интерполирующего различные атрибуты вершин, растрового конвейера (ROP), который записывает пиксели в кадровый буфер, выполняет сглаживание и все необходимые операции смешения. В случае Larrabee все эти операции выполняются напрямую ядрами. Преимущество такого подхода заключается в увеличении гибкости. В случае смешения, например, можно управлять прозрачностью независимо от порядка, в котором отсылаются примитивы, что довольно сложно достижимо у современных GPU. Недостатком можно назвать то, что Intel придётся обеспечивать GPU большей вычислительной мощностью, чем у конкурентов, которые используют выделенные блоки для задач подобного рода, а программируемые блоки концентрируются на шейдерах.
Хотя GPU стали очень гибкими после появления Direct3D, они по-прежнему далеки до гибкости, которую способен обеспечить Larrabee. Одно из основных ограничений GPU, даже при использовании API подобно CUDA, заключается в доступе к памяти. Как и в случае Cell, работа с памятью сильно усложнена, и чтобы получить оптимальную производительность, нужно минимизировать число используемых регистров, а также приходится использовать небольшие участки памяти в несколько килобайт.
Более того, несмотря на гибкость, которую получили современные GPU, их функции остаются, в значительной мере, ориентированными на чистые расчёты. Например, никто даже не думает выполнять операции ввода/вывода на GPU. Напротив, Larrabee способен с этим справиться, то есть Larrabee может напрямую выполнять операции printf или работать с файлами. Кроме того, можно использовать рекурсивные и виртуальные функции, что в случае GPU невозможно.
Конечно, все эти функции даются не бесплатно, и все они неотвратимо влияют на эффективность выполнения программ, так как мы отходим от парадигмы параллельного программирования. Но всё это приемлемо для кода, который не будет использоваться в области, чувствительной к производительности. Возможность выполнения подобного кода без использования CPU открывает ряд интересных возможностей. Например, современные GPU используют компилятор “just-in-time” (JIT) в драйверах, который адаптирует шейдеры к специфическим деталям архитектуры “на лету” во время выполнения задачи. Larrabee не стал исключением из правила, но вместо интеграции данного компилятора с центральным процессором, он работает напрямую на Larrabee.
Ещё одна интересная возможность – код можно отлаживать напрямую на Larrabee, вместе с тем отладка кода CUDA, как правило, невозможна без использования эмуляции на CPU. В подобных случаях CPU эмулирует GPU, но не в точности повторяет его поведение, поэтому могут возникнуть различные ошибки, “выловить” которые не всегда просто.
Larrabee против себя?
На первый взгляд, Larrabee кажется победившим при сравнении с прямыми конкурентами. Процессор более параллельный, чем Cell, более гибкий, чем GPU, то есть, вроде бы, лучшего желать не приходится. Но в реальности не всё так гладко. Продукт, существующий только на бумаге, всегда обладает всеми нужными качествами без недостатков. Долгое время Itanium казался будущим процессоров, прежде чем его тяжкий промах не стал очевидным: если не очень легко динамически реорганизовать инструкции программы на процессоре, то столь же тяжело сделать это статически в компиляторе.
Поэтому не стоит слепо встречать объявление каждой новой технологии. В некоторых форумах на каждый вопрос, касающийся рендеринга или каких-либо алгоритмов, кто-то всё равно упомянет Larrabee в качестве идеального решения, что на данный момент преждевременно. Larrabee не решит всех проблем рендеринга 3D в реальном времени, хотя и может привести к заметному прогрессу.
Larrabee, вне сомнения, встречают очень положительно, поэтому Intel необходимо быть очень осторожной, что не получить обратный эффект, если первое поколение продуктов не будет соответствовать ожиданиям (синдром Merced).
Через несколько дней мы опубликуем статью, касающуюся программной стороны Larrabee, так что оставайтесь на связи.