Готовый перевод PyCUDA documentation / Документация PyCUDA: Multi-dimensional arrays on the GPU http://documen.tician.de/pycuda/array.html
Многомерные массивы на GPU
Типы Векторов
класс pycuda.gpuarray.vec
Все поддержанные CUDA типы векторов, такие как float3 и long4 доступны как типы данных numpy внутри этого класса. Эти экземпляры numpy.dtype имеют имена полей x, y, z, и w точно также как и их CUDA аналоги. Они будут работать как для передачи параметров ядрам, так и для передачи данных назад и дальше между ядрами и кодом Python. Для каждого типа также представлена функция make_type(например make_float3(x,y,z)).
Класс массивов GPUArray
класс pycuda.gpuarray.GPUArray(shape, dtype, *, allocator=None, order="C")
numpy.ndarray работает как будто он хранит свои данные и выполняет над ними вычисления на вычислительном устройстве. shape и dtype работают в точности как в numpy. Арифметические методы в GPUArray поддерживают трансляцию скаляров (например array +5). Если аллокатор вызываем, то до того как он вызывается с аргументом количества байт, которые он выделяет, возвращается объект, который может быть переведен в целое, представляя адрес заново распределенной памяти. Рассматривает оба его метода и pycuda.driver.mem_alloc() и pycuda.tools.DeviceMemoryPool.alloc(), которые являются моделью его интерфейса.
Все аргументы за аллокатором следует считать только ключевыми словами.
Экземпляр pycuda.driver.DeviceAllocation создается для памяти, которая возвращает его в GPUArray.
Кортеж длин каждого измерения(размерности) в массиве.
numpy.dtype предметов находящихся в GPU массиве.
Число значимых записей в массиве. Может также вычисляться с помощью перемножения чисел в поле shape.
Общее число записей, включая заполнение, которые представлены в массиве. Заполнение может также возникнуть, например из-за шага корректировки с помощью pycuda.driver.mem_alloc_pitch().
Размер целого массива в байтах. Вычисляется как произведение размера size на dtype.itemsize.
strides (расстояния)
Кортеж байт, которые нужно отшагнуть в каждом измерении, когда проходишь массив.
Возвращение объекта с атрибутами c_contiguous, f_contiguous и forc, которое может использоваться, чтобы запрашивать близкие свойства по аналогии с numpy.ndarray.flags.
Возвращает целое, отражая адрес в памяти устройства там, где этот массив находится.
Возвращает размер ведущих измерений аргумента self.
Предупреждение
Этот метод существует в версии 0.93 и ниже, но возвращает значение размера вместо текущего значения. Это изменение было сделано для того, чтобы соответствовать numpy.
Перемещают содержимое numpy.ndarray массива ary на устройство.
У ary должны быть те же dtype и size (но необязательно shape ), что и аргумента self.
Асинхронно передает содержимое numpy.ndarray объекта ary на устройство, опционально последовательно на поток.
У ary должны быть те же dtype и size (но необязательно shape), что и аргумент self.
Передает содержимое аргумента self в массива ary и вновь выделенной памяти numpy.ndarray. Если предоставлен массив ary, то он должен иметь правильный параметр size (но необязательно shape) и dtype. Если он не предоставлен, то блокировка по страницам определяет будет ли заблокирована по страницам память.
Передает содержимое аргумента self в массива ary и заново выделенный объект numpy.ndarray. Если предоставлен массив ary, то он должен иметь правильный параметр size (но необязательно shape) и dtype. Если он не предоставлен, то заблокированный по страницам массив заново разместится в памяти.
Возвращает результат selffac*self + otherfac*other. add_timer, если он предоставлен, то вызывается с результатом из pycuda.driver.Function.prepared_timed_call().
Возвращает GPUArray, содержащий абсолютное значение каждого элемента аргумента self.
Заполняет массив скалярным значением.
Возвращает аргумента self, который преобразован в dtype.
Возвращает действительную часть аргумента self или аргумента self, если он действительный.
Новый в версии 0.94.
Возвращает мнимую часть аргумента self или zeros_like(self), если он действительный.
Возвращает комплексно-сопряженную часть аргумента self или self, если он действительный.
Связывает аргумент self с texref(текстурной ссылкой) класса pycuda.driver.TextureReference.
Благодаря требованиям к выравнивании, связанный адрес эффективных текстур отличается от запрошенных адресов на смещение. Этот метод возвращает это смещение в единицах типа данных аргумента self. Если значение параметра allow_offset - False, то ненулевое значение смещения приведет к тому, что появится исключение.
Замечание
Рекомендуется использовать bind_to_texref_ext() вместо этого метода.
Связывает аргумент self с texref(текстурной ссылкой) pycuda.driver.TextureReference. Кроме того, набор текстурных ссылок форматируются, чтобы сверить параметр dtype и его канал с другими каналами. Эта программа также устанавливает флаг текстурных ссылок pycuda.driver.TRSF_READ_AS_INTEGER, если это необходимо.
Благодаря требования выравнивания, эффективный адрес связывания текстуры может отличаться от запрошенного на смещение. Если значение параметра allow_offset False, то ненулевое значение этого смещения приведет к тому, что появится исключение.
Новый в версии 0.93.
Что касается его написания - текстуры CUDA не поддерживают внутри(не вшита поддержка) данные типа чисел с плавающей точкой двойной точности. Чтобы исправить этот недостаток, PyCUDA содержит рабочее окружение, которое можно включить, передав значение True или allow_double_hack. В этом случае, используйте следующий код для доступа к текстуре в вашем коде ядра:
(Этот способ был добавлен в версии 0.94.)
Конструирование экземпляров GPUArray
Возвращает GPUArray, который является точной копией экземпляра массива ary типа numpy.ndarray.
Смотрите GPUArray, чтобы получить информацию об аллокаторе.
Возвращает GPUArray, который является точной копией экземпляра массива ary типа numpy.ndarray. Копия происходит асинхронно, опционально последовательно передается в поток (stream).
Смотрите GPUArray, чтобы получить информацию об аллокаторе.
Синоним конструктора GPUArray.
То же самое, что и empty(), но GPUArray инициализируется до того, как возвратится.
Создает новый, не инициализированный GPUArray, у которого те же свойства, что и у other_ary.
Делает новый, инициализированный нулем GPUArray, у которого те же свойства, что и у other_ary.
Создает GPUArray заполненный числами разделенными на шаг step, начинающимися на значении start , заканчивающимися на значении stop.
Для аргументов с плавающей точкой длина результата - это перекрытие ceil((stop - start)/step). Это правило может привести к тому, что в последнем элементе результат будет больше, чем stop.
dtype, если не определен, берется как общий тип для start, stop и step.
Возвращает GPUArray [a[indices[0]], ..., a[indices[n]]]. На данный момент, элемент массива a должен быть типа, который может быть связан с текстурой.
Условные
Возвращает массив как then_, which, для элемента, индекс которого i, содержит then_[i] если criterion[i]>0, иначе else_[i]. (добавлено в 0.94)
Вовращает поэлементный максимум из a и b. (добавлено в 0.94)
Вовращает поэлементный минимум из a и b. (добавлено в 0.94)
Редукции
Поэлементные функции на экземплярах GPUArray
Модуль pycuda.cumath содержит поэлементные функции, работающие наподобие того(так как работают с массивами компл. числами и т.д.), как работают функции содержащиеся в модуле math.
Округление и абсолютное значение.
Экспоненты, Логарифмы и Корни
Тригонометрические функции
Гиперболические функции
Сборка и Разложение чисел с плавающей точкой.
Возвращает плавающую точку остатка деления arg/mod, для каждого элемента в arg и mod.
Возвращает кортеж(главных значений, экспонент), такой как arg= significand* 2**exponent.
Возвращает новый массив значений скомпонованных с плавающей точкой из входных значений главных значений и экспонент, объединенных вместе в пару как result = significand * 2 ** exponent.
Возвращает кортеж (fracpart, intpart) массивов содержащих целую и дробную часть аргумента.
Создает массив случайных чисел
Возвращает массив имеющий заданную форму shape, заполненный случайными значениями типа dtype в диапазоне [0,1).
Предупреждение
Следующие классы используют генераторы случайных чисел, которые запускаются на GPU. Каждая нить использует свой собственный генератор. Создание таких генераторов требует дополнительных ресурсов для последующего создания случайных чисел. После экспериментов она выглядит как максимальное число активных генераторов на устройствах Tesla(со способностями к вычислению 1.x), которое является 256. Устройство Fermi позволяет создать 1024 генератора без каких бы то ни было проблем. Если будут какие-либо проблемы с созданием объектов класса PseudoRandomNumberGenerator или QuasiRandomNumberGenerator уменьшите число созданных генераторов (и, таким образом, число активных потоков(нитей)).
Псевдослучайная последовательность чисел удовлетворяет большинству сложный свойств по настоящему случайных последовательностей n-мерных точек сгенерированных детерминистическим алгоритмом разработанным, чтобы заполнить n-мерное пространство равномерно.
Более затратно генерировать квазислучайные числа.
Получает версию CURAND, на которой была скомпилированна PyCUDA. Возвращает 3-местный кортеж целых чисел такого вида:
(основное число, второстепенное число, пересмотра число).
Возвращает GPUArray заполненный случайными int32 числами повторяющимися N раз, которые можно использовать как зерно для генератора XORWOW.
Возвращает GPUArray заполненный N случайными числами int32, которые можно использовать как зерно для генератора XORWOW.
класс pycuda.curandom.XORWOWRandomNumberGenerator(seed_getter=None, offset=0)
Параметры:
seed_getter - функция, которая данная как счетчик целых чисел, будет выводить int32 GPUArray зерен.
Предоставляет псевдослучайные числа. Генерирует последовательности с периодом по крайней мере 2^190.
CUDA 3.2 и выше.
Новый в версии 2011.1.
Возвращает GPUArray счет заполненый векторами направления для инициализации Sobol32 генераторов.
класс pycuda.curandom.Sobol32RandomNumberGenerator(dir_vector=None, offset=0)
Параметры:
dir_vector – a GPUArray 32-элементных int32 векторов, которые используются для инициализации квазислучайным генератором; он должен содержать один вектор, для каждого инициализированного генератора.
offset - стартовый индекс внутри последовательности Sobol32, дает вектор направления.
Предоставляет квазислучайные числа. Генерируют последовательность с периодом 2^32.
CUDA 3.2 и выше.
Новый в версии 2011.1.
Однопроходная пользовательская оценка выражения.
Оценка привлеченных выражений на экземплярах GPUArray может быть кое в чем неэффективной, поскольку новое временное создается для каждого промежуточного результата. Функциональность в модуле pycuda.elementwise содержит инструменты, чтобы помочь сгенерировать ядра, которые оценивают многоэтапные выражение на одном или несколько операндах в одном проходе.
класс pycuda.elementwise.ElementwiseKernel(arguments, operation, name="kernel", keep=False, options=[], preamble="")
Генерирует ядро, которое принимает определенное значение скаляров и векторов аргументов и производит скалярные операции над каждым входным значением его аргументов, как будто бы этот аргумент - вектор.
Аргументы определяются как строка форматированная как список аргументов Си. Операции определяются как выражение назначения, без точки с запятой. Векторы в операции должны индексироваться как переменная i.
Переменная name определяет имя, под которым ядро компилируется, держа и опции переданные неизменными pycuda.compiler.SourceModule.
Преамбула опеределяет некоторый исходный код, который включается до поэлементных определений ядер. Вы можете использовать это для включения других файлов и/или определения функций, которые используется с помощью операции.
Вызывает сгенерированное скалярное ядро. Аргументы могут быть как скалярами так и экземплярами GPUArray.
Если задан диапазон, то он должен быть объектом срезом и определять диапазон индексов i, для которых операция проводится.
Если дан срез, то должен быть объект срез и должен быть определен диапазон индексов i для которых операция проводится, усеченных в контейнер. Также срез может содержать отрицательные индексы к индексам, относящимся к концу массива.
Приведем пример использования:
(Вы можете найти этот пример, в файле examples/demo_elementwise.py в дистрибутиве PyCuda.)
Пользовательские сокращения
класс pycuda.reduction.ReductionKernel(dtype_out, neutral, reduce_expr, map_expr=None, arguments=None, name="reduce_kernel", keep=False, options=[], preamble="")
Генерирует ядро, которое принимает ряд скалярных или векторных аргументов (по крайней мере один векторный аргумент), производит map_expr над каждой записью ее выхода. Нейтральный служит как исходное значение. preamble - предоставляет возможность добавлять предпроцессорные директивы и другой код(такой как функции помощи), чтобы добавить его до настоящего редукционного кода ядра.
Векторы в map_expr должны быть проиндексированы переменными i. reduce_expr - использует формальные значения "a" и "b" для подсветки двух операндов бинарной операции редукции. Если вы не определите выражение map_expr, "in[i]" - таким образом будет присутствовать только один входной аргумент - как автоматически предполагается.
dtype_out - определяет тип numpy.dtype в котором редукция производится и в котором результат возвращается. neutral - определяется как число с плавающей точкой или целое, форматированное как строка. reduce_expr и map_exp - определяются как строка операций форматирования и аргумент определяется как строка форматированная как список аргументов Си. name - определяет имя под которым ядро компилируется, сохраняя и опции переданные неизменными pycuda.compiler.SourceModule. preamble - определяется как строка кода.
Приведем пример использования:
Параллельный Скан / Префиксная Сумма
класс pycuda.scan.ExclusiveScanKernel(dtype, scan_expr, neutral, name_prefix="scan", options=[], preamble="")
Возвращает ядро, которое может вычислять префиксную сумму, используя любую ассоциативную операцию, данную как scan_expr. scan_expr использует только формальные значения "a" и "b", чтобы высветить два операнда ассоциативных двоичных операций. Нейтральный является нейтральный элемент scan_expr, подчиняющийся выражению(тождеству) scan_expr(a, neutral) == a.
dtype - определяет тип массивов, над которыми производятся операции. name_prefix - используется для имен ядра, чтобы удостоверится в распознаваемости в профилях и логах. options - это список опций компилятора, которые используется во время строительства. preamble - определяет строку кода, которая добавляется до действующих ядер.
класс pycuda.scan.InclusiveScanKernel(dtype, scan_expr, neutral=None, name_prefix="scan", options=[], preamble="", devices=None)
Работает как ExclusiveScanKernel. В отличии от случая exclusive, опция neutral не требуется.
Пример использования:
Быстрое Преобразования Фурье
Pyfft, написаная Богдан Опанчуком предоставляет множество основанных на GPU алгоритмов FFT преобразования, разработанных, чтобы работать с объектами типа pycuda.gpuarray.GPUArray.
Переведено на Нотабеноиде
http://notabenoid.org/book/20422/72299
Переводчики: wuffur
Настройки
Готово:
