Захватите настройки генератора графического процессора и установите состояние центрального процессора генератора случайных чисел так, чтобы оно совпадало с настройками генератора графического процессора. Создайте предсказуемые массивы случайных чисел на центральном процессоре и графическом процессоре.
Восстановите тип генератора и начальные значения по умолчанию как на центральном процессоре, так и на графическом процессоре.
Сохраните seed по умолчанию и тип генератора генератора случайных чисел графический процессор.
GPUdef = struct with fields:
Type: 'threefry'
Seed: 0
State: [17×1 uint32]
Установите генератор случайных чисел центральный процессор в соответствии с настройками графического процессора по умолчанию.
Создайте массив равномерно распределенных случайных чисел на графическом процессоре.
rGPU =
0.3640 0.5421 0.6543 0.7436 0.0342 0.8311 0.7040 0.2817 0.1163 0.5671
Создайте массив случайных чисел на центральном процессоре.
rCPU = 1×10
0.3640 0.5421 0.6543 0.7436 0.0342 0.8311 0.7040 0.2817 0.1163 0.5671
Начальный и генераторный типы совпадают как для графический процессор, так и для центральный процессор, поэтому массивы совпадают.
The gpurng
Состояние не сохраняет настройки преобразования, примененного для генерации нормально распределенного набора случайных чисел. Несмотря на то, что seed и тип генератора совпадают в графическом процессоре и центральном процессоре, набор нормально распределенных случайных чисел отличается.
Статистика нормального распределения случайных чисел одинаковая для GPU и CPU.
По умолчанию центральный процессор использует 'Ziggurat'
преобразование, в то время как графический процессор использует 'BoxMuller'
алгоритм для 'Threefry'
генератор. Единственным методом преобразования, поддерживаемым как на центральном процессоре, так и на графическом процессоре, является 'Inversion'
преобразование.
Изменить метод преобразования на графическом процессоре можно используя parallel.gpu.RandStream
.