exponenta event banner

gpurng

Управление генерацией случайных чисел для вычислений GPU

Описание

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

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

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

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

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

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

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

Примеры

свернуть все

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

Восстановите тип генератора и начальное значение до значений по умолчанию как на CPU, так и на GPU.

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

Сохраните начальное число и тип генератора по умолчанию генератора случайных чисел GPU.

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

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

rng(GPUdef) 

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

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

Начальное число и тип генератора одинаковы как для графического процессора, так и для ЦП, поэтому массивы одинаковы.

isequal(rGPU,rCPU)
ans = logical
   1

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

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

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

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

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

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

свернуть все

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

Пример: gpurng(7)

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

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

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

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

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

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

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

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

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

свернуть все

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

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

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

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

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

В R2019a изменилось поведение

В R2018a изменилось поведение

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