快取注意事項
快取注意事項
Numba支援將編譯後的函式快取到檔案系統中,以供將來使用相同的函式。
實施
通過儲存編譯後的目的碼(可執行程式碼的ELF物件)來完成快取。通過使用目的碼,由於不需要編譯,因此快取的函式具有最小的開銷。快取的資料儲存在快取目錄下(請參閱NUMBA_CACHE_DIR)。快取的索引儲存在.nbi檔案中,每個函式有一個索引,並且列出了為該函式編譯的所有load過載簽名。每load過載一個檔案,目的碼被儲存在具有.nbc副檔名檔案中。兩個檔案中的資料都以pickle序列化。
注意
在Python <= 3.7上,Numbapickle使用純Python Pickler進行擴充套件。要使用速度更快的C Pickler,請 從pip安裝pickle5。pickle5向後移植Python 3.8 Pickler功能。
快取要求
開發人員應注意允許快取功能的要求,以確保正在使用的功能與快取相容。
可快取功能的要求:
• LLVM模組必須是獨立的,這意味著如果不連結到其它已編譯的單元,則它不能依賴其它模組。
• 唯一允許的外部符號來自 NRT或系統庫中的其它常見符號(即libc和libm)。
除錯說明:
• inttoptr在LLVM IR或 target_context.add_dynamic_add()Python的降低程式碼中查詢的用法。指示執行時runtime地址的潛在用途。並非所有用途都是有問題的,有些用途是必需的。僅將常量整數轉換為指標會影響快取。
• 錯誤使用動態地址或動態標誌可能會導致段錯誤。
• 連結順序很重要,因為連結後會刪除未使用的符號。連結應從依賴關係圖的葉節點開始。
與快取相容的功能
明確驗證了以下功能可用於快取。
• cpu和parallel目標的ufuncs和gufuncs
• 並行加速器功能(即parallel=True)
快取限制
這是快取的已知限制的列表:
• 快取無效。無法識別在另一個檔案中定義的符號中的更改。
• 全域性變數被視為常量。快取將儲存編譯時使用的全域性變數中的值。在快取載入時,快取的函式將不會重新繫結到全域性變數的新值。
快取共享
在另一臺計算機上共享和重用快取目錄中的內容是安全的。快取會在編譯過程中記錄CPU模型和可用的CPU功能。如果CPU型號和CPU功能不完全匹配,則不會考慮快取內容。(參閱NUMBA_CPU_NAME)
如果快取記憶體目錄在網路檔案系統上共享,僅當檔案替換操作是檔案系統的原子操作時,併發讀取/寫入快取記憶體才是安全的。Numba始終首先寫入唯一的臨時檔案,然後用該臨時檔案替換目標快取檔案路徑。Numba可以容忍丟失的快取檔案和丟失的快取條目。
快取清除
修改相應的原始檔後,快取將失效。但是,有時有需要手動清除快取目錄。例如,由於未修改原始檔,因此無法識別編譯器中的更改。
要清除快取,可以簡單地刪除快取目錄。
在執行Numba應用程式時,刪除快取目錄可能會導致 OSError在編譯站點引發異常。
相關文章
- 快取使用中的注意事項快取
- spring-data-jpa使用快取的注意事項Spring快取
- fgets讀取檔案時的注意事項
- RandomAccessFile注意事項randomMac
- nginx 注意事項Nginx
- @Lombok注意事項Lombok
- 使用parallel注意事項Parallel
- 字串分割注意事項字串
- Xlistview的注意事項View
- 函式注意事項函式
- DUPLICATE DATABASE 注意事項Database
- bootstrap引用注意事項boot
- ovm搭建注意事項
- CSP 考前注意事項
- 生產注意事項
- 電量注意事項
- 部署專案注意事項
- iOS 程式碼注意事項iOS
- 換工作的注意事項
- 使用Google Fonts注意事項Go
- 程式設計注意事項程式設計
- Go 切片使用注意事項Go
- Android ShortCuts注意事項Android
- 伺服器注意事項伺服器
- 筆記:MMM注意事項筆記
- AIX配置NFS注意事項AINFS
- godoc 技巧與注意事項Go
- javascript程式碼注意事項JavaScript
- shell 指令碼注意事項指令碼
- Shrink操作的注意事項
- 使用CocosBuilder注意事項UI
- 日常工作注意事項
- jdk安裝注意事項JDK
- Jquery編寫注意事項jQuery
- ios開發注意事項iOS
- SQL TUNNING 注意事項SQL
- samba安裝 注意事項Samba
- removeChild使用時注意事項REM