<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>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                # 5.3。內存管理 > 原文: [http://numba.pydata.org/numba-doc/latest/roc/memory.html](http://numba.pydata.org/numba-doc/latest/roc/memory.html) ## 5.3.1。數據傳輸 盡管 Numba 可以自動將 NumPy 陣列傳輸到設備,但只有在內核完成時始終將設備內存傳輸回主機,它才能保守。為避免不必要的只讀數組傳輸,您可以使用以下 API 手動控制傳輸: ```py numba.roc.device_array(shape, dtype=np.float, strides=None, order='C') ``` 分配一個空設備 ndarray。與`numpy.empty()`類似。 ```py numba.roc.device_array_like(ary) ``` 使用數組中的信息調用 roc.devicearray()。 ```py numba.roc.to_device(obj, context, copy=True, to=None) ``` 將 numpy ndarray 或結構化標量分配并傳輸到設備。 要將 host-&gt;設備復制為 numpy 數組: ```py ary = numpy.arange(10) d_ary = roc.to_device(ary) ``` 得到的`d_ary`是`DeviceNDArray`。 要復制 device-&gt;主機: ```py hary = d_ary.copy_to_host() ``` 要將 device-&gt;主機復制到現有數組: ```py ary = numpy.empty(shape=d_ary.shape, dtype=d_ary.dtype) d_ary.copy_to_host(ary) ``` ### 5.3.1.1。設備陣列 設備陣列引用具有以下方法。這些方法將在主機代碼中調用,而不是在 ROC-jitted 函數中調用。 ```py class numba.roc.hsadrv.devicearray.DeviceNDArray(shape, strides, dtype, dgpu_data=None) ``` on-dGPU 陣列類型 ```py copy_to_host(ary=None, stream=None) ``` 如果`ary`為`None`,則將`self`復制到`ary`或創建新的 Numpy ndarray。 傳輸是同步的:復制完成后函數返回。 始終返回主機陣列。 例: ```py import numpy as np from numba import hsa arr = np.arange(1000) d_arr = hsa.to_device(arr) my_kernel[100, 100](d_arr) result_array = d_arr.copy_to_host() ``` ```py is_c_contiguous() ``` 如果數組是 C-contiguous,則返回 true。 ```py is_f_contiguous() ``` 如果數組是 Fortran-contiguous,則返回 true。 ```py ravel(order='C') ``` 在不改變其內容的情況下展平陣列,類似于 [`numpy.ndarray.ravel()`](https://docs.scipy.org/doc/numpy/reference/generated/numpy.ndarray.ravel.html#numpy.ndarray.ravel "(in NumPy v1.16)") 。 ```py reshape(*newshape, **kws) ``` 與 [`numpy.ndarray.reshape()`](https://docs.scipy.org/doc/numpy/reference/generated/numpy.ndarray.reshape.html#numpy.ndarray.reshape "(in NumPy v1.16)") 類似,重塑陣列而不改變其內容。例: ```py d_arr = d_arr.reshape(20, 50, order='F') ``` ### 5.3.1.2。數據注冊 CPU 和 GPU 不共享相同的主內存,但是,建議將內存分配注冊到 HSA 運行時作為性能優化提示。 ```py roc.register(*arrays) ``` 注冊每個給定的數組。該函數可以在 _with-context_ 中用于自動注銷: ```py array_a = numpy.arange(10) array_b = numpy.arange(10) with roc.register(array_a, array_b): some_hsa_code(array_a, array_b) ``` ```py roc.deregister(*arrays) ``` 取消注冊每個給定的數組 ## 5.3.2。流 ```py numba.roc.stream() ``` ROC 流具有以下方法: ```py class numba.roc.hsadrv.driver.Stream ``` 異步 API 的異步流 ```py auto_synchronize() ``` 一個上下文管理器,它等待此流中的所有命令執行并在退出上下文時提交任何掛起的內存傳輸。 ```py synchronize() ``` 同步流。 ## 5.3.3。共享內存和線程同步 必要時,可以在設備上分配有限數量的共享內存,以加快對數據的訪問。該存儲器將在屬于給定組的所有工作項之間共享(即,可讀和可寫),并且具有比常規設備存儲器更快的訪問時間。它還允許工作項在給定的解決方案上進行合作。您可以將其視為手動管理的數據緩存。 與傳統的動態內存管理不同,內存在內核持續時間內分配一次。 ```py numba.roc.shared.array(shape, type) ``` 在設備上分配給定 _ 形狀 _ 和 _ 類型 _ 的共享數組。必須在設備上調用此函數(即,從內核或設備函數)。 _shape_ 是整數或表示數組維度的整數元組。 _ 類型 _ 是需要存儲在數組中的元素的 [Numba 類型](../reference/types.html#numba-types)。 可以像任何普通設備陣列一樣讀取和寫入返回的類似陣列的對象(例如通過索引)。 一個常見的模式是讓每個工作項填充共享數組中的一個元素,然后等待所有工作項完成使用:func:`.barrier`。 ```py numba.roc.barrier(scope) ``` `scope`參數指定同步級別。將`scope`設置為`roc.CLK_GLOBAL_MEM_FENCE`或`roc.CLK_LOCAL_MEM_FENCE`,以分別在訪問全局內存或本地內存時同步工作組中的所有工作項。 ```py numba.roc.wavebarrier() ``` 跨波前創建執行屏障以強制同步點。 也可以看看 [矩陣乘法示例](examples.html#roc-matmul)。
                  <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>

                              哎呀哎呀视频在线观看