本發(fā)明屬于數(shù)據(jù)處理,特別涉及一種基于simd的4bit算子加速計(jì)算的方法。
背景技術(shù):
1、現(xiàn)有技術(shù)中,低比特計(jì)算是指輸入輸出限定為4bit,減少內(nèi)存。simd:singleinstruction?multiple?data,是單指令流多數(shù)據(jù)流,一次運(yùn)算指令可以執(zhí)行多個數(shù)據(jù)流,可以提高程序的運(yùn)算速度。(每個寄存器512bit位寬)
2、simd并行計(jì)算:多數(shù)據(jù)流并行計(jì)算,提高計(jì)算效率。
3、然而,現(xiàn)有技術(shù)的主要缺陷在于:通道為奇數(shù)時,地址跳轉(zhuǎn)無法以半個字節(jié)偏移
4、此外,現(xiàn)有技術(shù)中的常用術(shù)語包括:
5、feature_shape:輸入數(shù)據(jù)的形狀,抽象理解為多維度數(shù)據(jù),從左到右依次是從高維到低維(nhwc)n:一次處理featuremap數(shù)量,設(shè)置為1;h:輸入數(shù)據(jù)的高,w:輸入數(shù)據(jù)的寬,c:輸入通道數(shù)。
技術(shù)實(shí)現(xiàn)思路
1、為了解決上述問題,本技術(shù)的目的在于:將基于simd,通道為奇數(shù)情況,解決地址跳轉(zhuǎn)問題。
2、具體地,本發(fā)明提供一種基于simd?4bit算子加速計(jì)算的方法,所述方法中:
3、4bit計(jì)算邏輯是:計(jì)算機(jī)計(jì)算過程中最小計(jì)算單位為1個字節(jié)=8bit,1個字節(jié)中存儲兩個4bit數(shù)據(jù),分為高、低4bit數(shù)據(jù);地址跳轉(zhuǎn)單位字節(jié),需要根據(jù)索引計(jì)算出正確地址,以及地址所存儲數(shù)據(jù);
4、所述方法適用于各種算法,核心在于4bit數(shù)據(jù)的讀取與保存;
5、其中,加法算子:val=(a+b)*scale;輸入形狀(ibatch,ih,iw,ic);s1:索引計(jì)算,每次32個通道,存儲于寄存器中,即第n個數(shù)據(jù),然后根據(jù)該索引計(jì)算出地址偏移;根據(jù)h、w、c計(jì)算出數(shù)據(jù)索引idx,即根據(jù)第h行,第w列,第c個通道點(diǎn)公式計(jì)算:idx=h*iw*ic+w*ic+c;計(jì)算得到數(shù)據(jù)索引;
6、像素索引得到數(shù)據(jù)索引,表示為:idx=h*iw*ic+w*ic+c;
7、地址偏移得到地址偏移,idx*4能夠計(jì)算一共偏移bit數(shù),除以8,得到地址跳轉(zhuǎn)的字節(jié)數(shù),表示為:ptr_offset=idx*4bit/8;
8、bit索引計(jì)算得到字節(jié)中bit位置,高、低4bit,表示為:bit_idx=idx%2;s2:輸入數(shù)據(jù)讀取:
9、將bit索引存入寄存器bshr_vr,讀取33個通道數(shù)據(jù),其中32個數(shù)據(jù)有效,剩余一個數(shù)據(jù)用于寄存器偏移;
10、使用simd指令bshr,表示為bshr(vr0,vr1,vr0)根據(jù)vr1的0~5bit,如果全0,不右移,非0,右移一個字節(jié):寄存器整體右移bit_idx個字節(jié);
11、當(dāng)bit_idx=0;表示該索引為偶數(shù),不存在半個字節(jié)即4bit跳轉(zhuǎn),寄存器數(shù)據(jù)無需偏移;
12、當(dāng)bit_idx=1;表示該索引為奇數(shù),地址跳轉(zhuǎn)少偏移半個字節(jié),simd指令讀取數(shù)據(jù),使用la(o,vr0,0,ptr,0),從輸入地址ptr讀取數(shù)據(jù),存入vr0寄存器,存在多讀取1個數(shù)情況,此時將整個寄存器右移,使用bshr(vr0,vr1,vr0)右移一個字節(jié),移除無效數(shù)據(jù),這也是為何讀取33個通道的原因:
13、 32 31 30 29 ...... 3 2 1 -1 32 31 30 ..... 4 3 2 1
14、其中第一行數(shù)字32為第33個數(shù),為方便理解,將寄存器下標(biāo)索引理解為具體數(shù)值,-1表示需要移除的半個字節(jié)的數(shù)據(jù);
15、移位之后,將多余-1數(shù)據(jù)移除,32填充到寄存器內(nèi),進(jìn)行擴(kuò)展;
16、經(jīng)過移位之后,輸入寄存器所有數(shù)據(jù)都是有效數(shù)據(jù);
17、s3:加法計(jì)算,使用指令add(vr0,vr1,vr0),將寄存器vr0,和vr1數(shù)據(jù)相加更新到vr0寄存器中,完成val=(a+b)*scale,并將輸出結(jié)果重新保存為4bit數(shù)據(jù);
18、s4:數(shù)據(jù)存儲,根據(jù)輸入計(jì)算方式,計(jì)算出輸出的bit索引和字節(jié)跳轉(zhuǎn):shift_idx=bit_idx%2;
19、如果為0,不需要跳轉(zhuǎn),如果為1,需要右移1個字節(jié)使用la(w,bshr_vr,0,&shift_idx,0);將是否需要偏移的標(biāo)識符存入bshr_vr寄存器;
20、使用bshr(vr0,bshr_vr,vr0)根據(jù)bshr_vr寄存器標(biāo)志符進(jìn)行移位;
21、obit_idx:輸出bit索引,用于計(jì)算輸出數(shù)據(jù)存儲位置;
22、設(shè)置輸出mask,設(shè)為obit_mask,
23、當(dāng)obit_idx=0;表示索引為偶數(shù),不存在地址偏移存在問題;obit_mask=0;
24、當(dāng)obit_idx=1;表示索引為奇數(shù),存在輸出地址跳轉(zhuǎn)缺少半個字節(jié);使用指令讀取一個數(shù),將該數(shù)據(jù)存入寄存器;obit_mask=0xff;
25、將該缺少的半個字節(jié)數(shù)據(jù)-1存入寄存器
26、
27、
28、最后將-1~31,一個32個數(shù)通過simd?sa指令存入地址,即使用sa(o,vr0,0,out_ptr,0)將vr0寄存器數(shù)據(jù)存入輸出地址out_ptr,最后一個數(shù)根據(jù)高低4bit,單獨(dú)存入指定地址的指定bit位,其中,這里的數(shù)字僅用于表示寄存器數(shù)據(jù),為方便理解,使用1~32共32個數(shù)表示原始寄存器數(shù)據(jù),-1表示移位之后寄存器的數(shù)據(jù),該數(shù)據(jù)屬于無效數(shù)據(jù),使用-1表示;
29、使用simd指令andv,與操作,表示為:andv(vr0,obt_mask,vr0),根據(jù)obit_mask判斷是否需要保留原始數(shù)據(jù);
30、使用simd指令bshl,表示為:bshl(vr1,bshr_vr,vr1)根據(jù)bshr_vr寄存器標(biāo)志符進(jìn)行移位:寄存器整體左移obit_idx個字節(jié);
31、使用simd指令bselv,表示為:bselv(obt_mask,vr0,vr1),根據(jù)是否需要移位來判斷第一個字節(jié)是從原始地址空間讀取,還是從寄存器中讀?。簩纱屋敵鼋Y(jié)果合并;存儲到輸出地址;
32、s5:當(dāng)剩余通道數(shù)小于32chn,使用c++計(jì)算,將計(jì)算得到的結(jié)果根據(jù)bit位寬存入對應(yīng)的輸出地址,表示為:
33、
34、當(dāng)obit_idx=0;val值不變,存入輸出地址;
35、當(dāng)obit_idx=1;val=val<<4,存入輸出地址;
36、out_val[idx/2]+=val;高低4bit分兩次存入,組成一個字節(jié);低4bit通過&0xf,保證數(shù)據(jù)閾值在[0,15],高4bit,通過左移4bit,存入一個字節(jié)中高4bit數(shù)據(jù),完成兩個4bit數(shù)據(jù)組成8bit數(shù)據(jù)方式。
37、所述方法中:
38、讀取數(shù)據(jù):
39、一個字節(jié)數(shù)據(jù):val_8bit=1000?1001
40、低4比特=val_8bit&0xf=1001取一個字節(jié)中的低4bit
41、高4比特=val_8it>>4=1000取一個字節(jié)中的高4bit?simd讀取數(shù)據(jù)后,使用la(o,vr0,0,ptr,0),從地址讀取數(shù)據(jù)存入寄存器,將8bit數(shù)據(jù)中的4比特?cái)?shù)據(jù)擴(kuò)展為所需的bit位寬,用于后續(xù)的必要計(jì)算;存儲數(shù)據(jù):
42、低4bit數(shù)據(jù):9=二進(jìn)制1001
43、高4bit數(shù)據(jù):8=1000<<4得到1000?0000
44、低4bit+高4bit=1000?1001,組成一個8bit數(shù)據(jù),存入地址。
45、由此,本技術(shù)的優(yōu)勢在于:通過簡單的方法解決地址跳轉(zhuǎn)問題。