parallel.gpu.RandStream

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

Описание

Использование parallel.gpu.RandStream для управления глобальным потоком случайных чисел GPU и создания нескольких независимых потоков на графическом процессоре. Когда вы генерируете случайные числа на графическом процессоре, номера рисуются из потока случайных чисел GPU. Этот поток отличается от случайного потока клиента 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'Трехфазный генератор 4x64 с 20 патронамиДа2514 (2256 потоки длиной 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. The 'BoxMuller' алгоритм поддерживается для 'Threefry и 'Philox' генераторы. The 'Inversion' алгоритм поддерживается для 'CombRecursive' генератор. Другие алгоритмы преобразования на графическом процессоре не поддерживаются.

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

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

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

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

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

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

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

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

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

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

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