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 генератор с начальным числом 0.

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

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

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

Примеры

свернуть все

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

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

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

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

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

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

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

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

isequal(rGPU,rCPU)
ans = logical
   1

The 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

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

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

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

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

свернуть все

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

Пример: gpurng(7)

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

Ключевое словоГенераторПоддержка нескольких потоков и субпотоковПриблизительный период полной точности
'Threefry' или 'Threefry4x64_20'Трехфазный генератор 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