首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

VDSP (BF561) 浮點運算系列(16):fract2x16 向量類型與 SIMD 運算

     編輯:關於C++

BF561 擁有兩個 16-bit MAC 單元,可在單週期內並行執行兩個 fract16 運算。VDSP 引入 fract2x16 類型,將兩個 fract16 打包於 32-bit 整數的高低半部,支援 SIMD 風格運算。

類型定義

typedef int _raw32;
typedef _raw32 raw2x16;
typedef raw2x16 fract2x16;

構造與拆解函數

  • fract2x16 compose_fr2x16(fract16 f1, fract16 f2):打包為 {f1, f2}(高 16 位為 f1,低 16 位為 f2)。底層呼叫 __builtin_compose_2x16。
  • fract16 high_of_fr2x16(fract2x16 x):取高半部,對應 __builtin_extract_hi。
  • fract16 low_of_fr2x16(fract2x16 x):取低半部,對應 __builtin_extract_lo。

組合語言展開範例

result = __builtin_compose_2x16(0x7FFF, 0x8000);
// 產生:
R0 = -32768;  // 低半部
R0.H = 32767; // 高半部
[FP + 16] = R0;

除法器視窗需手動切換型別查看高低半部值。直接使用內建函數 __builtin_compose_2x16、__builtin_extract_hi/lo 可避免函數呼叫開銷。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved