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

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                # 1.9。提前編譯代碼 > 原文: [http://numba.pydata.org/numba-doc/latest/user/pycc.html](http://numba.pydata.org/numba-doc/latest/user/pycc.html) 雖然 Numba 的主要用例是[即時編譯](../glossary.html#term-just-in-time-compilation),但它也為[提前編譯](../glossary.html#term-ahead-of-time-compilation)(AOT)提供了便利。 ## 1.9.1。概述 ### 1.9.1.1。好處 1. AOT 編譯生成一個編譯的擴展模塊,它不依賴于 Numba:您可以在沒有安裝 Numba 的機器上分發模塊(但需要 Numpy)。 2. 運行時沒有編譯開銷(但請參閱`@jit` [緩存](jit.html#jit-cache)選項),也沒有導入 Numba 的任何開銷。 也可以看看 編譯的擴展模塊在 [Python 打包用戶指南](https://packaging.python.org/en/latest/extensions/)中討論。 ### 1.9.1.2。限制 1. AOT 編譯只允許常規功能,而不是 [ufuncs](../glossary.html#term-ufunc) 。 2. 您必須明確指定功能簽名。 3. 每個導出的函數只能有一個簽名(但您可以使用不同的名稱導出多個不同的簽名)。 4. AOT 編譯為您的 CPU 架構系列生成通用代碼(例如“x86-64”),而 JIT 編譯生成針對您的特定 CPU 模型優化的代碼。 ## 1.9.2。用法 ### 1.9.2.1。獨立示例 ```py from numba.pycc import CC cc = CC('my_module') # Uncomment the following line to print out the compilation steps #cc.verbose = True @cc.export('multf', 'f8(f8, f8)') @cc.export('multi', 'i4(i4, i4)') def mult(a, b): return a * b @cc.export('square', 'f8(f8)') def square(a): return a ** 2 if __name__ == "__main__": cc.compile() ``` 如果您運行此 Python 腳本,它將生成名為`my_module`的擴展模塊。根據您的平臺,實際文件名可能是`my_module.so`,`my_module.pyd`,`my_module.cpython-34m.so`等。 生成的模塊有三個功能:`multf`,`multi`和`square`。 `multi`以 32 位整數(`i4`)運行,而`multf`和`square`以雙精度浮點運算(`f8`): ```py >>> import my_module >>> my_module.multi(3, 4) 12 >>> my_module.square(1.414) 1.9993959999999997 ``` ### 1.9.2.2。 Distutils 整合 您還可以使用 distutils 或 setuptools 在`setup.py`腳本中集成擴展模塊的編譯步驟: ```py from distutils.core import setup from source_module import cc setup(..., ext_modules=[cc.distutils_extension()]) ``` 上面的`source_module`是定義`cc`對象的模塊。像這樣編譯的擴展會自動包含在 Python 項目的構建文件中,因此您可以將它們分發到二進制包(如 wheel 或 Conda 包)中。請注意,在使用 conda 的情況下,用于 AOT 的編譯器需要是 Anaconda 發行版中可用的編譯器。 ### 1.9.2.3。簽名語法 導出簽名的語法與`@jit`裝飾器中的語法相同。您可以在[類型](../reference/types.html#numba-types)參考中閱讀更多相關信息。 以下是在 1d 數組上導出二階中心差異的實現的示例: ```py @cc.export('centdiff_1d', 'f8[:](f8[:], f8)') def centdiff_1d(u, dx): D = np.empty_like(u) D[0] = 0 D[-1] = 0 for i in range(1, len(D) - 1): D[i] = (u[i+1] - 2 * u[i] + u[i-1]) / dx**2 return D ``` 您也可以省略返回類型,然后由 Numba 推斷: ```py @cc.export('centdiff_1d', '(f8[:], f8)') def centdiff_1d(u, dx): # Same code as above ... ```
                  <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>

                              哎呀哎呀视频在线观看