parallel.gpu.RandStream

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

Описание

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

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

Создание

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

Описание

пример

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 имя аргумента и Value соответствующее значение. Name должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.

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

Алгоритм преобразования для нормально распределенных случайных чисел, сгенерированных с помощью randn (RandStream), заданный как разделенная запятой пара 'NormalTransform' и алгоритм называет 'BoxMuller' или 'Inversion'. 'BoxMuller' алгоритм поддерживается для 'Threefry и 'Philox' генераторы. '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

На графическом процессоре, функции randrandi, и 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