DATE2022に上がっていたChiselの拡張言語Twineというものについて、論文を読んでみることにした。 今回で最後まで読み切った。感想としてはちょっとイマイチ。
- 具体的な例が乏しく、Chiselとの対比で具体的にどのようなメリットがあるのかあまり想像がつかなかった。最終的な回路イメージまで示すと分かりやすかった。
- だって具体的には
>>>
演算子を追加しただけに見える。
- だって具体的には
- 評価項目がソースコード行数など非常に曖昧。具体性に欠けるため、もう少し具体的なソースコードを示して欲しかった。
- RISC-Vの実装をTwineに移植した場合も、ソースコードの行数について言及すべき。CPUパイプラインという細かい挙動をどのようにTwineのおおざっぱなデータフローに落とし込んだのか説明すべき。
とかいろいろ気になった。
前回の記事
IV. 結果
Twineの評価は以下の2項目で行っている。
- 設計生産性: 設計生産性を評価するために、モジュール化されたデータ処理コンポーネントライブラリを設計した(aggregate, column filter, boolean generationなど)
これらのビルディングブロックを使用して、複数のSQLクエリの処理を高速化するアクセラレータを設計した。性能と面積の最適なバランスを見つけるために、様々なメモリ帯域幅とベクトル化の度合いを変更した12種類のコンフィグレーションを作成した。この際、ベクトル化の度合いによってコンポーネント間のインタフェースが変換するため、データ並列性を考慮しながらモジュール間のデータ授受をバッファリングしていく必要がある。通常はこれらのバッファリングのためにハードウェアコンポーネントを追加、削除、変更、再接続する必要があり、そのために多大な手作業が必要となる。
まずは80個のリクエストが処理されるのに必要なサイクルをVerilatorによるシミュレーションで測定した。次に、各コンフィギュレーションを合成し、動作周波数と面積の推定を行う。図3. は、性能、面積について12種類のコンフィグレーションにて測定を行った結果である。
次に、Twine、Chisel、SystemVerilogの3種類によるHandwritingによる比較を行った。図4. は、各言語でもっとも代表的な8つのコンフィグレーションを組み立てるために必要な部品点数と総行数数を示している。ChiselとSystemVerilogの実装では、タイミング記述やデータフォーマットの変換を考慮する必要があるが、Twineはそれらを隠蔽するのでコード行数を減らすことが出来ている。
さらに、ChiselとTwineをより詳細に比較するためにインオーダRISC-Vコア[9]をChiselからTwineに移植した。Twineの論理合成後の結果とChiselの論理合成後の結果はほぼ同一であった。