主要内容

本页采用了机器翻译。点击此处可查看最新英文版本。

parallel.gpu.RandStream.create

在 GPU 上创建独立的随机数流

说明

s = parallel.gpu.RandStream.create(gentype) 创建一个使用 gentype 指定的随机数生成器算法的单个随机数流。

注意

当您想要创建单个流时,parallel.gpu.RandStream 对象创建函数是一种更简洁的替代方法。

[s1,s2,...] = parallel.gpu.RandStream.create(gentype,NumStreams=N) 创建使用 N 指定的随机数生成器算法的 gentype 随机数流。这些流在伪随机意义上是独立的。这些流不一定独立于在其他时间创建的流。

[___] = parallel.gpu.RandStream.create(gentype,Name=Value) 还指定了除前一个语法中的输入参量之外的附加名称-值参量,以控制流的创建。例如,要根据当前时间为随机数生成器提供种子,请将 Seed 设置为 "shuffle"

示例

示例

全部折叠

您可以创建具有相同生成器、种子和正常变换的多个独立随机数流。这里,创建了几个独立的流,然后用于生成独立的随机数流。

首先,将流创建为元胞数组。

streams = parallel.gpu.RandStream.create("Philox",NumStreams=3, ...
          Seed=1,NormalTransform="Inversion",CellOutput=true)
streams =

  1×3 cell array

    {1×1 parallel.gpu.RandStream}    {1×1 parallel.gpu.RandStream}    {1×1 parallel.gpu.RandStream}

现在,您可以使用每个流来生成随机数。在此示例中,您将创建一个矩阵,其中每一行均由不同的随机数流生成。

x = zeros(3,10,"gpuArray");
for i=1:3
   x(i,:) = rand(streams{i},1,10);
end
x
x =
    0.9576    0.0054    0.2543    0.0540    0.1697    0.1365    0.7560    0.1312
    0.3084    0.3396    0.6758    0.5145    0.7909    0.7709    0.3386    0.1168
    0.5218    0.5625    0.7090    0.5854    0.5067    0.6528    0.5095    0.8777

输入参数

全部折叠

随机数生成器算法,指定为 GPU 上支持的以下三种随机数生成器算法之一。

关键字生成器多流和子流支持高精度近似周期
"Threefry""Threefry4x64_20"执行 20 轮的 Threefry 4x64 生成器2514(2256 个长度为 2258 的流)
"Philox""Philox4x32_10"执行 10 轮的 Philox 4x32 生成器2193(264 条长度为 2129 的流)
"CombRecursive""mrg32k3a"组合多重递归生成器2191(263 条长度为 2127 的流)

有关在 GPU 和 CPU 上生成随机数的差异的更多信息,请参阅 GPU 上的随机数流

示例: parallel.gpu.RandStream.create("Philox")

名称-值参数

全部折叠

将可选参量对指定为 Name1=Value1,...,NameN=ValueN,其中 Name 是参量名称,Value 是相应的值。名称-值参量必须出现在其他参量之后,但对的顺序并不重要。

在 R2021a 之前,使用逗号分隔每个名称和值,并将 Name 括在引号中。

示例: parallel.gpu.RandStream.create("Philox",Seed=10) 使用 Philox 4x32 生成器算法和种子 10 创建一个随机数流。

要创建的独立流数,指定为正整数。这些流在伪随机意义上是独立的。这些流不一定独立于在其他时间创建的流。

此函数调用中创建的流的索引,指定为正整数或正整数向量。默认值为 1:N,其中 N 是用 NumStreams 参数指定的值。

StreamIndices 提供的值必须小于或等于为 NumStreams 提供的值。

随机数种子,指定为非负整数或 "shuffle"。种子指定了算法生成随机数的起点。当您想要可重现的结果时,请将 Seed 指定为整数。将 Seed 指定为 "shuffle" 会根据当前时间为生成器设定种子。

使用 randn 函数生成正态分布随机数时使用的正常转换算法,指定为 "BoxMuller""Inversion"

gentype"Threefry""Philox" 时,默认值为 "BoxMuller"。当 gentype"CombRecursive" 时,默认值为 "Inversion"

"BoxMuller" 选项仅支持 "Threefry""Philox" 生成器类型。

将流对象作为元胞数组返回的选项,指定为 0 (false) 或 1 (true)。

输出参量

全部折叠

用于在 GPU 上生成随机数的随机数流,以 parallel.gpu.RandStream 对象的形式返回。

提示

  • 如果通过多次调用 parallel.gpu.RandStream.create 创建多个流,则这些流不一定彼此独立。要通过单独调用 parallel.gpu.RandStream.create 创建独立流:

    • 在每种情况下为 gentypeNumStreamsSeed 指定同一组值。

    • 在每种情况下,为 StreamIndices 指定一个介于 1NumStreams 值之间的不同值。

版本历史记录

在 R2011b 中推出