軟體優化的原理與實踐系列之一向量化計算
向量化計算
軟體優化的原理與實踐系列之一
前言
用過MATLAB模擬語言的同學,都有這樣的經驗。要儘量多用向量化運算,而不要自己手寫迴圈語句,否則程式碼的執行效率會相當低下。如果你熟悉python,涉及到數值計算的時候,也要儘量的呼叫成熟的數值計算的庫,比如numpy,而不是自己用迴圈去實現。一個眾所周知的理由是,別人成熟的庫已經經過了高度的優化,我們沒有必要重複造輪子。
事實上,還有另外一個根本性的原因是,向量化計算,就即使沒有經過任何優化的程式碼,也會比非向量化運算要快。本篇博文將試圖解釋其根本性原因。
背景
現代計算機大都採用了分層的儲存器結構:暫存器,cache,主存,磁碟。CPU的計算單元直接和暫存器交換資訊,計算時需要把資料逐級傳遞到暫存器,計算得到的結果也要將結果逐級放回儲存器。基於這種儲存體系結構,程式設計師在編制軟體的時候,要儘量的減少和cache,主存,磁碟這些儲存器交換資料。我們把整個軟體的執行實行劃分為兩部分,CPU真正執行運算的時間和暫存器與儲存器交換資料的時間,即:
常見線性代數運算操作的q值
小結
把計算流程用向量,矩陣的數學語言重新描述,在此基礎上實施的計算,總是比標量計算的效率高,即使程式碼沒有經過任何優化。
相關文章
- 前端效能優化原理與實踐前端優化
- docker映象體積優化方法與實踐Docker優化
- Android對so體積優化的探索與實踐Android優化
- Redis 記憶體優化在 vivo 的探索與實踐Redis記憶體優化
- 計算機的硬體與軟體計算機
- 實踐App記憶體優化:如何有序地做記憶體分析與優化APP記憶體優化
- [實踐系列]Babel原理Babel
- 邊緣計算場景下雲邊端一體化的挑戰與實踐
- Elastic-Job的執行原理及優化實踐AST優化
- App記憶體優化-實踐APP記憶體優化
- FlutterWeb效能優化探索與實踐FlutterWeb優化
- 《軟體效能測試、分析與調優實踐之路》簡介
- Tree-Shaking效能優化實踐 – 原理篇優化
- HBase 讀流程解析與優化的最佳實踐優化
- Nodejs Docker 映象體積優化實踐NodeJSDocker優化
- 按揭貸款的計算原理與java實現Java
- 技術實踐 | 場景導向的音視訊通話體驗優化 原創優化
- angr原理與實踐(一)——原理
- G7在實時計算的探索與實踐
- Webpack原理與實踐Web
- 基於區塊鏈的隱私計算 - 原理和實踐區塊鏈
- Docker進階與實踐之一:CgroupDocker
- 圖計算 on nLive:Nebula 的圖計算實踐
- Mysql事務原理與最佳化最佳實踐MySql
- TiDB 查詢優化及調優系列(四)查詢執行計劃的調整及優化原理TiDB優化
- 實踐torch.fx第一篇——基於Pytorch的模型優化量化神器PyTorch模型優化
- 物件導向的軟體工程方法的優勢物件軟體工程
- JVM 原理與優化 (1)JVM優化
- 軟體效能測試分析與調優實踐之路-Java應用程式的效能分析與調優-手稿節選Java
- Docker容器的原理與實踐 (下)Docker
- Flutter原理與美團的實踐Flutter
- Spring Boot Enable* 的原理與實踐Spring Boot
- Flink Sql Gateway的原理與實踐SQLGateway
- 【效能優化】quicklink:實現原理與給前端的啟發優化UI前端
- Facebook安卓Feed流的記憶體優化實踐安卓記憶體優化
- Flink 引擎在快手的深度優化與生產實踐優化
- Vue CLI 原理與實踐Vue
- MelGan原理與實踐篇