Compute Shader или вычислительный шэйдер
Компании Nvidia и AMD вот уже несколько лет выпускают графические процессоры общего назначения, также известные как GP-GPU (General purpose - Graphics Processing Unit). Так уже 8-ая серия графических процессоров от Nvidia в действительности обладала (и обладает!) аппаратными возможностями, позволяющими использовать мощность этих графических процессоров для решения общих компьютерных задач, т.е. для выступления в качестве “двигателей” общих компьютерных вычислений. Преимущества здесь очевидны – от использования высокопараллельных компьютерных “двигателей”, являющихся частью современных графических процессоров, вполне можно получить некоторую дополнительную производительность. Именно поэтому работы в этом направлении ведутся уже сейчас. Так, компания Apple уже работает с некоей группой Khronos Group над так называемым проектом OpenCL, который основывается на OpenGL и по своей сути является методом по использованию графических процессоров в общих компьютерных целях. У компании AMD есть аналогичный проект Stream SDK, поддерживающий эти возможности на оборудовании серии Radeon HD. Не отстает от всех и Nvidia, со своей технологией CUDA, для которой уже даже стали появляться приложения.
Большой вклад в эту область должна сделать и будущая графическая технология DirectX 11, в которую будет внедрен так называемый Compute Shader или попросту вычислительный шэйдер. Последний будет использовать ресурсы графического процессора для выполнения пост-процессинговой рутинной работы, типа эффектов размытия. Однако, для реализации подобных возможностей, требуется введение в высокоуровневый язык DirectX HLSL дополнительного синтаксиса и конструкций, впрочем, и результат от этой работы будет положительным – пользователям будет дана возможность получения из графического конвейера сгенерированных структур данных, которые большим образом будут подходить для общих компьютерных приложений.
В конечном же итоге появление DirectX 11 расширит уже существующий набор инструментов по поддержке общих вычислений на GPU, который в результате будет состоять из:
- Nvidia проекта CUDA для операционных систем Windows, MacOS, и Linux, предназначенного для графических процессоров Nvidia GPU и CPU процессоров Intel (и возможно даже AMD);
- AMD проекта Stream SDK для операционных систем Windows и Linux, предназначенного для графических процессоров AMD GPU и CPU процессоров от этой же компании AMD;
- Проекта OpenCL для операционной системы MacOS (и возможно других ОС) и предназначенного как для графических процессоров от Nvidia, так и от AMD;
- Вычислительного шэйдера DirectX 11 для операционных систем Windows, предназначенного для графических процессоров Nvidia и ATI GPU и, предположительно, для CPU процессоров Intel и AMD.
Таким образом, в отличие от проектов CUDA и Stream SDK, DirectX 11 позволит унифицировать в Windows вычисления на GP-GPU-оборудовании различных производителей. Ведь API, которые будут для этого использоваться, предположительно будут одними и теми же.
Многопотоковость (multithreading)
Многопотоковость в настоящее время является довольно горячей и популярной темой. Этот термин уже прочно вошел в повседневную компьютерную жизнь, ведь все современные процессоры являются как минимум двух-ядерными, а такие компании-разработчики, как Intel и AMD, уже анонсировали и свои четырехядерные разработки (как, например Intel Q8300).
То же самое можно сказать и о производителях видеокарт – и AMD и Nvidia уже обладают много-ядерными разработками и уже встраивают поддержку многопотоковости в свои драйвера. Тем не менее, большинство версий DirectX все еще являются однопотоковыми, впрочем, в DirectX 11 этот недостаток должен быть устранен. В частности будущая многопотоковость должна затронуть рендеринг, который в дальнейшем сможет распадаться на множество потоков, вроде прорисовки и состояния. Кроме того, поддержка многопотоковости должна будет включать асинхронную загрузку ресурсов, которая в действительности может происходить во время выполнения потоков рендеринга.
Для облегчения работы всего этого, устройства DirectX 11 будут “разбиваться” на три составляющие части - на непосредственно устройство, на ближайшее окружение и на отложенные интерфейсы окружения. Причем ближайшим окружением будет являться текущее устройство, использующееся для состояния и прорисовки, тем временем как отложенными окружениями будут по-потоковые окружения устройства, предназначенные для будущего рендеринга. Заметьте, что рендеринг в действительности также будет отложенным – это не тоже самое, что и прорисовка в так называемый back buffer и зеркальное отображение. Это скорее удержание каждым отложенным окружением списка дисплеев (вызовов прорисовки) готовым к рендерингу до подходящего момента.
Динамическое подключение шэйдера
В настоящее время, при необходимости вызова множества шэйдеров создается огромный, так называемый “uber” шэйдер, который содержит все необходимое для вызова какого угодно индивидуального шэйдера в конкретной ситуации. Однако такой шэйдер обладает одним значительным недостатком – трудностью своей отладки, как, впрочем, и не высокой эффективностью использования аппаратных ресурсов. Поэтому компания Microsoft хочет внедрить в язык HLSL такие объектно-ориентированные возможности, как интерфейсы и классы, которые дадут программистам возможность создания шэйдеров с поведением подпрограмм и загрузкой по мере необходимости.
Улучшенное сжатие текстур
Используемое в настоящее время в DirectX текстурное сжатие уже показывает свой совсем не маленький возраст. Часто изображения, получаемые в результате распаковывания и отображения множества текстур, кажутся “блочными”, даже если текстуры сами по себе высокого разрешения. Кроме того, в настоящее время в DirectX нет никакой поддержки сжатия текстур с высоким динамическим диапазоном.
Поэтому, в DirectX 11 будут внедрены два новых формата сжатия текстур - BC6 (иногда называемый BC6H) и BC7. Первый будет поддерживать HDR-текстуры (текстуры с высоким динамическим диапазоном) с потерей данных в отношении 6:1 (16 бит на канал) и будет обеспечивать высокое визуальное качество (хотя и совсем не без потерь). Второй же будет работать с LDR-форматами (текстуры с низким динамическим диапазоном) и может даже включать альфу. Он будет обеспечивать сжатие 3:1 для RBG или 4:1 для RGB+альфа и также обеспечивать очень высокое визуальное качество.
Что же касается будущего оборудования DirectX 11, то его аппаратная процедура распаковывания текстур должна будет соответствовать спецификациям DX11, чего пока нет ни в DX10, ни в более низких версиях графической технологии.
Поддержка оборудования DirectX 10
Почти все возможности новой графической технологии DirectX 11, за исключением аппаратной тесселяции, будут поддерживаться оборудованием DX10. Однако стоит учесть, что игры и приложения на оборудовании DX10 все же будут работать в режиме DX10. Впрочем, в отличие от DX10, которая работает только на DX10-оборудовании, некоторые возможности DX11 будут работать и на оборудовании для DX10.
Так, в частности, “будет работать” многопотоковость, хотя отложенные окружения будут реализовываться программно на уровне API, а не аппаратно, как это будет сделано на оборудовании DX11. Также будут работать и добавленные объектно-ориентированные возможности, хотя об их эффективности можно будет поспорить. Что же касается новых текстурных форматов сжатия, то их вполне можно реализовать и на драйверном уровне, даже если они будут медленнее, чем аппаратные.
DirectX 11: Раньше, чем вы думаете
Если окончательную финальную версию DirectX11 мы увидим только с первой версией будущей операционной системы Windows 7, то первые обзорные версии ее API Microsoft собирается поставить уже в ноябре 2008 года. В это же время мы получим более полное представление о том, какие же возможности будет содержать новая графическая технология. Финальная же их картина появится только с выходом Windows 7, что по разным данным должно произойти или в конце 2009 или в начале 2010 года.
Комментарии (0)