parallel.gpu.RandStream.create

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

Описание

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

Примечание

The parallel.gpu.RandStream функция создания объектов является более краткой альтернативой, когда необходимо создать один поток.

[s1,s2,...] = parallel.gpu.RandStream.create('gentype','NumStreams',n) создает n потоки случайных чисел, которые используют алгоритм генератора случайных чисел, заданный 'gentype'. Потоки независимы в псевдослучайном смысле. Потоки не обязательно независимы от потоков, созданных в другое время.

пример

[___] = parallel.gpu.RandStream.create('gentype',Name,Value) также задает дополнительные Name,Value пар для управления созданием потока, включая количество независимых потоков для создания.

Примеры

свернуть все

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

Сначала создайте потоки как массив ячеек.

streams = parallel.gpu.RandStream.create('Philox', 'NumStreams',3,'Seed',1,'NormalTransform','Inversion', 'CellOutput',true)
streams =

  1×3 cell array

    {1×1 parallel.gpu.RandStream}    {1×1 parallel.gpu.RandStream}    {1×1 parallel.gpu.RandStream}

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

x = zeros(3,10,'gpuArray');
for i=1:3
   x(i,:) = rand(streams{i},1,10);
end
x
x =

    0.5361    0.2319    0.7753    0.2390    0.0036    0.5262    0.8629    0.9974    0.9576    0.0054
    0.3084    0.3396    0.6758    0.5145    0.7909    0.7709    0.3386    0.1168    0.3694    0.0392
    0.5218    0.5625    0.7090    0.5854    0.5067    0.6528    0.5095    0.8777    0.3094    0.1100

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

свернуть все

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

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

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

Пример: parallel.gpu.RandStream.create('Philox')

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

Задайте необязательные разделенные разделенными запятой парами Name,Value аргументы. Name - имя аргумента и Value - соответствующее значение. Name должны находиться внутри кавычек. Можно задать несколько аргументов в виде пар имен и значений в любом порядке Name1,Value1,...,NameN,ValueN.

Пример: parallel.gpu.RandStream.create('Philox','Seed',10) создает один поток случайных чисел с помощью 'Philox' алгоритм генератора с seed 10.

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

Индексы потоков, созданных в этом вызове функции, заданные как разделенная разделенными запятой парами, состоящая из 'StreamIndices' и неотрицательное целое число или вектор неотрицательных целых чисел. Значение по умолчанию 1:N, где N - значение, заданное с помощью 'NumStreams' параметр.

Значения, предусмотренные для 'StreamIndices' должно быть меньше или равно значению, предусмотренному для 'NumStreams'.

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

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

Логический флаг, указывающий, возвращать ли объекты потока как элементы массива ячеек, заданный как разделенная разделенными запятой парами 'CellOutput' и логическое значение 0 или 1. Значение по умолчанию false.

Выходные аргументы

свернуть все

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

Совет

  • Если вы создаете несколько потоков по вызову parallel.gpu.RandStream.create несколько раз, потоки не обязательно независимы друг от друга. Создание независимых потоков из отдельных вызовов parallel.gpu.RandStream.create:

    • Задайте то же множество значений для gentype, 'NumStreams', и 'Seed' в каждом случае.

    • Задайте другое значение для 'StreamIndices' что находится между 1 и 'NumStreams' значение в каждом случае.

Введенный в R2011b