parallel.gpu.RandStream.create

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

Описание

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

Примечание

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'Threefry 4x64 генератор с 20 раундамиДа2514 (2 256 потоков длины 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'. 'BoxMuller' алгоритм поддерживается для 'Threefry и 'Philox' генераторы. 'Inversion' алгоритм поддерживается для 'CombRecursive' генератор. Никакие другие алгоритмы преобразования не поддерживаются на графическом процессоре.

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

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

свернуть все

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

Советы

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

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

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

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