DeepDataFlow
Earlgrey in G2 · 第 6 回(全 6 回)

ノートパソコン 1 台、一度に 22 GB

オープンソースのツールで 100 万セルのチップにかかるメモリと実行時間、何を実行できるかを決めたのが CPU ではなくメモリだった理由、そしてマシンを増やすと役に立つところと立たないところ。

公開日 2026-10-22 · 第 6 回(全 6 回) · DeepDataFlow

チップの配置配線は 1 台のノートパソコンで行いました。22 スレッドの Intel Core Ultra 7 155H と 30 GB の RAM です。軽いジョブの一部は、Slurm 上の小さなマシン 3 台が担いました。この最終回では、それが実際に何を意味したかを見ます。決めた制限、時間の使われ方、配線を通すのにかかった 20 回の試行、そしてハードウェアが増えたら何を変えるかです。

制限

プロジェクトを通して 3 つの制限を守りました。

  • EDA ジョブは一度に 1 つ。 20 GB のジョブ 2 つは 30 GB に収まりません。
  • ジョブあたり 10 スレッド。 どのツールでも明示的に設定しました。
  • ジョブあたり 22 GB のメモリ上限、スワップはオフ。 各ジョブは systemd-run --user --scope -p MemoryMax=22G -p MemorySwapMax=0 の下で実行しました。上限を超えたジョブは、ノートパソコンをスワップで止めてしまう代わりに、明確なメモリ不足のエラーですぐに終了します。チップの配線では、エンジニアの同意を得たうえで上限を 26 GB に上げました。

Slurm では --mem はスケジューリングを左右するだけで、強制はされませんでした。小さなノードのメモリは最大でも約 15 GB で、チップや otbn のジョブが必要とする 20 GB 超に足りません。そこで、ジョブの予想ピークメモリでノードを選び、大きなジョブはノートパソコンに残しました。

時間はどこに使われたか

チップ v5 をステージごとに、各実行の GNU time のログから示します。「使用コア」は CPU 時間を実時間で割った値で、10 スレッドのうち平均でいくつが動いていたかを表します。

ステージ実時間使用コアピークメモリ
init4 min1.24.4 GB
floorplan8 min1.05.1 GB
place2 h 51 min1.615.8 GB
CTS6 min1.59.7 GB
post-CTS repair34 min2.817.5 GB
route26 h 12 min8.922.4 GB
post-route12 min1.320.1 GB
finish(軽量版)8 min0.36.1 GB
抽出(OpenRCX、4 コーナー)30 min0.83.7 GB
サインオフ STA(OpenSTA、コーナーごと)3 min2.25.9 GB

目立つパターンが 2 つあります。

  • 配置とその修正は主に 1 コアで動く。 チップの配置は平均 1.6 コアでした。フラットなチップの 24.7 時間の配置は、22.5 時間がシングルスレッドの repair_design でした(第 2 回)。そこではコアを増やしても役に立たず、役に立ったのは階層化でした。
  • 詳細配線はすべてのスレッドと最も多くのメモリを使う。 10 スレッド中約 9 を動かし続けた唯一のステップで、メモリのピークもここでした。最大のブロックも同じで、otbn の配線は 9.4 コア、19.5 GB で 6 時間かかりました。

それに比べるとサインオフは安価です。ファイルさえあれば、抽出は 30 分、タイミングの実行は数分なので、修正後にサインオフをやり直すのは簡単です。

20 回の試行、ほとんどはメモリ

配置のあと、チップ v5 は最後の 5 ステージを通すのに 20 回の試行が必要でした。失敗のほとんどは上限でのメモリ不足エラーで、クラッシュや誤った結果ではありませんでした。

ステージごとの試行回数と、それぞれを止めたもの。
ステージごとの試行回数と、それぞれを止めたもの。

主な出来事:

  • 配線モデルの欠落で、CTS がクロックゲートを 106,806 個複製しました。修正は set_wire_rc の 1 行でした。
  • グローバル配線のピークは、26 GB の上限に対して 25.8 GB でした。
  • ポストルートのデザインルールチェックは、グローバル配線がまだ読み込まれている状態で 18 GB のデータを抱えていました。
  • ヒートマップ、アンテナ修正、そしてフィニッシュステージのフィラーとタイミングレポートが、それぞれ実行を上限超えに押しやりました。
  • 一度は、エンジニアがノートパソコンを使う必要があったため、配線を最初のパスで一時停止し、保存したグローバル配線の結果から後で再開しました。

失敗のたびに、フローは恒久的に変わりました。

  • グローバル配線と詳細配線は別のプロセスで実行し、そのあいだにグローバル配線の結果を保存する。
  • チップではヒートマップを出さない。
  • レポートの前にチェックポイント。 メモリ不足になるレポートがあっても結果を失わないように。
  • フィラーなしの軽量フィニッシュと、フルのデザインルールチェックなしのポストルート。
  • デモではアンテナ修正をオフにし、残課題として書き留める。

どれも特殊なものではありません。しかしこれらがそろって、100 万セルのトップレベルが 30 GB のマシンにそもそも収まるかどうかを決めました。

2:09

YouTube で見る(英語) ↗Bilibili で見る(中国語) ↗

合計

345+ CPU 時間10 月 10〜19 日の、時間計測のある 97 回の実行(下限値)
270 h + 63 hチップと otbn。残り 8 ブロックは合わせて 15 時間未満
22.4 GB全実行の中で最も高いピーク:チップの詳細配線

この合計は下限値です。時間のログは 10 月 12 日以降にしかなく、各ステージの最後の実行しか残していないので、フラットなチップの 24.7 時間の配置、初期のブロックの実行の大部分、そして失敗した試行はすべて含まれていません。

ブロックごとの CPU 時間、GNU time のログから。ほぼすべてがチップと otbn です。
ブロックごとの CPU 時間、GNU time のログから。ほぼすべてがチップと otbn です。

マシンを増やすと役に立つとき、立たないとき

最も時間を節約できたのはメモリの増設でした。 20 回の試行のほとんどは速度ではなくメモリの問題でした。64 GB のマシンなら、その大部分を避けられ、プロセスの分割や上限の交渉も不要だったでしょう。

マシンを増やすと、独立したジョブで役に立ちます。

  • 9 個のブロックは、配置配線を順に流して約 20 時間かかりました。十分なメモリのあるマシンなら並べて実行できます。i2c、aes、kmac のような小さなブロックは 15 GB のノードに収まりますが、otbn の配線(19.5 GB)や一部のフィニッシュステージ(約 22 GB)は収まりません。
  • 4 つのレベル 2 のフロアプランチェック(第 3 回)は、それぞれ約 1 時間で、ピークは 20 GB 近くでした。十分大きなノードが 4 つあれば、4 時間ではなく 1 時間ですみます。
  • プローブとサインオフの実行は小さく、どこにでも収まります。混雑のプローブは Slurm のノードで 15 秒で終わりました。

マシンを増やしても、1 本の長い実行は短くなりません。 26 時間の詳細配線は 1 台のマシン上の 1 つのプロセスで、すでに約 9 コアを使っています。配置はほとんど逐次的です。それらを短くしたのは設計でした。階層化で配置は 24.7 時間から 2.8 時間になり、配線を短くするのはより良いフロアプラン(kmac のチャネルの修正)です。

シリーズを 1 画面で

このシリーズで示したことのすべてです。

24.7 h → 2.8 hチップの配置時間、フラット対階層
9 ブロック、11 インスタンスハード化して IP として再利用
1.22M → 34.6Kトップレベルのグローバル配線オーバーフロー、データから
26 h、残り 15,056チップの詳細配線。残課題は書き留めた
アップストリームにバグ 2 件寄生成分のないクロックバッファ 24,531 → 8
VDD オープン後から自分たちのチェックで発見
101 件の判断それぞれに理由、7 日間で
ノートパソコン 1 台22 スレッド、30 GB、ジョブは一度に 1 つ
1:38

YouTube で見る(英語) ↗Bilibili で見る(中国語) ↗

まだテープアウトではない

これまで繰り返してきたとおり、上位のメタルは代用の 10 層スタックで、メモリは FakeRAM のモデル、クロックは 10 MHz のデモ用の目標であり、チップには残課題があります。その残課題とは、15,056 件の配線違反、タイミング例外のない IO パス、ホールドレポートがないこと、そしてパッドリングでの VDD のオープンです。チップ v5 は、2 つの OpenROAD ビルドとパッチを当てたデータベースも混ぜて使っています。

次のチップバージョン v6 で、これらのギャップを埋めます。

  1. パッドの層への電源グリッドの接続。VDD と VSS の両方をチェックする。
  2. kmac のチャネルを作り直し、配線前に最悪ウィンドウのルールで確かめる。
  3. IO パスのタイミング例外。
  4. サインオフでのホールドレポート。
  5. 実行全体を 1 つの OpenROAD ビルドで、パッチなしで。

どこで見られるか

オープンソースのツールで、100 万セルの SoC を RTL からサインオフタイミングまで進めることができます。すべてを追跡するフローマネージャー、そのルールの中で働くエージェント、そして判断を下すエンジニアがいれば、それはノートパソコン上で回し、説明し、繰り返せるプロジェクトになります。