Resize原始碼詳解 參考Opencv4 1

2021-10-23 13:35:33 字數 950 閱讀 2841

inline uint16x8_t v_pack(const uint32x4_t& a, const uint32x4_t& b) 

uint16x4_t = vqmovn_u32(const uint32x4_t)  飽和截斷每個lane值為原來的一半

uint16x8_t = vcombine_u16(const uint16x4_t, const uint16x4_t) 組合兩個16x4得到16x8

inline uint8x16_t v_rshr_pack_u(const int16x8_t& a, const int16x8_t& b)

uint8x8_t = vqrshrun_n_s16(const int16x8_t, int a) 右移每個值a位,然後飽和截斷為原來的一半

inline int16x8_t v_mul_hi(const int16x8_t& a, const int16x8_t& b)

int16x4_t  = vshrn_n_s32(const int32x4_t,int a) 右移a位截斷

int32x4_t = vmull_s16(const int16x4_t,const int16x4_t)

struct vresizelinearvec_32s8u

};

注:opencv的resize先計算horizon方向的臨時結果,然後計算v方向得到最終的值,一次計算一行的16個值,由於資料採用定點計算方式,資料流從int32x4_t載入,到乘積之後的int16x4_t,最後匯入變為int8x8_t

附上別的部落格對一些指令的說明:

HashMap原始碼 擴容resize方法

環境 jdk1.8 resize方法原始碼如下 final node resize 初始化新容量值為舊容量值的2倍,然後與最大容量值比較,當新容量值小於最大容量值,且舊容量值大於等於預設初始化容量值,這時也對新閾值賦值為舊閾值的2倍 else if newcap oldcap 1 maximum c...

JDK原始碼 HashMap 之resize

1.hashmap原始碼閱讀目標 了解具體的資料結構 hash及衝突鍊錶 紅黑樹 和重要方法的具體實現 hashcode equals put resize.2.重要方法 hashcode 與 equals都是在abstractmap中定義的 hashcode是各元素hash的累加 h iter.n...

erlang原始碼參考

1 資料型別的記憶體 2 siyao同學一系列介紹資料型別實現的文章 erlang資料型別的表示和實現 1 資料型別回顧 erlang資料型別的表示和實現 2 eterm 和立即數 erlang資料型別的表示和實現 3 列表 erlang資料型別的表示和實現 4 boxed 物件 erlang資料型...