Python為何在科學計算領域打敗Fortran? - cerfacs
為什麼越來越多以前在 Fortran 中執行的時間要求嚴格的科學計算現在用 Python 這種速度較慢的語言編寫?
Python 以速度慢著稱,即比 Fortran、C 或 Rust 等編譯語言慢得多。普通的 Python 比 Fortran 慢得多。
然而,這種比較毫無意義,因為 Python 的科學用途並不依賴於普通的 Python。相反,Python 被用作粘合層,依賴於編譯的最佳化包,將它們串在一起以執行目標計算。
科學計算中最廣泛的軟體包可能是NumPy,即Numerical Python。
顧名思義,數字資料是透過這個包來操作的,而不是在普通的Python中,在幕後所有繁重的工作都是由C/C++或Fortran編譯的例程完成的。
從本質上講,Python被用來將一個快速例程指向正確的方向(即指向正確的記憶體地址),僅此而已。
比較brute-force(Fortran)和基於KDtree的(Python / NumPy / SciPy)效能時間:
- 10億個細胞
- 1000萬個多孔的邊界節點
- 1.8萬個穿孔
brute-force的版本執行了6小時30分鐘;而基於Kdtree的版本呢?只用了4分鐘,幾乎快了100倍,結果的差異只在機器精度的層面上出現。
詳細點選標題
Reddit網友評論:
1. 這與我的經歷產生了共鳴。在我之前的研究小組中,有一個模擬量很大的專案在不到兩個月的時間內從構思到手稿,因為它能夠利用 Numpy、Numba 和 Scipy。如果它是用另一種語言完成的,我很難相信它會這麼快釋出(即使最終的模擬可能會稍微快一點)。
2. Numpy是~120萬行的C語言,不是因為它是一個薄薄的BLAS封裝,而是因為它本身就是一個大型的數值庫。
numpy的一部分,np.linalg使用BLAS後端,以及dot、matmul和tensordot。你的普通函式 "ufuncs "如加、減、乘、除根本不使用BLAS,只是一個C語言的for迴圈。在最近的numpy中,exp也使用AVX-512(它是在1.18或1.19中新增的,我忘了是哪個)。
如果你在純numpy中做arr1 * arr2,你可以在低階語言中透過不分配來打敗它,儘管np.mul(arr1, arr2, out=out)讓你在numpy中獲得不分配的風格,而且numpy記憶體池可能使分配基本免費。
然而,在低階語言中,你將有能力分割出arr1, arr2並進行多執行緒操作,而numpy不能做到這一點。
另一方面,numpy不遺餘力地以最佳順序執行記憶體訪問,許多操作(檢視等)基本上是免費的,它記錄了步長和迭代順序而不是移動資料。C++庫(BOOST、Eigen)沒有這些最佳化。
編譯器也可能在低階語言中融合迴圈,這在numpy中非常明確地不會發生。
還有一些操作在numpy中是不存在的,在低階語言中可以很容易地實現,例如用一個矩陣乘以一個對角線矩陣,你把它作為一個向量儲存。
3.Python中的計算任務通常利用高度最佳化的庫。Python的成功一直取決於兩件事...
- 開發速度是程式設計中存在的一個問題。
- 對非時間限制的程式碼進行執行時間最佳化總是在浪費開發時間。
Python在科學領域勝出,因為它提供了一個完整的軟體包,由於其直觀的成語風格,開發速度快,由於其有效利用低階開發庫的模組化,執行速度快。
相關文章
- 計算資源有限的人如何在深度學習領域成長?深度學習
- 北鯤雲超算平臺如何成為就生命科學雲端計算領域先行者?
- Maple—多領域系統級建模模擬和科學計算軟體
- 北鯤雲端計算,用技術成就生物科學領域發展
- 為什麼Python是資料科學領域的首選語言?Python入門學習Python資料科學
- Python---資料科學領域常用的15個Python包Python資料科學
- 資料科學領域,你該選 Python 還是 R ?資料科學Python
- [python][科學計算][matplotlib]使用指南Python
- [python][科學計算][pandas]使用指南Python
- [python][科學計算][numpy]使用指南Python
- 雲端計算深度挖掘“創新潛力”,北鯤雲深耕生命科學領域
- Python科學計算之Numpy陣列生成與運算Python陣列
- NumPy科學計算庫
- AI再奪諾獎!2024諾貝爾化學獎授予蛋白質計算領域三位科學家AI
- 在資料科學領域,Python語言和R語言有何區別?資料科學PythonR語言
- Python科學測量與計算庫Pymeasure: 控制你的儀器進行自動測試和科學計算Python
- 北鯤雲超算平臺提供生命科學領域所需要的哪些軟體?
- 北鯤雲超算:以HPC解決方案助力生命科學領域研究發展
- 生命科學領域新工具:北鯤雲超算平臺 ,夢啟航的地方
- 良心之作,計算機領域必看書籍計算機
- 北鯤雲超算平臺解決生物科學領域困境,探索更多可能性
- Anaconda 2019.03 釋出,Python 跨平臺科學計算軟體Python
- 計算機、數學、運籌學等領域的32個重要演算法計算機演算法
- 想從事資料科學領域,需要多少數學知識?資料科學
- 想入門資料科學領域?明確方向更重要資料科學
- ARM是計算領域重要動態的中心
- 多雲管理服務或成為雲端計算領域為數不多的風口
- 科學計算:Python 分析資料找問題,並圖形化Python
- 學Python需要多久?應用領域有哪些?Python
- 程式設計師如何在社交領域成長快一點?程式設計師
- 生命科學領域使用高效能運算,有效解決現有醫藥企業問題
- Wolfram Mathematica 13(科學計算軟體)
- 什麼是雲端計算領域的 orphaned resources
- 重新審視雲端計算領域的“鼻祖”AWS
- DDD領域驅動設計:領域事件事件
- python都應用於哪些領域?Python開發學習Python
- 北鯤雲探索雲端計算在生命科學領域更多的應用場景
- 利用Python科學計算處理物理問題(和物理告個別)Python