gpurng

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

Описание

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

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

gpurng(seed,generator) или gpurng('shuffle',generator) выбирает тип генератора случайных чисел, используемого randrandi, и 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 (2256 потоки длины 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