<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                # 3.7。隨機數生成 > 原文: [http://numba.pydata.org/numba-doc/latest/cuda/random.html](http://numba.pydata.org/numba-doc/latest/cuda/random.html) Numba 提供可在 GPU 上執行的隨機數生成算法。然而,由于 NVIDIA 如何實施 cuRAND 的技術問題,Numba 的 GPU 隨機數發生器并非基于 cuRAND。相反,Numba 的 GPU RNG 是 [xoroshiro128 +算法](http://xoroshiro.di.unimi.it/)的實現。 xoroshiro128 +算法的周期為`2**128 - 1`,短于 cuRAND 默認使用的 XORWOW 算法的周期,但 xoroshiro128 +仍然通過隨機數生成器質量的 BigCrush 測試。 在 GPU 上使用任何 RNG 時,務必確保每個線程都有自己的 RNG 狀態,并且已經初始化它們以生成非重疊序列。 numba.cuda.random 模塊提供了執行此操作的主機功能,以及用于獲取均勻或正態分布的隨機數的 CUDA 設備功能。 注意 Numba(如 cuRAND)使用 &lt;cite&gt;Box-Muller 變換&lt; https://en.wikipedia.org/wiki/Box%E2%80%93Muller_transform&gt;&lt;/cite&gt; 從均勻發生器生成正態分布的隨機數。但是,Box-Muller 會生成一對隨機數,而當前的實現僅返回其中一個。結果,生成正態分布值是均勻分布值的一半。 ```py numba.cuda.random.create_xoroshiro128p_states(n, seed, subsequence_start=0, stream=0) ``` 返回為 n 個隨機數生成器初始化的新設備數組。 這初始化了 RNG 狀態,使得陣列中的每個狀態對應于主序列中彼此分開 2 ** 64 步的子序列。因此,只要沒有 CUDA 線程請求超過 2 ** 64 個隨機數,該函數產生的所有 RNG 狀態都保證是獨立的。 subsequence_start 參數可用于使第一 RNG 狀態前進 2 ** 64 步的倍數。 | 參數: | * **n** ( [_int_](https://docs.python.org/3/library/functions.html#int "(in Python v3.7)")) - 產生 * **種子**的 RNG 狀態數 _uint64_ ) - 發生器列表的起始種子 * **subsequence_start** ( _uint64_ ) - * **流**( _CUDA 流 _) - 在 上運行初始化內核的流 | | --- | --- | ```py numba.cuda.random.init_xoroshiro128p_states(states, seed, subsequence_start=0, stream=0) ``` 在 GPU 上為并行生成器初始化 RNG 狀態。 這初始化了 RNG 狀態,使得陣列中的每個狀態對應于主序列中彼此分開 2 ** 64 步的子序列。因此,只要沒有 CUDA 線程請求超過 2 ** 64 個隨機數,該函數產生的所有 RNG 狀態都保證是獨立的。 subsequence_start 參數可用于使第一 RNG 狀態前進 2 ** 64 步的倍數。 | 參數: | * **狀態**( _1D DeviceNDArray_ _,_ _dtype = xoroshiro128p_dtype_ ) - RNG 狀態數組 * **種子**( _uint64_ ) - 發生器列表的起始種子 | | --- | --- | ```py numba.cuda.random.xoroshiro128p_uniform_float32 ``` 返回范圍[0.0,1.0)中的 float32 并前進`states[index]`。 | 參數: | * **狀態**( _1D 陣列 _ _,_ _dtype = xoroshiro128p_dtype_ ) - RNG 狀態數組 * **指數**( _int64_ ) - 更新狀態的偏移 | | --- | --- | | 返回類型: | FLOAT32 | | --- | --- | ```py numba.cuda.random.xoroshiro128p_uniform_float64 ``` 返回范圍[0.0,1.0)中的 float64 并前進`states[index]`。 | 參數: | * **狀態**( _1D 陣列 _ _,_ _dtype = xoroshiro128p_dtype_ ) - RNG 狀態數組 * **指數**( _int64_ ) - 更新狀態的偏移 | | --- | --- | | 返回類型: | float64 | | --- | --- | ```py numba.cuda.random.xoroshiro128p_normal_float32 ``` 返回正態分布的 float32 并前進`states[index]`。 使用 Box-Muller 變換從高斯均值= 0 和 sigma = 1 繪制返回值。這使 RNG 序列前進兩步。 | 參數: | * **狀態**( _1D 陣列 _ _,_ _dtype = xoroshiro128p_dtype_ ) - RNG 狀態數組 * **指數**( _int64_ ) - 更新狀態的偏移 | | --- | --- | | 返回類型: | FLOAT32 | | --- | --- | ```py numba.cuda.random.xoroshiro128p_normal_float64 ``` 返回正態分布的 float32 并前進`states[index]`。 使用 Box-Muller 變換從高斯均值= 0 和 sigma = 1 繪制返回值。這使 RNG 序列前進兩步。 | 參數: | * **狀態**( _1D 陣列 _ _,_ _dtype = xoroshiro128p_dtype_ ) - RNG 狀態數組 * **指數**( _int64_ ) - 更新狀態的偏移 | | --- | --- | | 返回類型: | float64 | | --- | --- | ## 3.7.1。示例 這是一個使用隨機數生成器的示例程序: ```py from __future__ import print_function, absolute_import from numba import cuda from numba.cuda.random import create_xoroshiro128p_states, xoroshiro128p_uniform_float32 import numpy as np @cuda.jit def compute_pi(rng_states, iterations, out): """Find the maximum value in values and store in result[0]""" thread_id = cuda.grid(1) # Compute pi by drawing random (x, y) points and finding what # fraction lie inside a unit circle inside = 0 for i in range(iterations): x = xoroshiro128p_uniform_float32(rng_states, thread_id) y = xoroshiro128p_uniform_float32(rng_states, thread_id) if x**2 + y**2 <= 1.0: inside += 1 out[thread_id] = 4.0 * inside / iterations threads_per_block = 64 blocks = 24 rng_states = create_xoroshiro128p_states(threads_per_block * blocks, seed=1) out = np.zeros(threads_per_block * blocks, dtype=np.float32) compute_pi[blocks, threads_per_block](rng_states, 10000, out) print('pi:', out.mean()) ```
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看