欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

一種基于SIMD的4bit算子加速計算的方法與流程

文檔序號:40646521發(fā)布日期:2025-01-10 18:52閱讀:5來源:國知局
一種基于SIMD的4bit算子加速計算的方法與流程

本發(fā)明屬于數(shù)據處理,特別涉及一種基于simd的4bit算子加速計算的方法。


背景技術:

1、現(xiàn)有技術中,低比特計算是指輸入輸出限定為4bit,減少內存。simd:singleinstruction?multiple?data,是單指令流多數(shù)據流,一次運算指令可以執(zhí)行多個數(shù)據流,可以提高程序的運算速度。(每個寄存器512bit位寬)

2、simd并行計算:多數(shù)據流并行計算,提高計算效率。

3、然而,現(xiàn)有技術的主要缺陷在于:通道為奇數(shù)時,地址跳轉無法以半個字節(jié)偏移

4、此外,現(xiàn)有技術中的常用術語包括:

5、feature_shape:輸入數(shù)據的形狀,抽象理解為多維度數(shù)據,從左到右依次是從高維到低維(nhwc)n:一次處理featuremap數(shù)量,設置為1;h:輸入數(shù)據的高,w:輸入數(shù)據的寬,c:輸入通道數(shù)。


技術實現(xiàn)思路

1、為了解決上述問題,本技術的目的在于:將基于simd,通道為奇數(shù)情況,解決地址跳轉問題。

2、具體地,本發(fā)明提供一種基于simd?4bit算子加速計算的方法,所述方法中:

3、4bit計算邏輯是:計算機計算過程中最小計算單位為1個字節(jié)=8bit,1個字節(jié)中存儲兩個4bit數(shù)據,分為高、低4bit數(shù)據;地址跳轉單位字節(jié),需要根據索引計算出正確地址,以及地址所存儲數(shù)據;

4、所述方法適用于各種算法,核心在于4bit數(shù)據的讀取與保存;

5、其中,加法算子:val=(a+b)*scale;輸入形狀(ibatch,ih,iw,ic);s1:索引計算,每次32個通道,存儲于寄存器中,即第n個數(shù)據,然后根據該索引計算出地址偏移;根據h、w、c計算出數(shù)據索引idx,即根據第h行,第w列,第c個通道點公式計算:idx=h*iw*ic+w*ic+c;計算得到數(shù)據索引;

6、像素索引得到數(shù)據索引,表示為:idx=h*iw*ic+w*ic+c;

7、地址偏移得到地址偏移,idx*4能夠計算一共偏移bit數(shù),除以8,得到地址跳轉的字節(jié)數(shù),表示為:ptr_offset=idx*4bit/8;

8、bit索引計算得到字節(jié)中bit位置,高、低4bit,表示為:bit_idx=idx%2;s2:輸入數(shù)據讀?。?/p>

9、將bit索引存入寄存器bshr_vr,讀取33個通道數(shù)據,其中32個數(shù)據有效,剩余一個數(shù)據用于寄存器偏移;

10、使用simd指令bshr,表示為bshr(vr0,vr1,vr0)根據vr1的0~5bit,如果全0,不右移,非0,右移一個字節(jié):寄存器整體右移bit_idx個字節(jié);

11、當bit_idx=0;表示該索引為偶數(shù),不存在半個字節(jié)即4bit跳轉,寄存器數(shù)據無需偏移;

12、當bit_idx=1;表示該索引為奇數(shù),地址跳轉少偏移半個字節(jié),simd指令讀取數(shù)據,使用la(o,vr0,0,ptr,0),從輸入地址ptr讀取數(shù)據,存入vr0寄存器,存在多讀取1個數(shù)情況,此時將整個寄存器右移,使用bshr(vr0,vr1,vr0)右移一個字節(jié),移除無效數(shù)據,這也是為何讀取33個通道的原因:

13、 32 31 30 29 ...... 3 2 1 -1 32 31 30 ..... 4 3 2 1

14、其中第一行數(shù)字32為第33個數(shù),為方便理解,將寄存器下標索引理解為具體數(shù)值,-1表示需要移除的半個字節(jié)的數(shù)據;

15、移位之后,將多余-1數(shù)據移除,32填充到寄存器內,進行擴展;

16、經過移位之后,輸入寄存器所有數(shù)據都是有效數(shù)據;

17、s3:加法計算,使用指令add(vr0,vr1,vr0),將寄存器vr0,和vr1數(shù)據相加更新到vr0寄存器中,完成val=(a+b)*scale,并將輸出結果重新保存為4bit數(shù)據;

18、s4:數(shù)據存儲,根據輸入計算方式,計算出輸出的bit索引和字節(jié)跳轉:shift_idx=bit_idx%2;

19、如果為0,不需要跳轉,如果為1,需要右移1個字節(jié)使用la(w,bshr_vr,0,&shift_idx,0);將是否需要偏移的標識符存入bshr_vr寄存器;

20、使用bshr(vr0,bshr_vr,vr0)根據bshr_vr寄存器標志符進行移位;

21、obit_idx:輸出bit索引,用于計算輸出數(shù)據存儲位置;

22、設置輸出mask,設為obit_mask,

23、當obit_idx=0;表示索引為偶數(shù),不存在地址偏移存在問題;obit_mask=0;

24、當obit_idx=1;表示索引為奇數(shù),存在輸出地址跳轉缺少半個字節(jié);使用指令讀取一個數(shù),將該數(shù)據存入寄存器;obit_mask=0xff;

25、將該缺少的半個字節(jié)數(shù)據-1存入寄存器

26、

27、

28、最后將-1~31,一個32個數(shù)通過simd?sa指令存入地址,即使用sa(o,vr0,0,out_ptr,0)將vr0寄存器數(shù)據存入輸出地址out_ptr,最后一個數(shù)根據高低4bit,單獨存入指定地址的指定bit位,其中,這里的數(shù)字僅用于表示寄存器數(shù)據,為方便理解,使用1~32共32個數(shù)表示原始寄存器數(shù)據,-1表示移位之后寄存器的數(shù)據,該數(shù)據屬于無效數(shù)據,使用-1表示;

29、使用simd指令andv,與操作,表示為:andv(vr0,obt_mask,vr0),根據obit_mask判斷是否需要保留原始數(shù)據;

30、使用simd指令bshl,表示為:bshl(vr1,bshr_vr,vr1)根據bshr_vr寄存器標志符進行移位:寄存器整體左移obit_idx個字節(jié);

31、使用simd指令bselv,表示為:bselv(obt_mask,vr0,vr1),根據是否需要移位來判斷第一個字節(jié)是從原始地址空間讀取,還是從寄存器中讀?。簩纱屋敵鼋Y果合并;存儲到輸出地址;

32、s5:當剩余通道數(shù)小于32chn,使用c++計算,將計算得到的結果根據bit位寬存入對應的輸出地址,表示為:

33、

34、當obit_idx=0;val值不變,存入輸出地址;

35、當obit_idx=1;val=val<<4,存入輸出地址;

36、out_val[idx/2]+=val;高低4bit分兩次存入,組成一個字節(jié);低4bit通過&0xf,保證數(shù)據閾值在[0,15],高4bit,通過左移4bit,存入一個字節(jié)中高4bit數(shù)據,完成兩個4bit數(shù)據組成8bit數(shù)據方式。

37、所述方法中:

38、讀取數(shù)據:

39、一個字節(jié)數(shù)據:val_8bit=1000?1001

40、低4比特=val_8bit&0xf=1001取一個字節(jié)中的低4bit

41、高4比特=val_8it>>4=1000取一個字節(jié)中的高4bit?simd讀取數(shù)據后,使用la(o,vr0,0,ptr,0),從地址讀取數(shù)據存入寄存器,將8bit數(shù)據中的4比特數(shù)據擴展為所需的bit位寬,用于后續(xù)的必要計算;存儲數(shù)據:

42、低4bit數(shù)據:9=二進制1001

43、高4bit數(shù)據:8=1000<<4得到1000?0000

44、低4bit+高4bit=1000?1001,組成一個8bit數(shù)據,存入地址。

45、由此,本技術的優(yōu)勢在于:通過簡單的方法解決地址跳轉問題。

當前第1頁1 2 
網友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
榆林市| 房山区| 慈溪市| 内江市| 台山市| 三门县| 红原县| 巴里| 望谟县| 洱源县| 子长县| 孙吴县| 天水市| 襄城县| 上虞市| 淳化县| 安乡县| 青铜峡市| 郓城县| 兴仁县| 会东县| 靖边县| 开阳县| 秀山| 关岭| 阜新| 壶关县| 固安县| 延庆县| 广东省| 眉山市| 武山县| 芜湖市| 岳阳市| 江源县| 长寿区| 株洲市| 平舆县| 延吉市| 青海省| 华安县|