tag:crieit.net,2005:https://crieit.net/tags/%E8%87%AA%E4%BD%9CCPU/feed 「自作CPU」の記事 - Crieit Crieitでタグ「自作CPU」に投稿された最近の記事 2021-02-09T20:50:42+09:00 https://crieit.net/tags/%E8%87%AA%E4%BD%9CCPU/feed tag:crieit.net,2005:PublicArticle/15772 2020-03-19T20:19:01+09:00 2021-02-09T20:50:42+09:00 https://crieit.net/posts/CPU-RISC-V-vs-ICF3-Z オープンソースのCPUの除算性能 RISC-V vs ICF3-Z <h2 id="はじめに"><a href="#%E3%81%AF%E3%81%98%E3%82%81%E3%81%AB">はじめに</a></h2> <p>2020年1月15日に<a target="_blank" rel="nofollow noopener" href="https://icf3z.idletime.tokyo/">8bit CPU ICF3-Z</a>を制限の緩いオープンソースのライセンスで公開しました。</p> <p>CPUのようなハードウェアもオープンソースな時代になってきました。CPUのオープンソースで最も有名なのはRISC-Vです。RISC-Vを見てみるとオープンソースによるメリットを見つけることができます。RISC-Vは、とても広い範囲をカバーする32bit(64bit)のCPUですが低性能な領域でも万能というわけではないように思います。</p> <p>例えば通信系のハードウェアでは8bit単位で処理するものもあり32bitが無駄になる場合もあります。無駄になるだけなら問題はありませんが消費電力で不利です。</p> <p>一方、8bit CPUは除算命令がなかったり、除算命令があっても8bit÷8bitで、使える範囲が狭いということがありました。8bit CPUのオープンソースも既に複数、存在していますが、高性能な除算を持ったものは、あまりないように思います。ICF3-Zはオープンソースで、少ないトランジスタ数であるにもかかわらず高速な除算が可能です。</p> <h2 id="除算性能の比較"><a href="#%E9%99%A4%E7%AE%97%E6%80%A7%E8%83%BD%E3%81%AE%E6%AF%94%E8%BC%83">除算性能の比較</a></h2> <p><strong>実際に比較しないと、わからない人が多いと思っています。</strong> ICF3-ZのZeviosを小型のRISC-VコアであるlowRISCのibexと比較してみました。 ICF3-ZのZeviosは8bit CPUですが、lowRISCのibexは<strong>除算器を持った32bit CPU</strong>です。</p> <p>lowRISCの<a target="_blank" rel="nofollow noopener" href="https://www.lowrisc.org/blog/2019/06/an-update-on-ibex-our-microcontroller-class-cpu-core/">Webページ</a>にXilinxのローエンドのFPGA(7シリーズ)に実装した場合の周波数が50MHz、面積2500LUTと書かれてありました。 除算のサイクル数は<a target="_blank" rel="nofollow noopener" href="https://ibex-core.readthedocs.io/en/latest/instruction_decode_execute.html#multiplier-divider-block-mult-div">別のページ</a>に37サイクルと記述されています。</p> <p>Zeviosは同じくXilinxのローエンドのFPGA(Artix-7)に実装した場合、周波数は150MHzになります。つまりibexの3倍の周波数で動作します。ibexが1命令を実行するのにZeviosは3命令を実行できる。</p> <div class="table-responsive"><table> <thead> <tr> <th>除算</th> <th>ibexRISC-V[サイクル]</th> <th>ZeviosICF3-Z[サイクル]</th> <th>ibexを1とした倍率</th> <th>周波数を考慮した倍率</th> </tr> </thead> <tbody> <tr> <td>16bit÷8bit</td> <td>37</td> <td>20</td> <td>1.85</td> <td>5.55</td> </tr> <tr> <td>24bit÷8bit条件付き</td> <td>37</td> <td>21</td> <td>1.76</td> <td>5.29</td> </tr> <tr> <td>32bit÷8bit</td> <td>37</td> <td>55</td> <td>0.67</td> <td>2.02</td> </tr> <tr> <td>32bit÷16bit</td> <td>37</td> <td>約350</td> <td>0.11</td> <td>0.32</td> </tr> </tbody> </table></div> <p>0除算などのチェックや演算レジスタへのロード、ストアの補正として3~6サイクル追加しています。<br /> ZeviosはXilinxのFPGA XC7A35TICSG324-1Lに実装した場合です。</p> <h2 id="まとめ"><a href="#%E3%81%BE%E3%81%A8%E3%82%81">まとめ</a></h2> <p>ibexは2500LUTの面積ですが、Zeviosは400LUTの面積です。 外部I/OなどZeviosに不足しているものがあるかもしれませんが<strong>5分の一の面積で5倍以上の性能が出る</strong>ことは、考えるべき点ではないでしょうか。16bit÷8bitは32bit CPUであるRISC-Vに不利ということはありますが、制御など32bitの精度が必ずしも必要ない場合もあるように思います。</p> <p>ICF3-Zは海外のパクリな構造ではなく僕の考えた独自アーキテクチャです。疑似パイプラインによって高周波数で動作することも、この圧倒的な面積当たりの性能(25倍)に貢献しています。</p> <p>このオープンソースな8bit CPU ICF3-Zが、期待を含めれば2020年代に大きく産業に貢献していくかもしれません。</p> <h2 id="参考リンク"><a href="#%E5%8F%82%E8%80%83%E3%83%AA%E3%83%B3%E3%82%AF">参考リンク</a></h2> <p><a target="_blank" rel="nofollow noopener" href="https://qiita.com/izuna/items/49ad4eef53c65c591d61">8bit CPU ICF3-ZのZeviosの除算性能のメモ</a></p> <p><a target="_blank" rel="nofollow noopener" href="https://qiita.com/izuna/items/38a04fbedf531f193a7d">8bit CPU ATmega328の除算性能を測定してみた</a></p> <p><a target="_blank" rel="nofollow noopener" href="https://icf.hatenablog.com/entry/2019/04/16/181417">仮想マシンの加速支援機構つきの新型8bit CPU</a></p> spinlock tag:crieit.net,2005:PublicArticle/15684 2020-01-16T06:22:14+09:00 2020-01-16T06:22:14+09:00 https://crieit.net/posts/8bit-CPU-ICF3-Z-Zevios 8bit CPU ICF3-ZのZeviosの除算性能のメモ <h2 id="はじめに"><a href="#%E3%81%AF%E3%81%98%E3%82%81%E3%81%AB">はじめに</a></h2> <p>8bit CPU ICF3-Zのオリジナルのコア、<a target="_blank" rel="nofollow noopener" href="https://icf3z.idletime.tokyo/download.html">Zevios</a>の除算性能について解説します。Zeviosは2020年1月15日に緩いオープンソースライセンスであるApache License 2.0で公開されました。FPGAに実装できるverilogファイルがあるので、いろいろ性能を測定することができます。</p> <h2 id="Zeviosの除算器について"><a href="#Zevios%E3%81%AE%E9%99%A4%E7%AE%97%E5%99%A8%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6">Zeviosの除算器について</a></h2> <p>正しくは除算器というものはなくて8bitの加算器を効率的に動作させることで1サイクルに1bitの商を演算するアーキテクチャです。除算器の性能としては低いのですが、マイコン向けのCPUでは除算器がないものも多く、小さい面積なのに高速に除算ができるものになっています。(除算器としての面積がほとんどない) その除算向けのアーキテクチャを使って8bitより大きい除算をソフトウェアで実装できます。一般の8bit CPUによる実装よりも高速に演算できます。</p> <h2 id="16bit÷8bitの除算"><a href="#16bit%C3%B78bit%E3%81%AE%E9%99%A4%E7%AE%97">16bit÷8bitの除算</a></h2> <p>ICF3-Zでは加算器を使って効率的に演算できるようになっています。17サイクルで演算ができます。</p> <h2 id="24bit÷8bitの除算"><a href="#24bit%C3%B78bit%E3%81%AE%E9%99%A4%E7%AE%97">24bit÷8bitの除算</a></h2> <p>ICF3-Zでは加算器を使って効率的に演算できるようになっています。17サイクルで演算ができます。<br /> ただし被除数の最上位8bitが除数8bitよりも小さい場合に限ります。</p> <h2 id="32bit÷8bitの除算"><a href="#32bit%C3%B78bit%E3%81%AE%E9%99%A4%E7%AE%97">32bit÷8bitの除算</a></h2> <p>16bit÷8bitの除算方法を応用したサンプルコードによる性能は50サイクルです。サンプルコードはgithubで公開されています。<br /> sim2フォルダのpmem.asmzが32bit÷8bitのコードです。</p> <h2 id="32bit÷16bitの除算"><a href="#32bit%C3%B716bit%E3%81%AE%E9%99%A4%E7%AE%97">32bit÷16bitの除算</a></h2> <p>ICF3-Zのアーキテクチャを駆使したサンプルコードによる性能は約350サイクルです。サンプルコードはgithubで公開されています。<br /> sim1フォルダのpmem.asmzが32bit÷16bitのコードです。<br /> ソフトウェアの実装によって性能は違ってくると思われます。もっと高速な方法もあるかもしれません。<br /> 除数が8bit × 8bitの因数に分解できるものなら32bit ÷ 8bitを2回演算したほうが高速です。</p> <p>32bit÷15bitを230サイクルで演算するコードも作ったのですが、まだ十分に検証できていないため、今回は見送りました。</p> <h2 id="おわりに"><a href="#%E3%81%8A%E3%82%8F%E3%82%8A%E3%81%AB">おわりに</a></h2> <p>ICF3-Z Zeviosは、とても少ないトランジスタ数(面積)で実装できるのに高速です。16bit÷8bit、24bit÷8bitの除算が有効につかえるアプリでは低消費電力が期待できるように思われます。</p> spinlock