著者は素人のお知らせ
著者はこの分野の知見を広めてみようかなぁ~くらいの気持ちの人です。普通にメモです。
IEEEの方のURL
NVIDIA公式のURL
論文内で連呼しているkernlとはGPU上で動くプログラムのことであり記事でも統一している。
まとめ
WCETを算出するのは不可能である。そこでWCETを推測し、それを保証できるように計算資源予算を変化させる。
前提
-
現代のプロセッサを対象にWCETを求めるのは不可能である ← 引用論文から
-
GPUとCPUが合わさったSoCを対象に研究をした
- 実験はJetsonTX2
- メモリ領域をCPUとGPUで共有し帯域幅も共有している点がポイント
-
CPUとGPUをBigLittleなコアとして見ることができる
-
NVIDIA GPUには仕様が公開されていないHardware process schedulerが存在する。
GPUは、ノンプリエンプティブでグローバルなFIFOスケジューリングポリシーを使用するM個のプロセッサを持つマルチプロセッサとして抽象化することができる。 (引用)
- WCETを悪化させる要因はメモリアクセスであるとする
研究の方針
目標
ランタイム時に事前に推定されたWCETを破らない事を保証する
事前に行うこと
単位計算資源(=Q)あたりのWCETを推定する
実行中に行うこと
計算資源の分割と配分を行う
タスクの進行度を常に観測する。タスクをブロックごとに分ける。
タスクの進行度に合わせてQを変更しWCETを守ることを保証する
きになったこと
- 論文でも述べられているがCPUなどのシステムにも展開できるのか
- オーダーが小さいものを計測したが数msくらいでも対応できるのか
- メモリ競合をどうするかがメインだったがCPU時間が深刻なのもある場合、この手法が適用できるか。
- CPUオンリータスクの場合でもいけるか
- メモリ競合と演算機競合どちらも発生する場合WCETを実用的に推定できるのか
note
共有メモリへのアクセス競合はWCETを悪化させる要因。
動的な監視とメモリ帯域割り当てを行う
nvGPUにはハードウェアスケジューラーがある(非公開)
CPUとGPUをBigLittleなコアとして見ることができる。(BIG+++ & Little-----)
TX2を対象に実験した。GPUとCPUが統合され物理的に同一のメモリに対してアクセスする。キャッシュは別
BWLOCK++(CPUからのメモリ帯域干渉からGPUを保護するもの)なんかおもろそう.
WCETを決定づけるもの(この論文の場合CPUからのメモリ干渉)の影響度を変数(=Q)としておく。 → すなわち実験に基づいて求めたWCETを守るためにQを動的に変化させてWCETを守ることを保証できる。
任意のQに対してWCETが計算できる。
速度低下が許容範囲に収まっていることやシステムがスケジューリングできることが前提としてある。
各コアのベストエフォート(最も理想的な状態(理論的最大ではない))の時をQ=1とする
CPUコアを一つリアルタイムタスクに割り当てる
リアルタイムタスクとベストエフォートタスクを混在させリアルタイムタスクが来たらベストエフォートを止めて実行する。
タスクをブロックごとに区切り進行具合を調査してリソースの最大予算Qを決定する
測定された実行時間は正規分布になるとしてWCETを推定する
GPUとCPUは同じクロックタイマーを使っている
カーネルの実行ステップごとにWCETを求める。
GREEDY:最大メモリ時間
FAIR:Qが一定だあると仮定
Qn = max( min(QG, a * QG + (1 - a) * Qn-1), QF )
予算計算と状況取得に時間がかかるため予測されるWCETは保守的になる。
ブロック進行状況追跡は共有メモリベース