日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 综合教程 >内容正文

综合教程

Rocket - util - AsyncQueue

發(fā)布時(shí)間:2023/10/11 综合教程 78 老码农
生活随笔 收集整理的這篇文章主要介紹了 Rocket - util - AsyncQueue 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

https://mp.weixin.qq.com/s/6McbqOKM4fu4J5vdpZvxKw

 
簡(jiǎn)單介紹異步隊(duì)列(AsyncQueue)的實(shí)現(xiàn)。
 
??
0. 異步隊(duì)列
 
異步隊(duì)列的兩端分屬不同的時(shí)鐘域,擁有各自的復(fù)位邏輯。
異步隊(duì)列用于存值的一端為上游端(source),用于取值的一端為下游端(sink)。
 
1. AsyncQueueParams
 
??
異步隊(duì)列的參數(shù),包含如下幾項(xiàng):
a. depth
 
隊(duì)列深度,表示隊(duì)列可以存儲(chǔ)幾個(gè)元素;
 
b. sync
 
表示流水線的級(jí)數(shù)。
 
c. safe
 
使用valid來(lái)標(biāo)識(shí)ridx和widx是否合法;是否要把一端的reset同步到另一端。
 
d. narrow
 
標(biāo)識(shí)數(shù)據(jù)同步通道的寬度。如果數(shù)據(jù)同步通道為窄,則每次只同步一個(gè)數(shù)據(jù)。否則,為所有數(shù)據(jù)提供同步通道。
??
 
2. AsyncBundleSafety
 
??
 
safe相關(guān)要在隊(duì)列兩端同步的信號(hào)(這里略去不做詳細(xì)介紹):
??
 
個(gè)人認(rèn)為更名為AsyncSafetyBundle更好,因?yàn)楸举|(zhì)上是一個(gè)Bundle,Safety是修飾詞,前置為宜。如白馬和馬白不是同一個(gè)意思。
 
3. AsyncBundle
 
??
要在隊(duì)列兩端同步的數(shù)據(jù),包括:
a. 待讀取元素的索引號(hào):ridx;
b. 待寫(xiě)入元素的索引號(hào):widx;
c. 數(shù)據(jù):mem;
d. 數(shù)據(jù)索引號(hào):index;
e. safe相關(guān)的bundle(valid和reset);
 
c和d重構(gòu)如下:
??
如果數(shù)據(jù)同步通道為窄通道,則mem這個(gè)Vec只包含1個(gè)元素,而index則是當(dāng)前數(shù)據(jù)通道中元素的索引號(hào)。
如果數(shù)據(jù)同步通道為寬通道,則mem這個(gè)Vec包含depth個(gè)元素,每一個(gè)元素都有自己的同步通道,就不需要index來(lái)指示元素索引號(hào)了,所以此時(shí)index為None。
 
PS. option是一個(gè)隱式方法,定義如下:
??
 
4. GrayCounter
 
格雷碼計(jì)數(shù)器。
 
5. AsyncValidSync
 
用于支持AsyncBundleSafety,這里不做具體介紹。
 
6. AsyncQueueSource
 
異步隊(duì)列的上游端。上游端寫(xiě)數(shù)據(jù)。
??
 
1) io
 
??
a. enq:輸入;
b. async:用于數(shù)據(jù)同步的端口;
 
2) 實(shí)現(xiàn)
 
a. enq
 
??
當(dāng)對(duì)方valid,而我方ready,亦即io.enq.fire()時(shí),把io.enq.bits存入mem中。
 
注意,此index為新定義的index,非io.async.index:
??
 
b. mem
 
也要注意區(qū)分mem和io.async.mem。
 
mem的定義為:
??
存儲(chǔ)的元素個(gè)數(shù)為隊(duì)列深度params.depth。
 
根據(jù)數(shù)據(jù)同步通道的寬窄,來(lái)決定同步一個(gè),還是全部同步:
??
 
c. widx
 
??
source端為寫(xiě)端,widx是一個(gè)格雷碼計(jì)數(shù)器,會(huì)被同步到sink端:
??
 
d. ridx
 
??
讀取的元素索引號(hào)。sink端為讀端。ridx從sink端同步而來(lái)。
 
e. ready
 
隊(duì)列不滿,則可以ready。
??
??
可以看到io.enq.ready也取決于sink_ready。在不考慮safe的情況下,sink_ready一直為true。
 
7. AsyncQueueSink
 
??
與AsyncQueueSource對(duì)應(yīng),這里略去。
 
8. FromAsyncBundle
 
??
x是一個(gè)AsyncBundle,構(gòu)造一個(gè)sink端與之連接。從AsyncBundle到DecoupledIO,即From AsyncBundle to DecoupledIO。
 
9. ToAsyncBundle
 
??
x是一個(gè)ReadyValidIO,構(gòu)造一個(gè)source端與之連接。從ReadyValidIO到AsyncBundle,即To AsyncBundle from ReadyValidIO。
 
10. AsyncQueue
 
??
創(chuàng)建異步隊(duì)列的兩端,并把它們相連。
 
CrossingIO定義如下:
??

總結(jié)

以上是生活随笔為你收集整理的Rocket - util - AsyncQueue的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。