亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

什么是“向量化”?

什么是“向量化”?

萬千封印 2020-02-04 16:18:23
現在好幾次,我在matlab,fortran等中都遇到過這個術語……但我從未找到任何解釋,它的含義是什么,它的作用是什么?所以我在這里問,什么是向量化?例如,“循環被向量化”是什么意思?
查看完整描述

3 回答

?
縹緲止盈

TA貢獻2041條經驗 獲得超4個贊

許多CPU具有“向量”或“ SIMD”指令集,這些指令集將相同的操作同時應用于兩個,四個或更多數據?,F代的x86芯片具有SSE指令,許多PPC芯片具有“ Altivec”指令,甚至某些ARM芯片也具有稱為NEON的矢量指令集。


“向量化”(簡化)是重寫循環的過程,以便與其同時處理(例如)數組的4個元素N / 4次,而不是處理數組的單個元素N次。


(我之所以選擇4,是因為這是現代硬件最有可能直接支持的功能;“向量化”一詞也用于描述更高級別的軟件轉換,您可以在其中完全抽象出循環并僅描述對數組而不是元素的操作。組成它們)


向量化和循環展開之間的區別: 考慮以下非常簡單的循環,該循環將兩個數組的元素相加并將結果存儲到第三個數組中。


for (int i=0; i<16; ++i)

    C[i] = A[i] + B[i];

展開此循環會將其轉換為如下形式:


for (int i=0; i<16; i+=4) {

    C[i]   = A[i]   + B[i];

    C[i+1] = A[i+1] + B[i+1];

    C[i+2] = A[i+2] + B[i+2];

    C[i+3] = A[i+3] + B[i+3];

}

另一方面,將其向量化會產生如下結果:


for (int i=0; i<16; i+=4)

    addFourThingsAtOnceAndStoreResult(&C[i], &A[i], &B[i]);

其中“ addFourThingsAtOnceAndStoreResult”是您的編譯器用來指定矢量指令的任何內部函數的占位符。請注意,某些編譯器能夠自動矢量化非常簡單的這樣的循環,通常可以通過編譯選項啟用它。更復雜的算法仍然需要程序員的幫助才能生成良好的矢量代碼。


查看完整回答
反對 回復 2020-02-04
?
忽然笑

TA貢獻1806條經驗 獲得超5個贊

向量化在科學計算中得到了很大的應用,在科學計算中,大量數據需要得到有效處理。

在實際的編程應用程序中,我知道它已在NUMPY中使用(不確定其他)。

Numpy(Python中用于科學計算的軟件包),使用矢量化來快速處理n維數組,如果使用內置的python選項來處理數組,這通常會比較慢。

雖然萬噸的解釋是在那里,這里是矢量化定義為numpy的文檔頁面

向量化描述了代碼中沒有任何顯式的循環,索引等操作-當然,這些事情只是在優化的預編譯C代碼中“在幕后”發生的。向量化代碼具有許多優點,其中包括:

  1. 向量化的代碼更簡潔,更易于閱讀

  2. 更少的代碼行通常意味著更少的錯誤

  3. 該代碼更類似于標準數學符號(通常更容易正確地對數學構造進行編碼)

  4. 向量化產生更多的“ Pythonic”代碼。沒有向量化,我們的代碼將效率低下,并且難以閱讀循環。


查看完整回答
反對 回復 2020-02-04
  • 3 回答
  • 0 關注
  • 5427 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號