parallel.gpu.RandStream

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

Описание

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

Чтобы создать случайные числа на графическом процессоре, используйте функции генератора случайных чисел rand, randi, и randn с gpuArrays. По умолчанию эти функции чертят числа от глобального потока графического процессора случайных чисел. Чтобы использовать различный поток, следуйте за синтаксисами, описанными в Функциях объекта. Если вы используете поток графического процессора случайных чисел, результаты возвращены как 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)

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

Этот аргумент устанавливает Type свойство.

Свойства

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

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

Алгоритм генератора, используемый потоком, заданным как 'Threefry4x64_20', 'Philox4x32_10', или 'mrg32k3a'.

Установите это свойство с помощью gentype аргумент, когда вы создаете поток.

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

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

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

Установите это свойство как пару "имя-значение", когда вы создадите поток.

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

Количество потоков в группе, в которой текущий поток был создан в виде положительного целого числа. Создайте несколько потоков целиком с помощью функции parallel.gpu.RandStream.create.

Потоковый индекс текущего потока в виде положительного целого числа. Потоковый индекс идентифицировал отдельные потоки, когда вы создаете несколько потоков целиком с помощью функции parallel.gpu.RandStream.create.

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

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

Нормальный алгоритм преобразования в виде 'BoxMuller или 'Inversion'.

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

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

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

Прямо противоположные значения в виде false или 0. Это свойство указывает ли S генерирует прямо противоположные псевдослучайные значения, то есть, обычные значения, вычтенные из 1 для универсальных значений.

Этим свойством всегда является 0. Поток не генерирует прямо противоположные значения. Вы не можете изменить это свойство.

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

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

Генерация полной точности в виде true или 1. Это свойство указывает, генерирует ли поток случайных чисел значения с помощью полной точности. Два случайных числа используются, чтобы гарантировать, что все биты двойного установлены.

Этим свойством всегда является 1. Вы не можете изменить это свойство.

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

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

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

По умолчанию, когда вы создаете случайные числа на графическом процессоре с помощью функций генерации случайных чисел, такой как rand, случайные числа чертятся от глобального потока случайных чисел на графическом процессоре. Чтобы задать различный поток, создайте parallel.gpu.RandStream объект и передача это как первый входной параметр. Например, создайте 4 1 вектор из случайных чисел с помощью алгоритма генератора Philox.

s = parallel.gpu.RandStream('Philox');
r = rand(s,4,1);

Эти функции принимают parallel.gpu.RandStream возразите и сгенерируйте случайные числа на графическом процессоре:

randРавномерно распределенные случайные числа

Поддерживаемые синтаксисы, где s parallel.gpu.RandStream объект:

X = rand(s)
X = rand(s,n)
X = rand(s,sz1,...,szN)
X = rand(s,sz)
X = rand(s,typename)
Для получения дополнительной информации на других входных параметрах, смотрите rand, randi, и randn.

randiРавномерно распределенные псевдослучайные целые числа
randnНормально распределенные случайные числа
randpermСлучайное сочетание целых чисел

Поддерживаемые синтаксисы, где s parallel.gpu.RandStream объект:

p = randperm(s,n)
p = randperm(s,n,k)
Для получения дополнительной информации на других входных параметрах, смотрите randperm.

Примеры

свернуть все

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

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