在GPU上的随机数流

默认情况下,随机数生成功能兰特兰迪randn相比那些在CPU上一个GPU用于计算不同生成器设置。你可以改变随机数生成器的行为以产生对GPU和CPU的随机数序列的重复性。

下表总结了GPU和CPU上的客户端和工人MATLAB的默认设置®会议:

发电机 种子 普通变换
客户端CPU “龙卷风”要么'mt19937ar' 0 “通灵塔”
工人CPU 'Threefry'要么'Threefry4x64_20' 0 “反转”
GPU(客户端或工人) 'Threefry'要么'Threefry4x64_20' 0 'BoxMuller'

在大多数情况下,它并不重要,关于GPU默认的随机数生成器是不一样的,客户端或工人CPU的默认发电机。但是,如果你需要复制的GPU和CPU两者相同的结果,您可以设置相应的发电机。

客户端CPU和GPU

在新鲜MATLAB会话,MATLAB生成CPU和GPU上的随机数的不同的序列。

RC =兰特(1,4)
RC = 0.8147 0.9058 0.1270 0.9134
RG =兰特(1,4,'gpuArray'
RG = 0.3640 0.5421 0.6543 0.7436

如果你需要生成的GPU和CPU两个随机数相同的序列,可以设置生成器设置相匹配。

有三种随机数生成器可在GPU算法:'Threefry''Philox''CombRecursive'。所有被支持的CP万博1manbetxU。下表列出了这些发电机及其性能的算法。

关键词 发电机 多流和支流支持万博1manbetx 全精度近似周期
'Threefry'要么'Threefry4x64_20' Threefry 4x64发生器20发 2514(2256长度为2的流258
'Philox'要么'Philox4x32_10' Philox 4x32发生器10发 2193(264长度为2的流129
'CombRecursive'要么'mrg32k3a' 联合多个递归发生器 2191(263长度为2的流127

您可以使用RNGgpurng设定CPU和GPU上的生成器算法和种子,分别。

SC = RNG(1,'Threefry');RC =兰特(1,4)
RC = 0.1404 0.8197 0.1073 0.4131
SG = gpurng(1,'Threefry');RG =兰特(1,4,'gpuArray'
RG = 0.1404 0.8197 0.1073 0.4131

兰特兰迪现在生成客户端CPU和GPU上的随机数的相同的序列。

工人CPU和GPU

并行工人CPU使用相同的默认随机数生成器的类型和种子作为客户端GPU和工人GPU,如果有一个。GPU和CPU不共享相同的流。默认,兰特兰迪生成数字对GPU和CPU的工人相同的序列。

这些设置是从这些客户端CPU上的不同。欲了解更多信息,请参阅在工人控制随机数流

如果你需要在每个工人产生不同的随机数,就可以改变发电机的设置。在这个例子中,每个工人上创建其GPU和CPU相同的序列,但不同的序列上每个工人生成。

P = parpool(2);SPMDRNG(labindex,'Threefry');RC =兰特(1,4)gpurng(labindex,'Threefry');RG =兰特(1,4,'gpuArray'结束删除(P)

正态分布的随机数

对于正态分布的随机数使用创建randn功能,MATLAB客户机CPU,一个工人CPU和GPU上产生不同的结果。均匀随机数的成正态分布的随机数的转换是由控制NormalTransform设置。您也可以利用图形处理单元控制该parallel.gpu.RandStream

在客户端CPU,默认'NormalTransform'设置“通灵塔”。一个工人CPU,默认设置是“反转”

除另有规定外,GPU的代码使用'BoxMuller'变换为'Threefry''Philox'发电机和“反转”变换为'CombRecursive'发电机。

您可以设置CPU在同一发电机和变换和GPU获得相同的randn序列。唯一的变换既支持对CPU和GPU是万博1manbetx“反转”转变。

SC = RandStream('Threefry''NormalTransform'“反转”'种子',1);RandStream.setGlobalStream(SC)SG = parallel.gpu.RandStream('Threefry''NormalTransform'“反转”'种子',1);parallel.gpu.RandStream.setGlobalStream(SG);RC = randn(1,4)
RC = -1.0783 0.9144 -1.2412 -0.2196
RG = randn(1,4,'gpuArray'
RG = -1.0783 0.9144 -1.2412 -0.2196

也可以看看

|||

相关话题