Модель CUDA
Рассмотрение спецификаторов функций в CUDA. Высокоуровневая библиотека управления GPU. Особенности функционирования текстурной памяти CudaArray. Аспекты создания буферного объекта в OpenGL. Рассмотрение пространства состояний, типов и переменных.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | реферат |
Язык | русский |
Дата добавления | 26.03.2015 |
Размер файла | 85,4 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
- ссылки на текстуры, пробники, или поверхности с помощью текстуры и поверхности инструкций загрузки / сохранения (tex, suld, sust, sured).
- получение значения именованного члена по инструкции запроса (txq, suq)
- cоздание ссылки на непрозрачные переменные с помощью MOV, например, mov.u64 reg, opaque_var;.
- непрозрачные переменные не могут появиться в инициализаторах, например, для инициализации указателя на непрозрачной переменной.
Косвенный доступ к текстурам поддерживается только в едином режиме текстур. Три встроенных типа - это .texref, .samplerref и .surfref. Для работы с текстурами и шаблонами PTX имеет два режима работы. В едином режиме, текстурная и шаблонная информация доступна через одну комманду .texref.
В автономном режиме, текстурная и шаблонная информации имеют свои собственные источники, что позволяет им быть определенными отдельно и в сочетании в зависимости от использования в программе. В автономном режиме, поля типа .texref, которые описывают свойства шаблона игнорируются, так как эти свойства определяются .samplerref - переменными.
Таблица 9 и Таблица 10 представляют перечень членов каждого типа для унифицированных и независимых текстурных модов. Эти члены и их значения имеют точные сопоставления методов и значений, определенных в текстурах класса HW, а также выставленных значений через API.
Таблица 9 Непрозрачный тип поля в едином режиме работы
Член |
Значения .texref |
Значения .surfref |
|
width |
в элементах |
||
height |
в элементах |
||
depth |
в элементах |
||
channel_data_type |
enum тип, соответствующий языку API |
||
channel_order |
enum тип, соответствующий языку API |
||
normalized_coords |
0, 1 |
N/A |
|
filter_mode |
nearest, linear |
N/A |
|
addr_mode_0, addr_mode_1, addr_mode_2 |
wrap,mirror, clamp_ogl, clamp_to_edge, clamp_to_border |
N/A |
|
array_size |
как номер в текстурах текстурного массива |
as number of surfaces in a surface array |
|
num_mipmap_levels |
как номер уровня в массиве MIP-типа |
N/A |
|
num_samples |
как номер шаблона в мультишаблонной текстуре |
N/A |
|
memory_layout |
N/A |
1 for linear memory layout; 0 otherwise |
Таблица 10 Непрозрачный тип поля в раздельном режиме работы
Member |
.samplerref values |
.texref values |
.surfref values |
|
width |
N/A |
в элементах |
||
height |
N/A |
в элементах |
||
depth |
N/A |
в элементах |
||
channel_data_type |
N/A |
enum тип, соответствующий языку API |
||
channel_order |
N/A |
enum тип, соответствующий языку API |
||
normalized_coords |
N/A |
0, 1 |
N/A |
|
force_unnormalized_coords |
0, 1 |
N/A |
N/A |
|
filter_mode |
nearest, linear |
ignored |
N/A |
|
addr_mode_0, addr_mode_1, addr_mode_2 |
wrap,mirror, clamp_ogl, clamp_to_edge, clamp_to_border |
N/A |
||
array_size |
N/A |
как номер тектуры в массиве текстур |
как номер шаблона в массиве шаблонов |
|
num_mipmap_levels |
N/A |
как номер уровня в массиве MIP-типа |
N/A |
|
num_samples |
N/A |
как номер шаблона в мультишаблонной текстуре |
N/A |
|
memory_layout |
N/A |
N/A |
1 for linear memory layout; 0 otherwise |
Тип channel_data_type и channel_order
Channel_data_type и channel_order поля имеют типы перечисления соответствующие исходному языку API. В настоящее время, OpenCL является только язык программирования, который определяет эти поля. В таблице 12 и таблице 11 показаны перечисления значений, определенные в OpenCL версии 1.0 для типа данных канала и порядка каналов.
CL_SNORM_INT8 |
0x10D0 |
|
CL_SNORM_INT16 |
0x10D1 |
|
CL_UNORM_INT8 |
0x10D2 |
|
CL_UNORM_INT16 |
0x10D3 |
|
CL_UNORM_SHORT_565 |
0x10D4 |
|
CL_UNORM_SHORT_555 |
0x10D5 |
|
CL_UNORM_INT_101010 |
0x10D6 |
|
CL_SIGNED_INT8 |
0x10D7 |
|
CL_SIGNED_INT16 |
0x10D8 |
|
CL_SIGNED_INT32 |
0x10D9 |
|
CL_UNSIGNED_INT8 |
0x10DA |
|
CL_UNSIGNED_INT16 |
0x10DB |
|
CL_UNSIGNED_INT32 |
0x10DC |
|
CL_HALF_FLOAT |
0x10DD |
|
CL_FLOAT |
0x10DE |
Таблица 12 Типы каналов комманд OpenCL
CL_R |
0x10B0 |
|
CL_A |
0x10B1 |
|
CL_RG |
0x10B2 |
|
CL_RA |
0x10B3 |
|
CL_RGB |
0x10B4 |
|
CL_RGBA |
0x10B5 |
|
CL_BGRA |
0x10B6 |
|
CL_ARGB |
0x10B7 |
|
CL_INTENSITY |
0x10B8 |
|
CL_LUMINANCE |
0x10B9 |
22. Переменные
В PTX, объявление переменной описывает как тип переменной и ее пространство состояний. В дополнение к базовым типам, PTX поддерживает типы для простых совокупных объектов, таких как вектора и массивы.
Объявления переменных
Все для хранения данных задается с объявлениями переменных. Каждая переменная должна находиться в одном из пространств состояний, перечисленных в предыдущем разделе.
А имена переменных - декларации пространства, в котором переменная находится, его тип и размер, его имя, по желанию размер массива, по желанию инициализатор, и дополнительный фиксированный адрес переменной.
Предикатные переменные могут быть объявлены только в реестре пространства состояний.
Examples
.global .u32 loc;
.reg .s32 i;
.const .f32 bias[] = {-1.0, 1.0};
.global .u8 bg[4] = {0, 0, 0, 0};
.reg .v4 .f32 accel;
.reg .pred p, q, r;
23. Векторы
Поддерживаются векторные типы ограниченной длины. Векторы длиной 2 и 4 любого непредикатного фундаментального типа может быть объявлен с помощью префикса типа с .х2 или .v4. Векторы должны быть основаны на фундаментальном типе, и они могут находиться в регистре места. Вектор не может превышать 128-бит в длину; например, .v4.f64 не допускается. Трехмерный векторы может быть обработан с помощью .v4 вектор, в котором четвертый элемент обеспечивает заполнение. Это общий случай для трехмерных сеток, текстур и т.д.
Examples
.global .v4 .f32 V; // a length-4 vector of floats
.shared .v2 .u16 uv; // a length-2 vector of unsigned ints
.global .v4 .b8 v; // a length-4 vector of bytes
24. Объявление массива
Объявление массива небходимо для того, чтобы позволить программисту выделить резервное пространство. Чтобы объявить массив: имя переменной следует из одномерных объявлений, подобных объявлениям фиксированного размера массива в C, размер каждого измерения постоянное выражение.
Examples
.local .u16 kernel[19][19];
.shared .u8 mailbox[128];
25. Выравнивание
Выравнивание хранения для всех адресуемых переменных может быть указано в объявлении переменной. Выравнивание задается с помощью спецификатора дополнительного подсчета .alignbyte сразу после пространства состояний спецификатора.
Переменные будут выровнены по адресу, который является целым числом, кратным байту-количеству. Значение выравнивания байт-счетчик должен быть степенью двойки. Для массивов, выравнивание определяет выравнивание адресов для начального адреса всего массива, а не для отдельных элементов.
Выравнивание по умолчанию для скалярных и матричных переменных кратно размеру базового типа. Выравнивание по умолчанию для векторных переменных является кратным общему размеру вектора.
Examples
// allocate array at 4-byte aligned address. Elements are bytes.
.const .align 4 .b8 bar[8] = {0,0,0,0,2,0,0,0};
26. Параметризованные имена переменных
PTX поддерживает виртуальные регистры, что весьма характерно для компилятора, интерфейс для создания большого количества имен регистров. Вместо того чтобы требовать четкого указания всякого имени, PTX поддерживает синтаксис для создания набора переменных, имеющих общую строку префикса добавляется с целыми суффиксов.
Например, предположим, что программа использует большое количество, скажем, сто, из .b32 переменных, названных% r0,% r1, ...,% R99. Эти 100 регистровых переменных могут быть объявлены следующим образом:
.reg .b32 %r<100>; // declare %r0, %r1, ..., %r99
27. Атрибуты переменных
Переменные могут быть объявлены с дополнительной директивой .attribute, которая позволяет указать специальные атрибуты переменных. Ключевое слово .attribute следует перед спецификацией атрибута в скобках. Несколько атрибутов разделены запятой.
Поддерживаются следующие атрибуты:
.managed - атрибут указывает, что переменная будет выделена в единой виртуальной среде памяти, где хозяин и другие устройства в системе может ссылаться на переменную непосредственно. Этот атрибут может быть использован только с переменными в .global пространстве состояний.PTX ISA
Examples
.global .attribute(.managed) .s32 g;
.global .attribute(.managed) .u64 x;
28. Операнды команд
Тип данных операнда
Все операнды в инструкции - известный тип из своих деклараций. Каждый тип операнда должен быть совместим с типом определяемого шаблоном инструкции и типа команды. Там нет автоматического преобразования между типами.
Тип бит совместим с каждым типом, имеющий тот же размер. Целые типы общего размера совместимы друг с другом
Операнды - источники
Исходные операнды обозначаются в описаниях команд именами a, b и с. Операнды для инструкций ALU должны быть переменными .reg, объявленными в регистровом пространстве состояний. Для большинства операций, размеры операндов должны быть совместимыми.
cvt (конвертировать) команда проводится над различными типами операндов, так как его работа заключается в преобразовании практически из любого типа данных в любой другой тип данных (и размер).
ld, st, mov, и cvt - инструкции, чтобы скопировать данные из одного места в другое. Инструкциb ld и st перемещают данные из / в адресные пространства состояний в / из регистров. Инструкция mov копирует Данные между регистрами.
Большинство инструкций имеет дополнительный защитный предикат, который контролирует условное выполнение. Предикатные операнды обозначаются именами p, q, r, s.
Операнды назначения
Инструкции PTX, которые сохраняют результат в поле, обозначаются именем d (для назначения) в описаниях команд. Операнд назначения является скалярной или векторной переменной в регистровом пространстве состояний.
Адреса в качестве операндов
Адресная арифметика выполняется с использованием целочисленной арифметики и логических команд. Примеры включают арифметику указателей и указатели сравнения. Все адреса и адресные расчёты на основе байта; нет поддержки C-стиля арифметики указателей.
Инструкция mov может быть использован для перемещения адрес переменной в указатель. Адрес - смещения в пространстве состояний, в котором объявляется переменная. Загрузки и сохранения операции перемещения данных между регистрами и местах - в адресных пространствах состояний. Синтаксис такой же, что используется во многих языках ассамблера.
Адрес выражения включают имена переменных, адресные регистры, регистр адреса плюс смещение байта, а также немедленные адресные выражения, которые имеют значения во время компиляции к постоянному адресу.
Вот несколько примеров:
.shared .u16 x;
.reg .u16 r0;
.global .v4 .f32 V;
.reg .v4 .f32 W;
.const .s32 tbl[256];
.reg .b32 p;
.reg .s32 q;
ld.shared.u16 r0,[x];
ld.global.v4.f32 W, [V];
ld.const.s32 q, [tbl+12];
mov.u32 p, tbl;
29. Массивы в качестве операндов
Массивы всех типов могут быть объявлены и идентификатор становится адресом постоянной в пространстве, где объявлен массив. Размер массива является постоянным в программе.
Элементы массива можно получить с помощью рассчитанного адреса байта или по индексу в массиве с использованием квадратных скобок обозначения. Выражение в квадратных скобках является либо постоянным числом, регистровой переменной или просто регистр с постоянным смещением выражения, где смещение является постоянным выражением, которое прибавляется или вычитается из регистровой переменной.
Examples:
ld.global.u32 s, a[0];
ld.global.u32 s, a[N-1];
mov.u32 s, a[1]; // move address of a[1] into s
Вектор как операнд
Операнды вектора поддерживают ограниченное число команд: mov, ld, st, and tex.
Векторы могут быть также аргументами, поддерживаемыми в функциях.
Элементы вектора могут быть выделены при помощи суффиксов .x, .y, .z and .w, или как в цветовых полях .r, .g, .b and .a.
Список в скобках используется для того, чтобы распределить вектор.
.reg .v4 .f32 V;
.reg .f32 a, b, c, d;
mov.v4.f32 {a,b,c,d}, V;
Векторы могут быть использованы для реализации загрузки и хранения, которые могут улучшить производительность памяти.
В регистрах операций загрузки / сохранения может быть вектор или скобки, заключающие список типизированных скаляров.
Examples:
ld.global.v4.f32 {a,b,c,d}, [addr+offset];
ld.global.v2.u32 V2, [addr+offset2];
Элементы в фигурных скобках - вектора, скажем, {Ra, Rb, Rc, Rd}, соответствуют извлеченным элементам следующим образом:
Ra = V.x = V.r
Rb = V.y = V.g
Rc = V.z = V.b
Rd = V.w = V.a
30. Метки и имена функций в качестве операндов
Этикетки и имена функций могут быть использованы только во вложенных и вызываемых инструкциях и в инструкциях перемещения, чтобы получить адрес метки или функции в регистр для того, чтобы вызвать.
Функциональные объявления и определения
В PTX, функции декларируются и определяются с помощью .func директивы. Объявление функции определяет дополнительный список возвращаемых параметров, имя функции, необязательный список входных параметров; вместе это задает интерфейс функции или прототип. Определение функции определяется как интерфейс и тело функции. Функция должна быть объявлена или определена до того, как называется.
Простейшая функция не имеет параметров или возвращаемых значений, и представлена в PTX следующим образом:
Example
.func foo
{
...
ret;
}
...
call foo;
...
Скалярные и векторные базового типа входные и возвращаемые параметры могут быть представлены просто как регистровые переменные. По вызову аргументы могут быть зарегистрированы как переменные и константы, а возвращаемые значения могут быть помещены непосредственно в регистровые переменные. Аргументы и возвращаемые переменные, должны иметь тип и размер, которые соответствуют формальным параметрам.
Example
.func (.reg .u32 %res) inc_ptr ( .reg .u32 %ptr, .reg .u32 %inc )
{
add.u32 %res, %ptr, %inc;
ret;
}
...
call (%r1), inc_ptr, (%r1,4);
...
31. Набор комманд
Инструкции PTX, как правило, имеют от нуля до четырех операндов плюс, по желанию, защитный предикат после символа @ слева от opcode:
- @p opcode;
- @p opcode a;
- @p opcode d, a;
- @p opcode d, a, b;
- @p opcode d, a, b, c;
Для инструкций, которые создают результирующее значение, d операнд является операндом назначения, a, b, c являются исходными операндами.
Инструкция setp пишет два регистра назначения. Мы используем символ | для разделения нескольких регистров назначения.
setp.lt.s32 p|q, a, b; // p = (a < b); q = !(a < b);
Для некоторых инструкций операнд назначения является обязательным. Битоприемник операнд обозначается символом подчеркивания (_) может быть использован вместо регистра назначения.
Предикатное выполнение
В PTX, предикатные регистры являются виртуальными и имеют .pred как спецификатор типа. Так, предикат регистры могут быть объявлены как .reg .pred p, q, r;
Все инструкции имеют дополнительный защитный предикат, который управляет условным выполнением инструкции.Синтаксисом, указывающим условное выполнение, является префикс - инструкция с @ {!} p, где р - предикатная переменная, возможно отрицательная. Инструкции без предикат выполняются безоговорочно.
Предикаты обычно устанавливается в результате сравнения, выполненного setp- инструкции.
В качестве примера, рассмотрим код на высоком уровне:
if (i < n)
j = j + 1;
Который может быть записан на PTX как:
setp.lt.s32 p, i, n; // p = (i < n)
@p add.s32 j, j, 1; // if i < n, add 1 to j
Сравнения
Конец формы
Таблица 17 Операции сравнения для целочисленного и битового типов
Значение |
Знаковая операция |
Беззнаковая операция |
Битовая операция |
|
a == b |
eq |
eq |
eq |
|
a != b |
ne |
ne |
ne |
|
a < b |
lt |
lo |
n/a |
|
a <= b |
le |
ls |
n/a |
|
a > b |
gt |
hi |
n/a |
|
a >= b |
ge |
hs |
n/a |
Таблица 18 Операции сравнения для чисел с плавающей точкой
Значение |
Оператор с плавающей точкой |
|
a == b && !isNaN(a) && !isNaN(b) |
eq |
|
a != b && !isNaN(a) && !isNaN(b) |
ne |
|
a < b && !isNaN(a) && !isNaN(b) |
lt |
|
a <= b && !isNaN(a) && !isNaN(b) |
le |
|
a > b && !isNaN(a) && !isNaN(b) |
gt |
|
a >= b && !isNaN(a) && !isNaN(b) |
ge |
Таблица 19 Операции сравнения для чисел с плавающей точкой с применением NaN
Значение |
Оператор |
|
a == b || isNaN(a) || isNaN(b) |
equ |
|
a != b || isNaN(a) || isNaN(b) |
neu |
|
a < b || isNaN(a) || isNaN(b) |
ltu |
|
a <= b || isNaN(a) || isNaN(b) |
leu |
|
a > b || isNaN(a) || isNaN(b) |
gtu |
|
a >= b || isNaN(a) || isNaN(b) |
geu |
Управление предикатами
Предикатные значения могут быть вычислены и управляемы, используя следующие инструкции: and, or, xor, not, и mov.
Там нет прямого преобразования между предикатами и целочисленными значениями, и никакого прямого способа загрузки или хранения предикатных значений регистров. Тем не менее, setp может быть использован для создания предикат из целого числа, и выбор (selp -инструкция на основе предиката) может быть использован для создания целочисленного значение в зависимости от значения предиката; например:
selp.u32 %r1,1,0,%p; // convert predicate to 32-bit value
Арифметические операции для целых чисел
Операция |
Значение |
|
add |
Складывает два значения |
|
sub |
Вычитает два значения |
|
mul |
Умножает два значения |
|
mad |
Умножает два значения, извлекает высокую или низкую половину результата, а также добавляет третье значение. |
|
mul24 |
Вычисляет произведение двух 24-битных целочисленных значений, проведенных в 32-разрядных регистрах источника и вернуть либо высокие или низкие 32-бит 48-разрядного результата. |
|
mad24 |
Вычисляет произведение двух 24-битных целочисленных значений, проведенных в 32-разрядных регистрах источников, а также добавить третье 32-битное значение или к высоким или к низким 32-битам 48-разрядного результата. Вернуться либо высокие или низкие 32-бит 48-разрядного результата. |
|
sad |
Добавляет абсолютное значение AB-С и записывает полученное значение в D |
|
div |
Делит одно значение на другое |
|
rem |
Находит остаток от деления одного числа на другое |
|
abs |
d = |a|; |
|
neg |
d = -a; |
|
min |
d = (a < b) ? a : b; |
|
max |
d = (a > b) ? a : b; |
|
popc |
Подсчитывает количество единичных битов и помещает в результат в 32-разрядный регистр назначения |
|
clz |
Подсчитывает количество ведущих нулей, начиная с наиболее значимого бита и поместить результат в 32-разрядный регистр назначения |
|
bfind |
Найти номер самого значительного бита из беззнаковых битов в A и поместите результат в D. Для целых чисел без знака, bfind возвращает битовую позицию самого значительного 1. Для целых чисел, bfind возвращает битовую позицию самого значительного 0 для отрицательных входов и самым значительным 1 для неотрицательных входов. |
|
brev |
Выполняет побитовый разворот ввода |
|
bfe |
Извлечение битового поля из A и поместить нуль или знаковый результат в D. Источник B дает положение отправного бита битового поля и C дает битовую длину поля в битах. |
|
bfi |
Совместите и вставьте битное поле из А в В, и поместить результат в F. C дает исходное положение бита для вставки, и источник D дает битовую длину поля в битах. |
Арифметические операции для чисел с пласающей точкой
Операция |
Значение |
|
testp |
testp проверяет общие свойства чисел с плавающей точкой и возвращает значение предиката 1, если это правда и 0, если False. testp.finite Правда, если вход не бесконечен или NaN testp.infinite Правда, если вход положителен или отрицателен бесконечен testp.number Правда, если вход не NaN testp.notanumber Правда, если вход NaN testp.normal Правда, если вход обычный номер (не NaN, не бесконечность) testp.subnormal Правда, если вход субнормальная номер (не NaN, не бесконечность) |
|
copysign |
Скопируйте знаковый бит в значении B, и возвращает результат в виде D. |
|
add |
Складывает два значения |
|
sub |
Вычитает два значения |
|
mul |
Умножает два значения |
|
fma |
Выполнение конденсированное умножения-сложения без потери точности в промежуточном продукте и того. |
|
mad |
Умножение два значения и добавляет третий, а затем записывает полученное значение в регистр назначения. |
|
div |
Делит одно значение на другое |
|
abs |
d = |a|; |
|
neg |
d = -a; |
|
min |
d = (a < b) ? a : b; |
|
max |
d = (a > b) ? a : b; |
|
rcp |
Выводит обратное значение числа |
|
sqrt |
Вычисляет значение квадратного корня |
|
rsqrt |
Выводит обратное значение квадратного корня числа |
|
sin |
Выводит значение синуса числа |
|
cos |
Выводит значение косинуса числа |
|
lg2 |
Выводит значение двоичного логарифма числа |
|
ex2 |
Выводит степень двойки |
Операции сравнения
Операция |
Значение |
|
set |
Сравнивает два числовых значения и, возможно, сочетает в себе результат с другим значением предиката, применяя логический оператор. Если этот результат верен, 1.0f написано с плавающей точкой типов назначения, а 0xffffffff написана для целочисленных типов назначения. В противном случае, 0x00000000 написано. |
|
setp |
Сравнивает два значения и сочетает в себе результат с другим значением предиката, применяя логический оператор. Это результат записывается в первый операнд назначения.Связанное значение, рассчитанное с помощью дополнения к результатам сравнения записывается во второй операнд назначения. |
|
selp |
Условный оператор |
|
slct |
Условный оператор. Если с ? 0, A хранится в D, иначе B хранится в D. |
Операции преобразования и движения данных
Операция |
Значение |
|
mov |
Запись в регистр D значения А. Операнд может быть регистром, специальным регистром, содержащая дополнительный смещенный в адресное пространство памяти, этикетки, или имя функции. Для переменных, объявленных в .const, .global, .local и .shared, mov помещает адрес переменной (например, адрес переменной в ее пространстве состояний) в регистр назначения.Общий адрес переменной в константном, глобальном, локальном или общем пространстве состояний может быть получен сначала взятием адреса в пространстве состояний с mov, а затем превращением его в универсальный адрес с помощью cvta инструкции; с другой стороны, общий адрес переменной, объявленной в константном, глобальном, локальном или общем пространстве состояний быть взяты непосредственно с помощью cvta инструкции. |
|
shfl |
Обмен регистрами данных между нитями |
|
prmt |
Выбирает четыре произвольных байта из двух 32-разрядных регистров, и собрать их в 32-разрядный регистр назначения. |
|
ld |
Загружает регистровые переменные D от места указанного адреса операнда источника А в указанном пространстве состояний. Если состояние пространства не дается, выполнить загрузку, используя общую адресацию |
|
ldu |
Загружает данные только для чтения с адреса, который является общим для всех нитей по основе |
|
st |
Сохраняет регистровую переменную в переменную адресного пространства состояний. |
|
prefetch, prefetchu |
Выводит строку, содержащую общий адрес на определенном уровне иерархии памяти, в указанном пространстве состояний. |
|
isspacep |
Определяет, соответствует ли адрес данному пространству состояний |
|
cvta |
Преобразование адреса из константного, глобального, локального, или общего пространства состояния общим, или наоборот. |
|
cvt |
Преобразует типы |
Операции для работы с текстурами
- Статическая инициализация текстурных и шаблонных дескрипторов
- Модуль-сфера, а также записи зарезервированных текстурных и шаблонных дескрипторов.
- Возможность запрашивать поля внутри текстуры и шаблонных дескрипторов.
Режимы текстурирования
Для работы с текстурами и шаблонами PTX имеет два режима работы. В едином режиме, информация о текстуре и шаблоне доступна через однин обработчик .texref. В автономном режиме, информация о текстуре и шаблоне имеют свои собственные обработчики, что позволяет им быть определенными отдельно и в сочетании. Преимущество единого режима в том, что поддерживает 128 шаблонов на ядро, с тем ограничением, что они соответствуют 1-к-1 с 128 возможными текстурами на ядро. Преимущество автономного режима в том, что текстуры и шаблоны могут быть скомбинированы, однако количество шаблонов значительно ограничена до 16 на ядро.
Режим текстурирования выбирается с помощью .target с опцией texmode_unified и texmode_independent. Модуль PTX может объявить только один режим текстурирования. По умолчанию предполагается использовать единый режим.
32. Мипмапы
Мипмап последовательность текстур, каждая из которых представляет собой прогрессивно меньше представление разрешение и того же изображения. Высота и ширина каждого изображения, или уровень детализации (LOD), в MIPMAP является мощностью в два раза меньшей, чем в предыдущем уровне. Мипмапов используются в графических приложениях для повышения скорости рендеринга и уменьшить артефакты сглаживания.
Операция |
Значение |
|
tex |
Выполняет поиск тектурной памяти. tex.{1D,2D,3D} Эта функция загружает данные из текстуры c именем в операнде А в точке с координатами, заданными операндом В в конечном операнде D. Операнд C является скалярным или одиночным кортежем 1D текстур; вектором из двух элементов для 2D текстур; и вектором из четырех элементов для 3D текстур, где четвертый элемент игнорируется. tex.{a1d,a2d} Далее следует выбор текстуры из массива. Инструкция сначала выбирает текстуру из массива текстур названного операнда с помощью индекса. Инструкция загружает данные из выбранной текстуры в точке с координатами, заданными остальными элементами операнда tex.cube Эта функция загружает данные из cubemap текстуры в операндом А в точке с координатами, заданных операндом C в конечном D. Cubemap - текстуры специальные двумерные слоистые текстуры, состоящие из шести слоев, которые представляют граней куба. Все слои в cubemap одного и того же размера и площади (т.е., ширина равна высоте). tex.2dms Инструкция сначала выбирает текстуру из массива текстур, определённых в операнде A с помощью индекса, заданного первым элементом массива координат вектора C. Инструкция загружает данные из выбранного мульти-образца текстуры, заданного во втором элементе операнда С, в точку с координатами, заданными остальными элементами операнда С в конечном операнде D. |
|
tld4 |
Выборка текстуры по 4 параметрам |
|
txq |
Атрибуты текстур и шаблонов (.width, .height, .depth, .channel_data_type) |
|
istypep |
Запрос указывает ли регистр на непрозрачную переменную указанного типа. |
Операции для работы с поверхностями
Операция |
Значение |
|
suld |
Загрузка из памяти поверхностей |
|
sust |
Запись в память поверхностей |
|
sured |
Преобразование поверхности |
|
suq |
Определение атрибутов поверхности |
Операции управления потоками
Операция |
Значение |
|
{} |
Группировка инструкций |
|
@ |
Предикатное выражение |
|
bra |
Переход к цели и продолжение исполнения |
|
call |
Вызов функции |
|
ret |
Возвращение значения из функции |
|
exit |
Завершение нити |
Операции параллельной синхронизации и коммуникации
Операция |
Значение |
|
bar |
Функция синхронизации потоков для обмена данными между ними |
|
membar |
Функция ожидания, пока все потоки выполнят обращение к памяти |
|
atom |
Атомарные операции преобразования в общении нить-нить |
|
red |
Операции приведения на уровнях глобальной и разделяемой памяти |
|
vote |
Голосование различных нитей группы |
Видео - операции
Операция |
Значение |
|
vadd |
Сложение слов |
|
vsub |
Вычитание слов |
|
vabsdiff |
Абсолютное значение разности слов |
|
vmin |
Слово-минимум |
|
vmax |
Слово -максимум |
|
vshl |
Сдвиг слова влево |
|
vshr |
Сдвиг слова вправо |
|
vmad |
Расчёт (a*b) + c |
|
vset |
Сравнение двух слов |
|
vadd2 |
Целое двойное SIMD сложение |
|
vsub2 |
Целое двойное SIMD вычитание. |
|
vavrg2 |
Целое двойное SIMD среднее |
|
vabsdiff2 |
Целое двойное SIMD абсолютное значение разности. |
|
vmin2 |
Целый двойной SIMD минимум |
|
vmax2 |
Целый двойной SIMD максимум |
|
vset2 |
Целое двойное SIMD сравнение |
|
vadd4 |
Целое четверное SIMD сложение. |
|
vsub4 |
Целое четверное SIMD вычитание. |
|
vavrg4 |
Целое четверное SIMD среднее. |
|
vabsdiff4 |
Целое четверное SIMD абсолютное значение разницы. |
|
vmin4 |
Целый четверной SIMD минимум |
|
vmax4 |
Целый четверной SIMD максимум. |
|
vset4 |
Целое четверное SIMD сравнение |
Другие инструкции
Операция |
Значение |
|
trap |
Прервать выполнение и генерировать прерывание для процессора. |
|
brkpt |
Приостанавливает выполнение |
|
pmevent |
Инициировать одно или более высоко производительное событие монитора. |
Размещено на Allbest.ru
Подобные документы
Загальна термінологія CUDA. Структура NVIDIA CUDA, особливості створення, принципи оптимізації програм. Проблеми CUDA. Основні поняття і модель програмування, демонстрація технології CUDA на прикладі підрахунку CRC32-коду. Мінімальні вимоги до програми.
курсовая работа [4,5 M], добавлен 14.05.2012Программно-аппаратный комплекс производства компании Nvidia. Код для сложения векторов, представленный в CUDA. Вычислительная схема СPU с несколькими ядрами SMP. Выделение памяти на видеокарте. Проведение синхронизации работы основной и GPU программ.
презентация [392,5 K], добавлен 14.12.2013Еволюція GPU та поява GPGPU. OpenCL – відкритий стандарт для паралельного програмування гетерогенних систем. Сутність та особливості технології Nvidia CUDA. Програмно-апаратна платформа CUDA. Програмування за допомогою CUDA SDK. Огляд архітектури Fermi.
курсовая работа [3,0 M], добавлен 09.06.2012Сравнение центрального и графического процессора компьютера в параллельных расчётах. Пример применения технологии CUDA для неграфических вычислений. Вычисление интеграла и сложение векторов. Технические характеристики ПК, применяемого для вычислений.
курсовая работа [735,9 K], добавлен 12.07.2015Анализ работы параллельных вычислений на видеокарте GeForce GT 540M с использованием текстурной памяти. Рассмотрение специфических особенностей по адресации текстурной памяти. Изучение основ чтения и записи данных. Описание примеров данных программ.
лабораторная работа [3,1 M], добавлен 04.12.2014Преимущества архитектуры CUDA по сравнению с традиционным подходом к организации вычислений общего назначения посредством возможностей графических API. Создание CUDA проекта. Код программы расчёта числа PI и суммирования вектора CPU, ее технический вывод.
курсовая работа [1,4 M], добавлен 12.12.2012Программный код OpenGL. Синтаксис команд OpenGL. OpenGL как конечный автомат. Конвейер визуализации OpenGL. Библиотеки, относящиеся к OpenGL. Библиотека OpenGL. Подключаемые файлы. GLUT, инструментарий утилит библиотеки OpenGL.
курсовая работа [304,9 K], добавлен 01.06.2004Ознакомление с интерфейсом, основными возможностями и преимуществами использования программы OpenGL - популярной библиотекой для работы с 2D и 3D графикой. Рассмотрение назначения, базовых компонент и правил инициализации программного движка DirectX.
презентация [19,4 K], добавлен 14.08.2013Модель памяти как набор опций компилятора, ее виды в BC++2.0, размеры и взаимное расположение. Назначение сегментных регистров в различных моделях памяти, порядок просмотра переменных. Основные и дополнительные функции динамических переменных в памяти.
лабораторная работа [28,4 K], добавлен 06.07.2009Основы программирования с использованием библиотеки OpenGL. Приложение для построения динамического изображения модели объекта "Батискаф": разработка процедуры визуализации трехмерной схемы, интерфейса пользователя и подсистемы управления событиями.
курсовая работа [1,4 M], добавлен 26.06.2011