軟體優化的原理與實踐系列之一向量化計算
向量化計算
軟體優化的原理與實踐系列之一
前言
用過MATLAB模擬語言的同學,都有這樣的經驗。要儘量多用向量化運算,而不要自己手寫迴圈語句,否則程式碼的執行效率會相當低下。如果你熟悉python,涉及到數值計算的時候,也要儘量的呼叫成熟的數值計算的庫,比如numpy,而不是自己用迴圈去實現。一個眾所周知的理由是,別人成熟的庫已經經過了高度的優化,我們沒有必要重複造輪子。
事實上,還有另外一個根本性的原因是,向量化計算,就即使沒有經過任何優化的程式碼,也會比非向量化運算要快。本篇博文將試圖解釋其根本性原因。
背景
現代計算機大都採用了分層的儲存器結構:暫存器,cache,主存,磁碟。CPU的計算單元直接和暫存器交換資訊,計算時需要把資料逐級傳遞到暫存器,計算得到的結果也要將結果逐級放回儲存器。基於這種儲存體系結構,程式設計師在編制軟體的時候,要儘量的減少和cache,主存,磁碟這些儲存器交換資料。我們把整個軟體的執行實行劃分為兩部分,CPU真正執行運算的時間和暫存器與儲存器交換資料的時間,即:
常見線性代數運算操作的q值
小結
把計算流程用向量,矩陣的數學語言重新描述,在此基礎上實施的計算,總是比標量計算的效率高,即使程式碼沒有經過任何優化。
相關文章
- 前端效能優化原理與實踐前端優化
- docker映象體積優化方法與實踐Docker優化
- 計算機的硬體與軟體計算機
- Redis 記憶體優化在 vivo 的探索與實踐Redis記憶體優化
- Android對so體積優化的探索與實踐Android優化
- hugepages優化記憶體原理與優點優化記憶體
- [實踐系列]Babel原理Babel
- 實踐App記憶體優化:如何有序地做記憶體分析與優化APP記憶體優化
- 邊緣計算場景下雲邊端一體化的挑戰與實踐
- Elastic-Job的執行原理及優化實踐AST優化
- App記憶體優化-實踐APP記憶體優化
- FlutterWeb效能優化探索與實踐FlutterWeb優化
- Docker 映象優化與最佳實踐Docker優化
- 物件導向軟體工程方法學實踐 (轉)物件軟體工程
- 《軟體效能測試、分析與調優實踐之路》簡介
- 企業BI實踐系列之一:前言
- 按揭貸款的計算原理與java實現Java
- RocketMQ的原理與實踐MQ
- 離線計算平臺系列之一
- HBase 讀流程解析與優化的最佳實踐優化
- 軟體測試軟環境的構建與優化優化
- 技術實踐 | 場景導向的音視訊通話體驗優化 原創優化
- angr原理與實踐(一)——原理
- Tree-Shaking效能優化實踐 – 原理篇優化
- Tree-Shaking效能優化實踐 - 原理篇優化
- Webpack原理與實踐Web
- Flutter原理與美團的實踐Flutter
- 如何成為軟體高手系列之一薦
- G7在實時計算的探索與實踐
- Facebook安卓Feed流的記憶體優化實踐安卓記憶體優化
- Nodejs Docker 映象體積優化實踐NodeJSDocker優化
- (桌面虛擬化最佳實踐–呼叫中心繫統優化之一)呼叫中心的特點優化
- 基於區塊鏈的隱私計算 - 原理和實踐區塊鏈
- Nginx 優化與防盜鏈實踐教程Nginx優化
- 淘寶小程式體驗優化:資料分析和優化實踐優化
- gprof的效能優化實踐優化
- Mysql事務原理與最佳化最佳實踐MySql
- 軟體工程——程式導向的軟體設計方法軟體工程