matlab能用python寫嗎,python和matlab矩陣運算效率_如何寫出比 MATLAB 更快的矩陣運算程序?

 2023-12-25 阅读 29 评论 0

摘要:偏個題。說到這個想起之前朋友和我說到他最近在上一個課。那個課上,教授要求他們寫Cache friendly code。尤其像矩陣這種很大塊的東西,在運算時,會導致cache根本無法完全裝下需要使用的數據。此刻,如果程序沒有設計得很有技巧,不斷地刷新c

偏個題。

說到這個想起之前朋友和我說到他最近在上一個課。

那個課上,教授要求他們寫Cache friendly code。

尤其像矩陣這種很大塊的東西,在運算時,會導致cache根本無法完全裝下需要使用的數據。

此刻,如果程序沒有設計得很有技巧,不斷地刷新cache,會需要浪費大量的時間。

matlab能用python寫嗎、所以,他們教了好幾種方法去計算矩陣,讓整個計算過程中盡量減少cache的重新載入:

以下是引用朋友給我的郵件,作者是@Tian Tan :

先給你說個好玩的。這是我上的一門課的內容,叫high performance computing

這周在超級計算機上做了一個實驗,

實驗內容是想盡辦法優化很小一段代碼,比如矩陣乘法。

先說說cache的特點。

用matlab進行矩陣運算。當訪問內存中一個element的時候,

cpu會把那個element放到cache里面,

同時還會把它臨近的elements放進cache。

衡量CPU快慢的一個標準是MFLOPS, 全稱為millions of floating point operations per second. 實驗的宗旨是寫cache friendly code. 直接上例子吧。

A, B, C都是浮點數矩陣

for (i=0; i

Python MATLAB?for (j=0; j

for (k=0; k

C[i][j] += A[i][k]*B[k][j];

這是個很簡單的矩陣乘法算法。但是這么寫效率是不高的,

原因在于當N很大的時候,比如2048, 4096,會產生cache conflict。要解釋這個術語比較麻煩,

想知道的話去看computer system: a programmer's perspective那本書的第六章。

python創建矩陣?但是矩陣乘法有別的寫法。比如

for (i=0; i

for (k=0; k

for (j=0; j

C[i][j] += A[i][k]*B[k][j];

這種寫法交換了k和j的位置,效率應該會比前面那個高些。(

numpy矩陣乘法。術語是loop permutation)

還有的寫法叫loop tiling,

tiling的實質是將大矩陣的乘法變成小的分塊矩陣的乘法。

就用上一個例子吧。

for(it=0; it

for(jt=0; jt

python set函數?for(kt=0; kt

for(i=it; i

for(j=jt; j

for(k=kt; k

C[i][j] += A[i][k]*B[k][j];

其中的T叫tiling size,能整除N。

python矩陣計算。這樣先算小矩陣的話,cache 就能裝下參與運算的elements, 對速度提升很大。

在實驗中有一道題,

經過優化之后把運行時間從49秒降到13秒了。

矩陣乘法只是最簡單例子,不同的code優化方式各異,

但是基本思想一樣。

另外,正如上面說的。

python和matlab速度。使用針對你自己的CPU的編譯器,編譯器有可能能夠識別到你的功能,做出相應的優化。

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/5/194623.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息