このページの本文へ

ロードマップでわかる!当世プロセッサー事情 第666回

CPU黒歴史 思い付きで投入したものの市場を引っ掻き回すだけで終わったQuark

2022年05月09日 12時00分更新

文● 大原雄介(http://www.yusuke-ohara.com/) 編集●北村/ASCII

  • この記事をはてなブックマークに追加
  • 本文印刷

無駄に性能が高すぎて爆熱
なのに割り込み処理は8bit MCUより遅い

 さて、問題はこれに先立って発表され、2013年11月からリリースされたQuarkと、これを搭載したGalileoである。

上が初代Galileoボード、下が第2世代(2014年8月発表)である

 Quark SoCは400MHz駆動のCPUコアに512KBのSRAMとDDR3のメモリーコントローラー、PCIe、それといくつかの周辺機器を搭載した構成となる。

MCUならここにADC/DAC/コンパレーター/オペアンプ/タイマー/PWMなどが搭載されることになる。逆にUSBやイーサネットはともかくPCIeが入るのは変だし、割り込みがAPICというのもけっこう面倒くさい

 メモリーも内蔵しているので一応MCU(Micro Controller Unit)という分類にできなくもないのだが、実際にはメモリーマッピングの管理がMPU(Memory Protection Unit)ではなく仮想記憶に対応したMMU(Memory Management Unit)で、このためMMUに非対応なRTOS(Realtime OS)などはそのままでは動かないというあたりは、分類的にはMPU(Micro Processor Unit)に該当する。

 実際にDebianやYocto Linuxなどが動作しており、軽量なIoT向けOSを利用しようとすると、わりと使いにくいことになった。実際Quark SoCを搭載したGalileoボードではArduino互換のコードを実行できるのだが、Arduino Uno向けのLチカのコードが1KBだったのに対し、これをGalileo向けにビルドすると48KBにも膨れ上がった。

 Galileoでは、まずLinuxカーネルが動作し、その上で仮想的にArduinoのSketchをサポートするクライアントが動くという構造だったので、そもそも効率が悪い。

当時のProduct Briefより抜粋。Linuxカーネルが動作し、その上で仮想的にArduinoのSketchをサポートするクライアントが動く構造なので、I/Oが遅いわけである

 さてこのQuarkのCPUコアであるが、実はP54Cである。つまり第2世代のPentiumコアである。インテルとしては、P54コアは非常に使い勝手が良かったようで、前回のGNAの制御もそうだし、古いところではLarrabeeがやはりP54Cコアベースで構築されている。他にも研究用などでP54Cコアは多く使われている。ただ、MCUとして見た時には以下の欠点がある。

  • 無駄に性能が高すぎる
  • 割り込み応答性が悪い

 なんというか、テクニカルコースに出るレース車にドラッグレース用エンジンを積むようなものだ。実際普通(?)のArduinoは動作中にチップを触ってもほんのり温度が高いかな? という程度だが、Quarkは公称消費電力2.2Wにも関わらず、触れないくらい熱くなる。

 パッシブヒートシンクくらいでは連続運用には厳しく、アクティブファンが必要な温度で、こうなると組み込み用途ではいろいろ制限が出てくるし、消費電力も多い。そのくせインオーダーながらスーパースカラーのプロセッサーなので、割り込み処理は8bit MCUより遅い。したがって、消費電力を下げるために動作周波数を下げると、割り込み処理がさらに遅くなるという不都合がある。これでIoT機器を作れ、と言うのはなかなかしんどいものがある。

 ちなみにQuarkの派生型で、Silver ButteやMint Valleyといったコード名の製品(製品名はQuark D1000/D2000)もあり、こちらは32MHzまで動作周波数を落とした代わりに消費電力は25mWと超ローパワーになったが、同じ動作周波数の8bit MCUより遅かったため、やはり採用例を聞いたことがない。

 それでも会社のトップがぶち上げた以上、やるしかない。初代Galileoボードは、それはそれはひどいものだった。下の画像がGalileoボードの構成図である。

Quarkの周辺にあるADCやGPIO PWMが問題のもの

 なぜMCUにPCIeバスが要るんだ? という突っ込みはヤボかもしれないが、それよりも大問題なのはアナログ入出力やPWM出力といった、MCUではごく当たり前に利用される周辺回路がQuarkには統合されていないことだ。

 ではどうするか? まずアナログ出力は切り捨てた(!)。この段階でちょっと待てと思うのだが、アナログ入力については外付けになったADCをSPI経由でつなぎ、PWMはやはり外付けのPWMコントローラーをGPIOでつなぐという、おそろしく効率の悪い(そして原価コストが跳ね上がる)方法で実装した。

 この結果として、例えばアナログデータのサンプリング速度は、20MHz駆動のATmega328を搭載したArduino Unoの数十分の1というケースもあった。これはもう、根本的にMCUとして使うことを考えていないとしか言いようがない構成だった。

カテゴリートップへ

この連載の記事

注目ニュース

ASCII倶楽部

プレミアムPC試用レポート

ピックアップ

ASCII.jp RSS2.0 配信中

ASCII.jpメール デジタルMac/iPodマガジン