gpurng

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

Синтаксис

gpurng(seed)
gpurng('shuffle')
gpurng(seed,generator)
gpurng('shuffle',generator)
gpurng('default')
S = gpurng
gpurng(S)
S = gpurng(___)

Описание

gpurng(seed) устанавливает отправную точку или seed, генератора случайных чисел, используемого в вычислениях графического процессора, так, чтобы rand, randi и randn произвели предсказуемые последовательности чисел.

gpurng('shuffle') устанавливает seed генератора случайных чисел на основе текущего времени так, чтобы rand, randi и randn произвели различные последовательности чисел после каждого раза, когда вы вызываете gpurng.

gpurng(seed,generator) или gpurng('shuffle',generator) выбирает тип генератора случайных чисел, используемого rand, randi и randn.

gpurng('default') возвращает настройки генератора случайных чисел к их значениям по умолчанию. Произведенные случайные числа эквивалентны, если вы перезапустили MATLAB®. Настройка по умолчанию является генератором Threefry с seed 0.

S = gpurng возвращает текущее состояние генератора случайных чисел как структура с полями 'Type', 'Seed' и 'состоянием'. Используйте эту структуру, чтобы восстановить генератор случайных чисел к полученным настройкам в более позднее время с gpurng(S).

gpurng(S) восстанавливает состояние настроек использования генератора случайных чисел, ранее полученных с S = gpurng.

S = gpurng(___) возвращает текущее состояние генератора случайных чисел как структура прежде, чем изменить настройки типа генератора или seed.

Примеры

свернуть все

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

Восстановите тип генератора и seed к их значениям по умолчанию и на центральном процессоре и на графическом процессоре.

gpurng('default') 
rng('default')

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

GPUdef = gpurng
GPUdef = struct with fields:
     Type: 'threefry'
     Seed: 0
    State: [17×1 uint32]

Установите генератор случайных чисел центрального процессора совпадать с настройками GPU по умолчанию.

rng(GPUdef) 

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

rGPU = rand(1,10, 'gpuArray')
rGPU =

    0.3640    0.5421    0.6543    0.7436    0.0342    0.8311    0.7040    0.2817    0.1163    0.5671

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

rCPU = rand(1,10)
rCPU = 1×10

    0.3640    0.5421    0.6543    0.7436    0.0342    0.8311    0.7040    0.2817    0.1163    0.5671

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

isequal(rGPU,rCPU)
ans = logical
   1

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

nGPU = randn(1,1000, 'gpuArray');
nCPU = randn(1,1000);

figure
hold on
histogram(nGPU)
histogram(nCPU)
legend('GPU','CPU')
title('Normally Distributed Random Numbers')
xlabel('Value')
ylabel('Count')
hold off

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

По умолчанию центральный процессор использует преобразование 'Ziggurat', в то время как графический процессор использует алгоритм 'BoxMuller' для генератора 'Threefry' . Единственным методом преобразования, поддержанным и на центральном процессоре и на графическом процессоре, является 'Inversion', преобразовывают.

Можно изменить метод преобразования на графическом процессоре с помощью parallel.gpu.RandStream.

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

свернуть все

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

Пример: gpurng(7)

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

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

Генератором по умолчанию является Threefry.

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

Пример: gpurng(0,'Philox')

Предыдущее состояние генератора случайных чисел, заданное как структура ранее созданное использование S = gpurng.

Пример: S = gpurng получает текущее состояние генератора случайных чисел, и gpurng(S) восстанавливает генератор к тем настройкам.

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

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

свернуть все

Состояние генератора случайных чисел, возвращенное как структура с полями 'Type', 'Seed' и 'State'.

Пример: S = gpurng получает текущее состояние генератора случайных чисел, и gpurng(S) восстанавливает генератор к тем настройкам.

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

Вопросы совместимости

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

Поведение изменяется в R2019a

Поведение изменяется в R2018a

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

Для просмотра документации необходимо авторизоваться на сайте