2024.10.01
自社の社内情報を未来の“ゴミ”にしないための備え 「情報量が多すぎる」時代がもたらす課題とは?
俺ASICと俺CPU“松竹V(しょうちくぶい)” (全1記事)
リンクをコピー
記事をブックマーク
takeoka氏(以下、takeoka):俺ASICと俺CPUを作っているのでその話をちょっとします。
最近、日本でも半導体復興と言われています。(半導体は)お金持ちの物だと思っていたけれど、近頃はGoogleが安く作れるようにしてくれていたり、OpenEDAやOpenLANEというOSSのツールを使えば作れます。
これはだいぶ前からですが、Googleががんばっています。ほかにも、FOSSi(Free and Open Source Silicon Foundation)という非営利団体があって、ここでやった成果をもうちょっとだけ作りたい時は、50万円から100万円出せば作れるという道筋もあって、無料で試作したものを商用量産できるので、大変な零細企業でも作れる環境ができています。
RISC-V Foundationのボードメンバーの河崎さん(河崎俊平氏)はNEDO(国立研究開発法人新エネルギー・産業技術総合開発機構)から資金を受けて、実際にちょっとしたLSI(Large Scale Integration)を作っています。
実はソフトはこれまでも一応あって、このへんに固有名詞が入っていますが、こういうツールでLSIは開発できていました。ところがPDK(Process Design Kit)という、トランジスタをここまで近づけていいという制約条件が書かれたファイルが大事にされてきたため、何千万円クラスのツールを作っている会社にしか供給されず、これまでは貧乏人には手も足も出ませんでした。
そんな中、Googleががんばってくれて、SkyWaterなんかは無料で手に入ります。日本でもこのPDKを勝手にオープンして「半導体をこっちでもオープンソースでやれ」と言って地味にやっている人たちがいて、日本の半導体工場のPDKもだんだん無料で手に入れるようになってきています。
GoogleなどのGAFAはFPGA(Field Programmable Gate Array)を使っていましたが、実はそんなに速くないし、消費電力がすごく大きく、データセンターでメチャクチャ使うと、電気をすごく食ってしまいます。なので、アナログ・デジタル混在でエッジ側でセンサーとすごく小さなマイコンが入ったようなものを作ってばらまこうとか考えているんじゃないかなと思っています。
政府も半導体産業の復興や再興、LSI開発の裾野を広げたいと、公的な半導体系の研究機関がOpenEDAに注目していたり、福岡にあるオープンソースツールで固めているセンターの職員は、親切にいろいろ教えてくれます。こういう合成ツール(CyberWorkBench)はNECの商品が使われていたり、ここの施設(福岡システムLSI総合開発センター)でもだいたい50万円から100万円でLSIの少量生産ができて、それは商売で使っていいですという感じです。
他に、ミニマルファブというのを非営利団体でやっている方がいます。(スライドを示して)似たような装置が並んでいますが、これは、少し作っては次の工程へ行き、またそこの工程から次と、一個一個の工程を手でやっていって半導体を作ります。人間の手間はかかりますが、費用は超安く、1個から作れます。こういうことをやっている人も日本にいて、「なんか楽しそうやな」という感じです。
私たちは今、SoC(System-on-a-chip)を作ろうとしています。65nmか90nmのわりと太いテクノロジーでASICを作ろうとしています。一応、省電力・省メモリのチップで、ロボットの部品モジュールが簡単にローコストで作れるものを作っています。そこにオレオレCPUである「松竹V」を突っ込みます。これは先ほどの制約を加えるやつで、ゲームみたいになっています。大して論理も入らないので、制約のキツイ中でどう戦うかみたいなゲームになっています。
僕がだいたい「こういう構成でいこうぜ」というところを決めて、まっちゃん、松永くんという大変よくできる人が、3日から10日間あったらわりと何でも機能を作ってくれるのですごいなと。そんな感じでやっています。
RISC-Vコアは東工大吉瀬研の「RVCoreP」というのを基に魔改造しているのですが、一応GnuPrologのコンパイルドコードを速くしています。「Prologなんか誰が使っているんですか」という話がありがちですが、この頃アメリカなんかでも「論理推論を入れないとやはりダメだ」と、機械学習と一緒に論理推論を入れている例が増えてきていて、実際にPrologがこっそりあちこちで使われているということがだんだん判明してきているので、私たちもこれまでどおりPrologを使いましょうと。それをちょっと速くするということをやっています。
それから、僕たちはOSを書き飽きたのでOSなんかのソフトは書かず、ハードウェアマルチスレッドで、ハードウェアでもってタスクスイッチします。一定時間ごとに切り替わるとかですね。それからハードウェア・セマフォで排他と同期をしています。他の排他制御と同期方式としてに一応LR/SCも付けました。キャッシュメモリはないけれどLR/SCが一応使えるようにしました。
これをちょっと今実装しようと思っています。間に合うかどうか。普通は割り込みを起こすんですが、割り込みをなしにして外部ピンからの入力でスレッド起床ができます。割り込みなしで、割り込み相当の処理を専用スレッドでやるということですね。これはOSのプログラムコードもいらないし、ワーキング・エリアも不要です。マルチスレッドだからスレッドのレジスタセットは持ちますが、これの管理コストのためのものがすごく少ないです。
かなり小さいハードウェアでこういうマルチスレッド機構ができています。それから次のページで説明しますが、ROS2の通信部分をハードウェアで実装してやっています。OS不要のチップを作っています。
ROS2プロトコルをハードウェア化しています。「ROS2rapper」という名前です。構成は、少しだけハードウェア用の拡張がありますが、文法的にはC言語ですね。LGPLで配ろうかなと準備をしています。通常ROSはLinuxがないと動かなくて、OSもメモリもたくさんいるし、CPUもMMUが必要な高級なものでないといけないのですが、ハードウェア化したことによってものすごく少ない論理で動いています。バッファ用のフリップフロップがたくさんになっていますが、正味の論理はかなり小さいです。
あとは「ハードウェア論理なので、送信パケットのチェックサムを同時に1クロックで計算できるだろ」と僕が言って、実際に担当者に作ってもらって、一応8サイクルを1サイクルでサム計算をやります。各層のIP層、UDP層、IP層のチェックサムを全部いっぺんにやりますが、なんか「最長パスが長くなって周波数が50MHzでしか動きまへん」とか担当者に言われて「あ、そうですか」と(苦笑)。
そこのチェックサム計算のところを分割すると、最高121MHzで動いて「あ、そうですか」と。うれしいのか悲しいのかよくわかりませんが、そうなっています。ハードウェアなのでロバストで速いです。Linuxのソフトで動くよりもはるかに高速です。それからハードウェアの論理値は小さいので、まぁまぁ良いものかなと(思っています)。
これにはLinuxもいりません。(スライドを示して)こいつ(Ros2アプリ)がC言語ソースになっているので「OSなしで行こうぜ」という感じでマルチスレッドのコントロールも全部ハードウェア化しました。
話が変わりまして、GnuPrologの高速化はどんな感じでしょうか。LispやPrologはその言語の性質から動的に型チェックして、それに対応する手続きをディスパッチしています。これから逃れられる、完全にコンパイルできると高速になるんです。Lispはその可能性があるのですが、Prologはやはりなかなかコンパイルに難しい面があります。
ふだんはGnuPrologのWAM(Warren Abstract Machine)という仮想マシンに変換して、(スライドを示して)ここにコンパイルされていく。これを見ているとswitch_on_termというやつで1つ目の引数の型、つまり引数の下3bitを見て分岐しています。
これはCでやっていますが、機械語のネイティブコードにすると、ネイティブコードのルーチンはこんな感じになっています。下位3bitを見て8方向分岐をしています。
80x86で見ると、これはネイティブコードになっていますが、これは飛び先のアドレスをレジスタにパカパカっと入れて、サブルーチンを呼んで最後にそれをやるとそこのどれかに分岐するようになっています。(スライドを示して)ここでCALLとかサブルーチンコールとかしているし、何しとんねんという感じですね。80x86は中のCPUがすごく複雑なので、たぶんあまり遅くはありませんが、5段パイプラインのRISC-Vなんかはすごく素朴なのでこんなことをやっているとすごく時間がかかって仕方がありません。
実際にRISC-Vの64bitのGnuPrologも同じことをやっています。アドレスを積んでサブルーチンを呼んで飛びます。
じゃあレジスタ間接で飛べるようにしましょう。(スライドを示して)ここらのレジスタ、X5からX7レジスタに飛び先アドレスが入っていて、IREGをX28として、X28レジスタの内容が6になっているので、X6番レジスタを参照して、その中身0x400100を取り出してプログラムカウンタに入れてジャンプします。そういう命令を作ってもらいました。
これをやったせいで、FPGA版では最長パスが伸びてクロック周波数が下がったんですが、今作ろうとしているLSIだとここは最長パスになっておらず、この機構が本質的には、クロックスピードを遅くすることはないことがわかっています。
これで最後ですね。一応CとかのHLS(High-Level Synthesis)、高位合成言語で書けるんですが、同時並列でバラバラにデータはアクセスされます。先ほど言ったチェックサムの計算は、データに同時並列でバラバラにアクセスできて、細粒度並列、データ並列度がすごく高まっているので1クロックでできます。
そういうところに気をつけると、ソフトをやっていた人が高級なハードを書けるようになります。そういうやり方で今はLSI作りを進めています。以上です。
司会者:ありがとうございました。13分ピッタリなので質問タイムはなしということで。というか、なんでこれをLTでやろうとしたんですか(笑)。
takeoka:これしかないので(笑)。
司会者:これはフルタイムでやってくださいよ(笑)。
takeoka:できあがったらまた長いほうで(笑)。
司会者:じゃあ次にお願いします。次回はフルタイムでお願いします。かなり興味深い。これをLTでやらないでくださいよっていう……(笑)。
takeoka:わかりました(笑)。
司会者:ありがとうございました。
2024.10.29
5〜10万円の低単価案件の受注をやめたら労働生産性が劇的に向上 相見積もり案件には提案書を出さないことで見えた“意外な効果”
2024.10.24
パワポ資料の「手戻り」が多すぎる問題の解消法 資料作成のプロが語る、修正の無限ループから抜け出す4つのコツ
2024.10.28
スキル重視の採用を続けた結果、早期離職が増え社員が1人に… 下半期の退職者ゼロを達成した「関係の質」向上の取り組み
2024.10.22
気づかぬうちに評価を下げる「ダメな口癖」3選 デキる人はやっている、上司の指摘に対する上手な返し方
2024.10.24
リスクを取らない人が多い日本は、むしろ稼ぐチャンス? 日本のGDP4位転落の今、個人に必要なマインドとは
2024.10.23
「初任給40万円時代」が、比較的早いうちにやってくる? これから淘汰される会社・生き残る会社の分かれ目
2024.10.23
「どうしてもあなたから買いたい」と言われる営業になるには 『無敗営業』著者が教える、納得感を高める商談の進め方
2024.10.28
“力を抜くこと”がリーダーにとって重要な理由 「人間の達人」タモリさんから学んだ自然体の大切さ
2024.10.29
「テスラの何がすごいのか」がわからない学生たち 起業率2年連続日本一の大学で「Appleのフレームワーク」を教えるわけ
2024.10.30
職場にいる「困った部下」への対処法 上司・部下間で生まれる“常識のズレ”を解消するには