Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
УМК 2 Лекционный курс.doc
Скачиваний:
12
Добавлен:
16.08.2019
Размер:
3.92 Mб
Скачать

9.3.Средства высокоуровневого программирования gpu шейдерной модели 4.0

9.3.1.Совместимость с шейдерной моделью 3.0

Как мы уже отметили выше, GPU SM4 могут исполнять программы, написанные для GPU SM3, причём в эти программы не потребуется вносить никаких изменений. Такими средствами программирования, как язык HLSL, библиотеки DirectX, XNA и OpenGL по-прежнему можно пользоваться для написания новых программ для GPU SM4.

Графические библиотеки, подобные DirectX и OpenGL, позво­ляют работать с GPU всех известных производителей, так что програм­мы, напи­сан­ные на основе таких библиотек, будут исполняться независимо от выбора GPU, и даже на GPU SM3, если не используют специфических для 4-й модели возможностей.

С другой стороны, библиотеки типа DirectX, будучи ориенти­рован­ными на обработку графики, не всегда удоб­ны для написания программ фи­зико-математического моделирования и других, не связанных с графикой. Средствами графических библиотек программы обычно не удаётся макси­мально оптимизировать.

Шейдерная модель 4.0 разрабатывалась уже с учётом того, что новые процессоры будут широко использоваться как параллельные вычислитель­ные системы общего назначения. Соответственно, разработчиками этих гра­фических процессоров (NVIDIA, AMD/ATI) созданы новые высоко­уровне­вые средства программирования таких процессоров для максимального использования их возможностей. Ниже мы кратко рассмотрим программиро­вание GPU в рамках программно-аппаратной платформы CUDA, разрабаты­ваемой компанией NVIDIA.

9.3.2.Специальные средства программирования gpu sm4. Cuda

Компания NVIDIA весь свой комплекс современных программных и аппаратных решений для графических процессоров объединяет общей аббре­виатурой CUDA - Compute Unified Device Architecture, что означает Архи­тектура Объединённого Вычислительного Устройства. Из расшифровки оче­видна ориентация NVIDIA на производство процессоров, эффективно испол­няющих как поточно-параллельные вычисления, так и сложные алго­ритмы обработки информации.

В рамках этого комплекса разработана система программирования CUDA (современная версия - NVIDIA CUDA 2.0), основанная на расширении языка C добавлением в него новых типов данных и процедур для управления графическим процессором. CUDA включает в себя возможности как языков, предназ­наченных для написания вычислительного ядра (HLSL), так и графических библиотек (DirectX, XNA, OpenGL), обеспечивающих взаимо­действие между центральным и графическим процессорами. В том числе:

 операции выделения памяти GPU для внесения данных, операции записи данных в память и удаления из памяти (выполняются центральным процессором);

 операторы описания типов переменных, используемых в програм­ме;

 Операторы и функции для математических вычислений на GPU;

 средства для запуска параллельных расчётов на исполнение.

Практически, программирование на CUDA сводится к использованию новых операций, процедур и типов данных в «обычных» программах на языках C и C++. Для этого нужно иметь специальные библиотеки CUDA, разработанные компанией NVIDIA. Эти библиотеки распространяются сво­бодно и бесплатно доступны в Интер­нете.

При написании процедур (функций) на CUDA необходимо указывать, должны они исполняться графическим или центральным процессором. Для этого используются следующие спецификаторы

 __global__ - функция, вызываемая центральным процессором, но исполняемая на графическом процессоре, то есть - вычислительное ядро;

 __device__ - функция, исполняемая на GPU b вызываемая только другими функциями, исполняемыми на GPU, то есть – из вычислительного ядра. Не может вызываться центральным процессором;

 __host__ - функция, вызываемая и исполняемая центральным про­цессором, без использования GPU;

 __host__ and __device__ - функция, которая может исполняться либо на центральном, либо на графическом процессорах (применяется, например, при «перегрузке» операторов).