99精品伊人亚洲|最近国产中文炮友|九草在线视频支援|AV网站大全最新|美女黄片免费观看|国产精品资源视频|精彩无码视频一区|91大神在线后入|伊人终合在线播放|久草综合久久中文

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何高效處理LMEM中的數(shù)據(jù)?這篇文章帶你學(xué)會(huì)!

算能開發(fā)者社區(qū) ? 2024-01-19 08:33 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

Weight Reorder是TPU-MLIR的一個(gè)pass(參考TPU-MLIR編譯流程圖),其完成了對(duì)部分常量數(shù)據(jù)的Layout變化和合并。本文介紹其中Convlotion Kernel的Reorder行為以及合并Bias機(jī)制,幫助大家理解Conv2D.cpp代碼中的原理。

在SOPHON硬件中,存儲(chǔ)單元多種多樣,包括LMEM(本地存儲(chǔ)器)、SMEM(靜態(tài)SRAM)和GMEM(全局存儲(chǔ)器,即片外DDR存儲(chǔ))。其中,LMEM作為一種高速SRAM,因其靠近執(zhí)行單元(EU)而提供了高帶寬和低延遲的訪問特性。為了實(shí)現(xiàn)這種高速訪問,SOPHON BM1684X處理器將LMEM劃分為64個(gè)分區(qū),每個(gè)分區(qū)均可由相應(yīng)的NPU單元獨(dú)立訪問。每個(gè)NPU包含多個(gè)EU,并且在不同的計(jì)算類型下,EU處理的數(shù)據(jù)各不相同。NPU無法跨分區(qū)訪問數(shù)據(jù)。下圖展示了這種結(jié)構(gòu)的概覽。6da8586a-b662-11ee-aa22-92fbcf53809c.png

64個(gè)分區(qū)的地址是連續(xù)編碼的,即第一個(gè)分區(qū)的下一個(gè)地址便是第二個(gè)分區(qū)的起始地址。為了簡(jiǎn)化編程,SOPHON定義了數(shù)據(jù)在LMEM中的布局(Layout)。為了更直觀地描述這種布局,本文將采用numpy中的ndarray形式來演示,并使用numpy定義的操作來說明數(shù)據(jù)在存儲(chǔ)器中的布局與神經(jīng)網(wǎng)絡(luò)中定義的數(shù)據(jù)存在的差異。

本文涉及的ndarray操作包括reshape和transpose,并定義了一個(gè)resize函數(shù)來整理數(shù)據(jù)布局。resize函數(shù)可以對(duì)數(shù)據(jù)的指定維度進(jìn)行擴(kuò)展。例如:

tensor_a.shape=(1,2,3,4)#對(duì)應(yīng)于d0=1,d1=2,d2=3,d3=4
tensor_b=resize(tensor_a,(2,4,3,8))

此時(shí),在d0、d1、d3維度上使用0進(jìn)行填充,以達(dá)到最終尺寸。

In[1]:tensor_a
Out[1]:
array([[[[0, 1, 2, 3],
[4, 5, 6, 7],
[8, 9,10,11]],

[[12,13,14,15],
[16,17,18,19],
[20,21,22,23]]]])

In[2]:resize(tensor_a,(1,3,3,6))
Out[2]:
array([[[[0, 1, 2, 3, 0, 0],
[4, 5, 6, 7, 0, 0],
[8, 9,10,11, 0, 0]],

[[12,13,14,15, 0, 0],
[16,17,18,19, 0, 0],
[20,21,22,23, 0, 0]],

[[0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0]]]])

resize函數(shù)的一個(gè)參考實(shí)現(xiàn)如下:

defresize(src,shape):
out=np.zeros(shape,dtype=src.dtype)
_src_slice=tuple(slice(0,min(i,j))fori,jinzip(src.shape,shape))
out[_src_slice]=src
returnout

LMEM中四維數(shù)據(jù)的排布

在LMEM中,一個(gè)四維數(shù)據(jù)(n,c,h,w)的Channel維度會(huì)被分散到不同的lane上。以一個(gè)shape為(2,5,2,3)的數(shù)據(jù)為例,假設(shè)NPU數(shù)量為4,每個(gè)NPU中EU數(shù)量為4,并且數(shù)據(jù)在h,w維度上需要與EU對(duì)齊:

shape=(2,5,2,3)
a=np.arange(np.prod(shape)).reshape(shape)

6dbc2818-b662-11ee-aa22-92fbcf53809c.png

b=a.reshape(2,5,6)#數(shù)據(jù)hw合并
b=(
resize(b,(2,8,8)) #channel對(duì)齊到NPU,hw對(duì)齊到EU
.reshape(2,2,4,2,4)
.transpose(2,0,1,3,4)#(4,2,2,2,4)<-?(npu_id,?n^,?c^,?h^,?w^)
)

其中(n^, c^, h^, w^)為每個(gè)lane上數(shù)據(jù)的實(shí)際shape,對(duì)應(yīng)的stride也滿足處理器中的定義??梢詤⒖?/span>TPUKernel用戶開發(fā)手冊(cè)中的描述。npu_id維度是一個(gè)隱含維度,其值為npu數(shù)量,此處為4。

6dbc2818-b662-11ee-aa22-92fbcf53809c.png在4個(gè)NPU上對(duì)齊EU的數(shù)據(jù)排列

卷積權(quán)重的排列

為了確保EU能夠高效地使用,BM1684X處理器中卷積的權(quán)重需要按照EU對(duì)齊的方式優(yōu)先存儲(chǔ)IC維度的數(shù)據(jù),然后將OC維度分布到不同的NPU上。相應(yīng)的存儲(chǔ)方式可以表示為:

c=a.reshape(2,5,6)
c=(
resize(c,(1*4,2*4,6)) #npu,eu_align,h*w
.reshape(1,4,2,4,6)
.transpose(1,0,2,4,3) #<4x1x2x6x4>
)

6dd8092a-b662-11ee-aa22-92fbcf53809c.png卷積權(quán)重的存儲(chǔ)方式

卷積權(quán)重與偏置的合并

在BM1684X中,權(quán)重需要按照EU對(duì)齊方式存儲(chǔ),而偏置則采用緊湊模式。由于偏置數(shù)據(jù)量較小,直接拷貝效率不高。因?yàn)閮煞N模式下數(shù)據(jù)的stride不一致,無法直接將它們拼接在一起。在TPU-MLIR中,通過預(yù)先將權(quán)重和偏置合并,形成最終在LMEM中的存儲(chǔ)形式,然后通過一條DMA指令直接加載到LMEM中。

d=np.arange(60,65).reshape(1,5,1,1)
d=(
resize(d,(1,2*4,1,1)) #npu,eu_align
.reshape(1,2,4,1,1)
.transpose(2,0,3,4,1) #<4x1x1x1x2>
.resize(4,1,2,1,4)#EUalign<4x1x1x1x4>
)
e=np.concatenate((d.reshape(4,1,4),c.reshape(4,12,4)),axis=1)

6de437b8-b662-11ee-aa22-92fbcf53809c.png卷積權(quán)重和偏置合并后的形式

通過上述方法,我們可以有效地組織LMEM中的數(shù)據(jù),以適應(yīng)SOPHON BM1684X處理器的計(jì)算需求,從而提高整體的執(zhí)行效率和性能。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 處理器
    +關(guān)注

    關(guān)注

    68

    文章

    19896

    瀏覽量

    235298
  • 存儲(chǔ)器
    +關(guān)注

    關(guān)注

    38

    文章

    7653

    瀏覽量

    167426
  • 編譯
    +關(guān)注

    關(guān)注

    0

    文章

    679

    瀏覽量

    34005
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    康謀分享 | 如何應(yīng)對(duì)ADAS/AD海量數(shù)據(jù)處理挑戰(zhàn)?

    如何有效處理ADAS/AD海量數(shù)據(jù)并從中獲得見解?IVEX數(shù)據(jù)處理流程可自動(dòng)從原始傳感器數(shù)據(jù)等輸入識(shí)別出值得關(guān)注的事件和場(chǎng)景,推動(dòng)
    的頭像 發(fā)表于 12-25 10:05 ?3981次閱讀
    康謀分享 | 如何應(yīng)對(duì)ADAS/AD海量<b class='flag-5'>數(shù)據(jù)處理</b>挑戰(zhàn)?

    學(xué)會(huì)NI-DAQmx的十個(gè)函數(shù)解決80%的數(shù)據(jù)采集應(yīng)用問題

    學(xué)會(huì)NI-DAQmx的十個(gè)函數(shù)解決80%的數(shù)據(jù)采集應(yīng)用問題
    發(fā)表于 01-12 22:16

    輕松學(xué)會(huì)單片機(jī)

    電平,就可以學(xué)習(xí)引腳的數(shù)字I/O功能,在按下某個(gè)按鈕后,某發(fā)光二極管發(fā)亮,這就是數(shù)字電路組合邏輯的功能,雖然很簡(jiǎn)單,但是可以學(xué)習(xí)一般的單片機(jī)編程思想,例如,必須設(shè)置很多寄存器對(duì)引腳進(jìn)行初始化處理
    發(fā)表于 09-14 10:51

    帶你分析圖像傳感器與軟件圖像處理流水線

    一篇文章帶你分析圖像傳感器與軟件圖像處理流水線。
    發(fā)表于 04-27 06:28

    從0開始,181頁(yè)知識(shí)帶你輕松搞定C++語(yǔ)言

    擅長(zhǎng)面向?qū)ο蟪绦蛟O(shè)計(jì)的同時(shí),還可以進(jìn)行基于過程的程序設(shè)計(jì),因而C++就適應(yīng)的問題規(guī)模而論,大小由之。 C++不僅擁有計(jì)算機(jī)高效運(yùn)行的實(shí)用性特征,同時(shí)還致力于提高大規(guī)模程序的編程質(zhì)量與程序設(shè)計(jì)語(yǔ)言的問題描述能力。 這個(gè)資料帶你從最基礎(chǔ)開始了解學(xué)習(xí)C++,
    發(fā)表于 07-24 13:10

    如何處理好FPGA設(shè)計(jì)跨時(shí)鐘域間的數(shù)據(jù)

    跨時(shí)鐘域處理是FPGA設(shè)計(jì)中經(jīng)常遇到的問題,而如何處理好跨時(shí)鐘域間的數(shù)據(jù),可以說是每個(gè)FPGA初學(xué)者的必修課。如果是還是在校的學(xué)生,跨時(shí)鐘域處理也是面試中經(jīng)常常被問到的一個(gè)問題。在本篇
    發(fā)表于 07-29 06:19

    教你怎樣學(xué)會(huì)PID調(diào)參

    不會(huì)PID調(diào)參?這篇文章圖文結(jié)合帶你學(xué)會(huì)PID調(diào)參!讓你成為PID調(diào)參大神!!!
    發(fā)表于 01-06 07:47

    帶你玩轉(zhuǎn)RT-Thread,開發(fā)教程匯總(共13篇)

    本教程帶你手把手帶你學(xué)會(huì)玩轉(zhuǎn)RT-Thread,從RT-Thread的內(nèi)核到外設(shè)、傳感器、組件包,應(yīng)用開發(fā),讓對(duì)于剛剛接觸使用RTT的你不再膽怯,開心玩耍RT-Thread!本教程使用的開發(fā)板:正點(diǎn)原子-戰(zhàn)艦V3.0 型號(hào):st
    發(fā)表于 05-11 14:10

    帶你深入探索okio組件高效的奧秘

    。中間多次拷貝,降低了IO效率,同時(shí)增加了系統(tǒng)消耗。為了滿足開發(fā)者對(duì)IO的更高要求,三方組件庫(kù)推出IO處理利器——okio(JS版本)。okio使用Segment作為數(shù)據(jù)存儲(chǔ)容器,通過提供Segment
    發(fā)表于 07-08 14:43

    無法讓SWO數(shù)據(jù)在MCUXpresso上高效工作怎么處理?

    我正在使用 IMXRT-1061/1062 進(jìn)行項(xiàng)目 我試圖讓 SWO 數(shù)據(jù)在 MCUXpresso 上高效工作,但沒有成功。 設(shè)置配置: 從 MCUXpresso 11.5.0 轉(zhuǎn)移到
    發(fā)表于 06-02 06:59

    基于ARM處理器的高效異常處理解決方案

    。測(cè)試結(jié)果表明,該方案的異常處理更為高效。 在航空航天、工業(yè)控制及醫(yī)療等領(lǐng)域中,嵌入式系統(tǒng)的安全性、可靠性以及高效性作用顯著,而異常是系統(tǒng)在運(yùn)行過程的突發(fā)事件,異常
    發(fā)表于 02-03 03:38 ?1608次閱讀
    基于ARM<b class='flag-5'>處理</b>器的<b class='flag-5'>高效</b>異常<b class='flag-5'>處理</b>解決方案

    關(guān)于選擇處理器的八個(gè)認(rèn)知錯(cuò)誤

     我們購(gòu)買電腦,往往會(huì)關(guān)心處理器的性能好壞,處理器的性能好壞直接影響了電腦的運(yùn)算速度,我們可以將處理器比喻成大腦,是計(jì)算機(jī)的核心,決定了電腦速度好壞。那么如何選購(gòu)處理器呢?今天小編分享
    發(fā)表于 05-20 09:23 ?1024次閱讀

    Python數(shù)據(jù)清洗和預(yù)處理入門完整指南

    凡事預(yù)則立,不預(yù)則廢,訓(xùn)練機(jī)器學(xué)習(xí)模型也是如此。數(shù)據(jù)清洗和預(yù)處理是模型訓(xùn)練之前的必要過程,否則模型可能就「廢」了。本文是一個(gè)初學(xué)者指南,將帶你領(lǐng)略如何在任意的數(shù)據(jù)集上,針對(duì)任意一個(gè)機(jī)器
    的頭像 發(fā)表于 12-21 13:50 ?1165次閱讀

    labview處理excel數(shù)據(jù)的粗大誤差

    實(shí)際應(yīng)用,我們經(jīng)常需要處理和分析來自不同來源的數(shù)據(jù)。其中,Excel表格是一個(gè)常見的數(shù)據(jù)格式,因?yàn)樗子谑褂煤凸芾?。然而,Excel數(shù)據(jù)
    的頭像 發(fā)表于 01-05 16:15 ?1230次閱讀

    盛顯科技:拼接處理器如何實(shí)現(xiàn)高效數(shù)據(jù)拼接操作?

    眾所周知,高效數(shù)據(jù)拼接操作無疑是數(shù)據(jù)處理領(lǐng)域的核心優(yōu)勢(shì),它能極大地縮短了處理時(shí)間,讓拼接處理器能夠迅速應(yīng)對(duì)海量
    的頭像 發(fā)表于 10-23 10:58 ?586次閱讀
    盛顯科技:拼接<b class='flag-5'>處理</b>器如何實(shí)現(xiàn)<b class='flag-5'>高效</b><b class='flag-5'>數(shù)據(jù)</b>拼接操作?