矩陣結合律對于如何影響我們的生活,下面是我個人的一點淺薄理解。
- 1、使得計算機設計得更簡單。
- 2、加速計算機運算
忙碌的996
初識矩陣時你是否困擾過:為什么搞出矩陣這樣的怪物?不易懂,計算繁瑣,不夠直觀?
浮于書本表面很難直接理解它產生的歷史原因,直到我做足夠多的計算機工程項目后偶然頓悟了。妙呀~數學科學家才是真正的怪物。
寫一元一次方程求解,嘩啦啦的程序代碼巧了一堆。 在遇到二元一次方程求解,又是嘩啦啦的一堆。 寫梯度下降法,N維空間,若干個for循環語句,寫的我暈乎乎的。
最重要的是,上面三個案例代碼根本沒法復用代碼,程序員的996生活由此而來。
更簡單
Matlab為什么是工程科學家的伙伴,它利用矩陣的表達方法,將“運算”做了統一,工程科學家只要提供合適的“矩陣描述”,就能得出想要的結果, 將“計算機算法實現”和“工程計算”完全分離。以至于Matlab上運算就如同紙上寫表達式一樣簡單。
更迅速
矩陣運算使得計算方法變得簡單后,使得它成為計算機運算基礎的可能,雖然這種方法建立在繁瑣的逐行乘以逐列的基礎上,可以用硬件去實現繁瑣的乘法,矩陣乘法AB可以做為計算機最小的運算單元,就好像用二極管的高低電平表達0、1一樣。
有了計算機矩陣運算的硬件,接下來的一步是如何能再提高矩陣的運算速度。
看看矩陣有什么奇妙的特性:
- 交換律(AB)C=(AC)B,恩~不支持。
- 結合律(AB)C=A(BC),不錯,幸好支持結合律運算。
下面這張圖是直觀感受結合律,2x2的三個矩陣驗算表達式。
至于推廣到任意矩陣去證明,《線性代數與應用》書中證明矩陣結合律過程如下。
好了,既然滿足結合律,那么計算機是不是可以用多線程的方式去完成, 比如ABCD這4個矩陣,我是不是可以分割成2個線程去完成?
ABCD=(AB)(CD)
下面隨機生成4組44x44的矩陣,Y1、Y2得到結果相同(44x44=1936個位置都相同)。
計算機最適合計算重復的工作,顯卡是把重復運算發揮得淋漓盡致的。顯卡有若干個流處理器,流處理器可以看成是多個運算器,相當于CPU里的ALU,由于CPU做的是通用運算,要面臨多種應用領域,所以ALU設計的比流處理器復雜。個人電腦16核心就嗨上天了,服務器也就100多個核心,而顯卡最低端的都有數百個流處理器,NVIDIA AMD高端顯卡3000~4000。
線程是應用程序的概念,永遠不可能某線程獨占CPU處理資源,CPU有調度的過程。而放在顯卡流處理器上就不一樣的,天生就為矩陣運算而生,(AB)和(CD)劃分到兩個流處理器上是完全占用流處理器資源的。
矩陣運算可裁剪
還是上面的ABCD運算,如果把矩陣A看成游戲里人物的模型,B看成貼圖、C看成貼圖模糊、D看成模型高光處理。
那對于運算量不足的計算機就可以選擇性地打開和關閉效果。模型高光如火焰效果、某玄幻小說寶物修煉到高等級的特效。
運算量不足的機器可以省略D過程,僅計算ABC,特效除了視覺效果外,不影響游戲的運算邏輯。