parallel.gpu. RandStream

Поток случайных чисел на графическом процессоре

Описание

Используйте parallel.gpu.RandStream, чтобы управлять глобальным потоком графического процессора случайных чисел и создать несколько независимых потоков на графическом процессоре. Когда вы генерируете случайные числа на графическом процессоре, числа чертятся от потока графического процессора случайных чисел. Этот поток отличается от случайного потока клиента сеанс MATLAB® на центральном процессоре.

Чтобы создать случайные числа на графическом процессоре, используйте функции генератора случайных чисел rand, randi и randn с gpuArrays. По умолчанию эти функции чертят числа от глобального потока графического процессора случайных чисел. Чтобы использовать различный поток, следуйте за синтаксисами, описанными в функциях объекта RandStream rand (RandStream), randi (RandStream) и randn (RandStream). Если вы используете поток графического процессора случайных чисел, результаты возвращены как gpuArray.

Создание

Используйте следующие синтаксисы, чтобы создать один объект parallel.gpu.RandStream. Если вы хотите создать несколько независимых потоков одновременно, используйте функцию parallel.gpu.RandStream.create.

Синтаксис

s = parallel.gpu.RandStream('gentype')
s = parallel.gpu.RandStream('gentype',Name,Value)

Описание

пример

s = parallel.gpu.RandStream('gentype') создает поток случайных чисел, который использует универсальный алгоритм генератора псевдослучайного числа, заданный 'gentype'.

пример

s = parallel.gpu.RandStream('gentype',Name,Value) также задает одну или несколько дополнительных пар Name,Value к свойствам элементов управления потока.

Входные параметры

развернуть все

Алгоритм генератора случайных чисел, заданный как вектор символов или строка для любого допустимого генератора случайных чисел. Три алгоритма генератора случайных чисел поддерживаются на графическом процессоре.

Ключевое словоГенераторНесколько передают потоком и подпотоковая поддержкаАппроксимированный период в полной точности
'Threefry' или 'Threefry4x64_20'Threefry 4x64 генератор с 20 раундамиДа2514 (2 256 потоков длины 2258)
'Philox' или 'Philox4x32_10'Philox 4x32 генератор с 10 раундамиДа2193 (264 потока длины 2129)
'CombRecursive' или 'mrg32k3a'Объединенный несколько рекурсивный генераторДа2191 (263 потока длины 2127)

Для получения дополнительной информации о различиях между генерацией случайных чисел на графическом процессоре и центральным процессором, смотрите Потоки Случайных чисел на графическом процессоре.

Аргументы в виде пар имя-значение

Укажите необязательные аргументы в виде пар ""имя, значение"", разделенных запятыми. Имя (Name) — это имя аргумента, а значение (Value) — соответствующее значение. Name должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.

Seed случайных чисел, заданный как пара, разделенная запятой, состоящая из 'Seed' и неотрицательного целого числа или как строка или вектор символов 'shuffle'. Seed задает отправную точку для алгоритма, чтобы сгенерировать случайные числа. Задайте 'Seed' как целое число когда это необходимо восстанавливаемые результаты. При определении 'Seed', когда 'shuffle' отбирает генератор на основе текущего времени.

Алгоритм преобразования для нормально распределенных случайных чисел, сгенерированных с помощью randn (RandStream), заданного как пара, разделенная запятой 'NormalTransform' и алгоритм, называет 'BoxMuller' или 'Inversion'. Алгоритм 'BoxMuller' поддерживается для генераторов 'Philox' и 'Threefry. Генератор 'Inversion' поддерживается для генератора 'CombRecursive'. Никакие другие алгоритмы преобразования не поддерживаются на графическом процессоре.

Свойства

развернуть все

Это свойство доступно только для чтения.

Алгоритм генератора используется потоком.

Типы данных: char

Это свойство доступно только для чтения.

Отберите значение, используемое, чтобы создать поток

Это свойство доступно только для чтения.

Количество потоков в группе, в которой был создан текущий поток.

Индекс текущего потока из числа группы потоков, с которыми это было создано.

Текущее состояние потока случайных чисел. Внутреннее состояние определяет последовательность случайных чисел, произведенных потоком случайных чисел s. Размер этого вектора состояния зависит от выбранного генератора.

Сохранение и восстановление внутреннего состояния генератора со свойством State позволяют вам воспроизводить последовательность случайных чисел. То, когда вы устанавливаете это свойство, значение, вы присваиваете s.State, должно быть значением, считанным из s.State ранее. Используйте reset, чтобы возвратить поток в предсказуемое состояние не ранее читая из свойства State.

Алгоритм преобразования раньше генерировал нормально распределенные псевдослучайные значения с помощью randn.

Типы данных: char

Это свойство доступно только для чтения.

Логическое значение, указывающее, генерирует ли S прямо противоположные псевдослучайные значения, то есть, обычные значения, вычтенные от 1 для универсальных значений. Вы не можете задать это свойство.

Типы данных: логический

Это свойство доступно только для чтения.

Логическое значение, указывающее, генерирует ли поток случайных чисел значения с помощью своей полной точности. Два случайных числа используются, чтобы гарантировать, что все биты двойного установлены. Вы не можете изменить это свойство.

Типы данных: логический

Функции объекта

parallel.gpu.RandStream.createСоздайте независимые потоки случайных чисел на графическом процессоре
parallel.gpu.RandStream.listАлгоритмы генератора случайных чисел на графическом процессоре
parallel.gpu.RandStream.getGlobalStreamТекущий глобальный поток графического процессора случайных чисел
parallel.gpu.RandStream.setGlobalStreamУстановите глобальный поток графического процессора случайных чисел
reset (RandStream)Сбросьте поток случайных чисел
rand (RandStream)Равномерно распределенные случайные числа
randi (RandStream)Равномерно распределенные псевдослучайные целые числа
randn (RandStream)Нормально распределенные псевдослучайные числа
randperm (RandStream)Случайная перестановка

Примеры

свернуть все

Можно изменить глобальный поток случайных чисел на графическом процессоре. Во-первых, задайте поток случайных чисел, который вы хотите установить как новый глобальный поток.

newStr = parallel.gpu.RandStream('Philox')
newStr =

Philox4x32_10 random stream on the GPU
             Seed: 0
  NormalTransform: BoxMuller

Затем, установите этот новый поток быть глобальным потоком.

parallel.gpu.RandStream.setGlobalStream(newStr);

Проверяйте, что newStr является теперь текущим глобальным потоком.

newStr
newStr =

Philox4x32_10 random stream on the GPU (current global stream)
             Seed: 0
  NormalTransform: BoxMuller

На графическом процессоре функции rand, randi и randn теперь чертят случайные числа от нового глобального потока с помощью алгоритма генератора 'Philox'.

Если у вас есть приложения, которые требуют генерации тех же случайных чисел на графическом процессоре и центральном процессоре, можно установить потоки соответствовать. Создайте соответствие с потоками и на графическом процессоре и на центральном процессоре, и установите их как глобальный поток в каждом случае.

stCPU = RandStream('Threefry','Seed',0,'NormalTransform','Inversion');
stGPU = parallel.gpu.RandStream('Threefry','Seed',0,'NormalTransform','Inversion');

Только 'Inversion' нормальный алгоритм преобразования доступен и на графическом процессоре и на центральном процессоре.

Установите эти потоки быть глобальными потоками на центральном процессоре и графическом процессоре, соответственно.

RandStream.setGlobalStream(stCPU);
parallel.gpu.RandStream.setGlobalStream(stGPU);

Вызов rand и randn теперь производит те же наборы чисел и на графическом процессоре и на клиентском сеансе работы с MATLAB.

rC = rand(1,10)
rG = rand(1,10, 'gpuArray')
rC =
    0.1726    0.9207    0.8108    0.7169    0.8697    0.7920    0.4159    0.6503    0.1025    0.6166

rG =
    0.1726    0.9207    0.8108    0.7169    0.8697    0.7920    0.4159    0.6503    0.1025    0.6166

rnC = randn(1,10)
rnG = randn(1,10, 'gpuArray')
rnC =
    -0.9438    1.4095    0.8807    0.5736    1.1250    0.8133   -0.2124    0.3862   -1.2673    0.2966

rnG =
    -0.9438    1.4095    0.8807    0.5736    1.1250    0.8133   -0.2124    0.3862   -1.2673    0.2966

Представленный в R2011b