<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國際加速解決方案。 廣告
                # 7.5。關于 Numba Runtime 的注意事項 > 原文: [http://numba.pydata.org/numba-doc/latest/developer/numba-runtime.html](http://numba.pydata.org/numba-doc/latest/developer/numba-runtime.html) _Numba Runtime(NRT)_ 為 _nopython 模式 _ Python 子集提供語言運行時。 NRT 是一個帶有 Python 綁定的獨立 C 庫。這允許在沒有 GIL 的情況下使用 NPM 運行時功能。目前,NRT 中實現的唯一語言功能是內存管理。 ## 7.5.1。內存管理 NRT 實現 NPM 代碼的內存管理。它使用 _ 原子引用計數 _ 進行線程安全的確定性內存管理。 NRT 維護一個單獨的`MemInfo`結構,用于存儲有關每個分配的信息。 ### 7.5.1.1。與 CPython 合作 為了讓 NRT 與 CPython 合作,NRT python 綁定提供了用于轉換導出內存區域的 python 對象的適配器。當這樣的對象用作 NPM 函數的參數時,會創建一個新的`MemInfo`并獲取對 Python 對象的引用。當 NPM 值返回到 Python 解釋器時,將檢查關聯的`MemInfo`(如果有)。如果`MemInfo`引用 Python 對象,則會釋放并返回基礎 Python 對象。否則,`MemInfo`將包裝在 Python 對象中并返回。根據類型,可能需要額外的過程。 當前實現支持 Numpy 數組和任何緩沖區導出類型。 ### 7.5.1.2。編譯器方面的合作 NRT 引用計數要求編譯器根據用法發出遞增/遞減操作。當引用計數降為零時,編譯器必須在 NRT 中調用析構函數例程。 ### 7.5.1.3。優化 允許編譯器天真地發出遞增/遞減操作。它依賴于優化傳遞來刪除冗余引用計數操作。 優化過程在塊級別上運行以避免控制流分析。它取決于 LLVM 函數優化傳遞,以簡化控制流,堆棧到寄存器和簡化指令。它的工作原理是匹配和刪除每個塊中的 incrementf 和 decref 對。 ### 7.5.1.4。怪癖 由于[引用計數優化傳遞](#nrt-refct-opt-pass)需要 LLVM 函數優化傳遞,因此傳遞在 LLVM IR 上作為文本工作。然后,優化的 IR 再次實現為新的 LLVM 內存中 bitcode 對象。 ### 7.5.1.5。調試泄漏 要調試 NRT MemInfo 中的引用泄漏,每個 MemInfo python 對象都有一個`.refcount`屬性用于檢查。要從 NRT 分配的 ndarray 獲取 MemInfo,請使用`.base`屬性。 要調試 NRT 中的內存泄漏,`numba.runtime.rtsys`定義`.get_allocation_stats()`。它返回一個 namedtuple,它包含自程序啟動以來的分配和釋放次數。檢查分配和釋放計數器是否匹配是了解 NRT 是否泄漏的最簡單方法。 ### 7.5.1.6。調試 C 中的泄漏 [numba / runtime / nrt.h](https://github.com/numba/numba/blob/master/numba/runtime/nrt.h) 的開頭有以下幾行: ```py /* Debugging facilities - enabled at compile-time */ /* #undef NDEBUG */ #if 0 # define NRT_Debug(X) X #else # define NRT_Debug(X) if (0) { X; } #endif ``` 取消定義 NDEBUG(取消注釋`#undef NDEBUG`行)可以在 NRT 中啟用斷言檢查。 啟用 NRT_Debug(用`#if 1`替換`#if 0`)將打開 NRT 內的調試打印。 ## 7.5.2。遞歸支持 在編譯一對相互遞歸函數期間,其中一個函數將包含未解析的符號引用,因為編譯器一次處理一個函數。在 LLVM 生成機器代碼之前,未分解符號的存儲器被分配并初始化為 _ 未解析符號中止 _ 函數(`nrt_unresolved_abort`)的地址。在編譯新函數時跟蹤和解析這些符號。如果錯誤阻止了這些符號的解析,則將調用中止函數,從而引發`RuntimeError`異常。 _ 未解析符號中止 _ 函數在 NRT 中定義為零參數簽名。調用者可以安全地使用任意數量的參數調用它。因此,可以安全地用于預定的被叫者。 ## 7.5.3。未來計劃 NRT 的計劃是創建一個可以鏈接到 Numba 編譯代碼的獨立共享庫,包括在 Python 解釋器中使用而不需要 Python 解釋器。為了做到這一點,我們將進行一些重構: * numba NPM 代碼引用“helperlib.c”中的靜態編譯代碼。這些功能應該轉移到 NRT。
                  <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>

                              哎呀哎呀视频在线观看