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 0.

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

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

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

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

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