iT邦幫忙

0

[gem5][minor] Queue 以及 InputBuffer

  • 分享至 

  • xImage
  •  

系列文章 : [gem5] 從零開始的 gem5 學習筆記

class Queue

檔案位置 : gem5/src/cpu/minor/buffers.hh

要注意這個 class Queue 並不是指 C++ std 的 queue,而是 gem5 minor CPU model 自己實作的一個 class。


std::deque<ElemType> queue;

這個 Queue 試用 std::deque 來實作的。
這種 queue 支援

  • push_front
  • pop_front
  • push_back
  • pop_back

unsigned int numReservedSlots

記錄我們目前 reserve 多少筆資料。


unsigned int capacity;

這個 class Queue 的最大容量。


void reserve()

預留一個空間。在這時候不會對 queue 做任何 push,而只是將 numReservedSlots + 1。


void freeReservation()

去除一個預留的空間。在這個時候不會對 queue 做任何 pop,而只是將 numReservedSlots - 1。


void clearReservedSpace()

把 numReservedSlots 歸零。


bool canReserve()

查看當前是否有可以 reserve 的空間。


unsigned int unreservedRemainingSpace() const

去除掉預留的空位,以及已經使用的元素 ( queue.size() ),還剩下多少空位。


unsigned int remainingSpace() const

僅去除已經使用的元素 ( queue.size() ),還剩下多少空位。


void push(ElemType &data)

真的把元素 push 進 queue,真的會對 queue 進行操作。



class InputBuffer

檔案位置 : gem5/src/cpu/minor/buffers.hh

InputBuffer 也是被用作一個 Queue,只不過 InputBuffer 大部分的時候只會有一個 element 在 Queue 裡面,而 InputBuffer 則是為了這種情況特別做優化。


mutable ElemType *elementPtr;

一個暫存的指標。
當 InputBuffer 是空的,且要 push 第一個元素,會先把元素暫存在這個指標,而不是真的去操作 queue,藉此增強效能。


void setTail(ElemType &new_element)

當 Queue 是空的,會把 new_element 的指標存在 elementPtr
當 Queue 裡面有東西,會直接把 new_element 推進 Queue


void pushTail() const

把暫存在 elementPtr 的指標 push 進 Queue


void pop()

假如 elementPtr 這個暫存指標有東西,則 pop 這個 elementPtr
假如沒有 elementPtr,則直接 pop Queue



圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言