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