我想創建一個房間脈沖回應的特例。我正在關注這個房間脈沖回應生成器的實作。我也在按照本教程將 c \c 與 python 集成。
根據教程:
- 您希望通過將關鍵部分轉換為 C 來加速 Python 代碼的特定部分。C 不僅具有更快的執行速度,而且還允許您擺脫 GIL 的限制,前提是您要小心.
但是,在查看 MATLAB 示例時,我看到 cpp 代碼段所做的只是常規回圈和數學計算。在這個例子或任何其他例子中,c\cpp 會以何種方式比 python\MATLAB 更快?任何通用 c\cpp 代碼會運行得更快嗎?如果是這樣,為什么?如果沒有,在選擇 ac\cpp 段實施時,我需要尋找哪些指標?c\cpp 中哪些操作更快?
uj5u.com熱心網友回復:
為什么使用 C 來加速 Python
C 代碼編譯成機器代碼。與解釋器語言相比,這使其速度更快(但是,如果您不知道自己在做什么,并非所有用 C 撰寫的代碼都比 Python 代碼快)。在 C 中,您可以直接訪問資料指標并在它們上使用SIMD指令以使其速度提高數倍。您還可以對回圈和代碼進行多執行緒處理,以使它們運行得更快(顯式多執行緒或OpenMP等工具)。你不能用高級語言做這些事情(至少是正確的)。
何時使用 C 加速 Python
并非代碼的每一部分都值得優化。您應該只優化計算量大并且是程式瓶頸的部分。這些部分可以用 C 或 C 撰寫,并通過使用系結(例如使用pybind11 )暴露給 python。PyTorch和TensorFlow等大型機器學習庫可以做到這一點。
專用硬體
有時擁有一個優化良好的 C CPU 代碼是不夠的。然后您可以評估您的問題,如果合適,您可以使用專用硬體。這些硬體可以從低級(如 FPGA)到高級硬體,如我們系統上通常擁有的專用顯卡(如NVIDIA GPU 的CUDA編程)。
低級和高級語言的正則代碼差異
即使您不使用多執行緒或 SIMD 操作,使用可編譯的語言也有很大的優勢。例如,與在 Python 陣列上回圈或在 MATLAB 中std::vector使用相比,在 C 陣列或 C 中回圈可以快 100 倍以上(最近JIT 編譯被用于加速高級語言,但仍然存在差異)。這有很多原因,其中一些是在編譯時識別并具有連續陣列的基本資料型別。這就是為什么人們建議在簡單的 Python 回圈上使用 Numpy 向量化操作(對于 MATLAB 也是如此)。for
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/412030.html
標籤:
上一篇:具有輔助注入和刀柄的共享視圖模型
下一篇:如何先按列填充單元格?
