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






