インテル、ISCA 2015でXeon＋FPGAの詳細を公開


今月はじめ、インテルがFPGA大手の[アルテラを総額2兆円で買収する](http://www.publickey1.jp/blog/15/lsifpgaxeonfpga.html)ことを発表した。インテルはちょっと前までは[CPU+FPGAなんてコードが分断するしダメダメソリューションだ](http://d.hatena.ne.jp/kazunori_279/20130107/1357521548)なんて言ってたくせに、なんて鮮やかな手のひらの返しよう。まあでも、すばらしい展開だし[非ノイマン計算をソフト屋が使いこなす時代が幕開けしそう](http://techon.nikkeibp.co.jp/article/COLUMN/20150113/398524/?ST=SCR)なので、あっぱれインテルである。非ノイマンなにそれ？　という人は[コネクションマシン本](http://www.amazon.co.jp/dp/4893620622)と[青いリコンフ本](http://www.amazon.co.jp/dp/427420071X)を読んでおこう。

この発表でインテルが説明に用いたスライドで、とくに目を引いたのが以下の一文。

> Up to 1/3 of Cloud Service Provider Nodes to Use FPGAs by 2020
> （2020年までに、クラウドサービスプロバイダのサーバの1/3がFPGAを利用する）

![Screen Shot 2015-06-22 at 10.44.47 AM.png](https://qiita-image-store.s3.amazonaws.com/0/38290/6034bd22-8618-5177-7bb4-0168055b978b.png)

つまりあと5年もすると、クラウドを使うエンジニアは直接的／間接的にFPGAを使わざるを得なくなる……とインテルは考えてる。

じゃあ、データセンターでFPGAっていったいどういう用途にどう使うの？　って点が気になるが、6/13にアメリカのポートランドで開催された計算機アーキテクチャの国際会議[ISCA 2015](http://www.ece.cmu.edu/calcm/isca2015/)においてインテルのPK Guptaがその疑問に答えてくれる発表を行った。その名も、

> Xeon+FPGA Platform for the Data Center

![Screen Shot 2015-06-22 at 11.09.31 AM.png](https://qiita-image-store.s3.amazonaws.com/0/38290/82c1f42b-08bb-48d7-822d-764879338037.png)

この発表の[スライドが公開](http://www.ece.cmu.edu/calcm/carl/)されたので、以下その要点をかいつまんでみたい。さらに、現地参加した[prof_hrkさんとshtaxxxさんによる一連のつぶやき](http://togetter.com/li/835270)もまとめたので、あわせて参考にしてほしい。

## なぜFPGAアクセラレータか

では、なぜデータセンターのアクセラレータとしてFPGAを使いたいのか？

![Screen Shot 2015-06-22 at 11.30.55 AM.png](https://qiita-image-store.s3.amazonaws.com/0/38290/d85ad0d1-07bc-0a53-e8ce-dcafe22eab13.png)

- パフォーマンスの強化：CPUコアだけじゃ足りない部分はアクセラレータで補う。PCIeやQPIでアクセラレータをつなぎ、CPUの1スレッドあたりにできることを増やす
- ヘテロ計算への移行：ムーアの法則は続いてるけど、アーキテクチャやソフトウェアには劇的な進化が求められる。従来のCPU単独の並列性だけでなく、CPU以外の技術も組み合わせたヘテロ計算を導入、シリコンの能力を引き出してアプリケーション特化したハードウェアを実現

MSははっきりと「ムーアの法則は終わった」って言ってるけど、さすがにインテルはそうは言えない様子。要するに、CPUコアやスレッドを増やすだけではあまり先が見えないので、GPUやFPGAと組み合わせてスレッドあたりの性能を高めよう、という意味だ。

## XeonとFPGAを25.6GbpsでQPI接続

FPGAをCPUのアクセラレータとして使う場合、CPUとFPGA間の接続がしょぼいとボトルネックになりがちだが、そこはインテル、がつんとQPIで提案している。

![Screen Shot 2015-06-22 at 11.41.33 AM.png](https://qiita-image-store.s3.amazonaws.com/0/38290/a072c145-a876-e38b-46a7-40eae8eb5abc.png)

6.4 GT/s full widthということは双方向で25.6Gbpsの帯域が得られる計算。ちなみにIBMも[POWER8のCAPI](http://qiita.com/kazunori279/items/5668350ef6273d21ecf7)ではこれに近い帯域で外部FPGA/ASICとの接続を提供してる。また上図をみるとFPGAからDDR3メモリとPCIeへの直接パスがあるので、MSのBing事例のようにFPGA同士をつないでトーラスを組んだり外部とRDMAしたりといった応用もできそうだ。

## CPUとFPGAの連携API

帯域は十分だとして、CPU上のソフトとFPGAとの連携はどうなるか？　を解説したのが以下の図。

![Screen Shot 2015-06-22 at 11.54.45 AM.png](https://qiita-image-store.s3.amazonaws.com/0/38290/55db876c-61c1-85cc-fb74-1af21d30690f.png)

CPU上のアプリケーションから見ると、FPGAとの通信は特定のメモリアドレスへのアクセスで行う。そのアドレスに、あれやって、これやって、とデータやコマンドを送ると、FPGA側でそれに応じた処理を始める流れになる。ただ、すべてのデータをCPUとFPGA間でバケツリレーしてるとそこがボトルネックになったりするので、例えばCPUから「PCIe経由で外部のネットワークやストレージからどばっとデータが流れてくるので、暗号化や正規表現マッチを直接やっといて」みたいな指示を出す……って使い方が出てくるはず。複雑な制御はCPUで、単純なストリーム処理はFPGAで、という役割分担だ。

## OpenCLで高位合成

では、FPGA上で動作するアクセラレータ自体はどのように開発するのか。従来のFPGA開発では、Verilog HDLやVHDLといったハードウェア記述言語（HDL）を用いてデジタル回路設計を行うのが主流。つまりはハードエンジニアの独壇場であった。俺もがんばって[小さいMIPSをHDLで書いてみた](http://d.hatena.ne.jp/kazunori_279/20140210/1391989012)けど、こりゃ仕事でやるのはムリと思い知った。MSのBing事例やドワンゴさんのようにおカネのあるプロジェクトではハードエンジニアを雇うのがベストだろう。

一方で、よりお手軽なFPGA開発手法としてこれから熱いのが高位合成。つまり、CやJava等のプログラミング言語でハードウェアのふるまいを記述して、そこからHDLを自動生成するという手法だ。国内ではみよしさんが開発した[Synthesijer](http://qiita.com/kazunori279/items/4951ca5f6164040878ce)がちまたで盛り上がりつつある一方で、GPUとも共用できる[OpenCLをFPGAの高位合成に用いる](https://speakerdeck.com/iitaku/opencl-programming-for-fpga)手法も使われ始めている。

インテルが提唱するのは、OpenCLをFPGAに用いる方法だ。

![Screen Shot 2015-06-22 at 12.03.34 PM.png](https://qiita-image-store.s3.amazonaws.com/0/38290/bb747fd3-9a74-6dea-9c73-c819372a6347.png)

この方法では、OpenCLの枠から出て自由自在にアプリ固有の非ノイマン計算機を組む、って訳にはいかなくなるけど、GPUと同じ手軽さでFPGAを使えるようになる。どちらが速いか比べて速い方を選ぶ、ってこともできそうだ。

## なければ買ってくればいいさ

![Screen Shot 2015-06-22 at 12.23.19 PM.png](https://qiita-image-store.s3.amazonaws.com/0/38290/850ab747-df59-c414-89ff-ec75da8c3c86.png)

さらに、インテルは「IPストア」というコンセプトも検討している。ここで言うIPとはIntellectual Property、つまりハードウェア回路のライブラリのこと。例えば、市場ではネットワーク通信、ディスクI/O、数値演算、暗号化、TCP/IPスタックなど、さまざまな商用IPが販売されている。それらを購入してFPGAに載せ、CPU側から簡単に呼び出して使う……といった将来像が描かれている。

## まずはディープラーニングに

Xeon+FPGAの用途だが、まずはやはり[MSでも実用化](http://tkysktmt.hatenablog.com/entry/2015/06/13/Microsoft%E3%81%8CFPGA%E3%81%A7DeepLearning%E3%81%97%E3%81%A6%E3%81%9F)されているディープラーニングのアクセラレータとして。

![Screen Shot 2015-06-22 at 12.28.01 PM.png](https://qiita-image-store.s3.amazonaws.com/0/38290/732df077-d6b9-6d85-4931-ebf840b082fc.png)

つづいて、Open vSwitchベースのネットワークスイッチのオフロード。

![Screen Shot 2015-06-22 at 12.29.57 PM.png](https://qiita-image-store.s3.amazonaws.com/0/38290/a1a70937-9b9a-6cbe-49f2-631e1816773a.png)

そして定番、金融機関のHFT。

![Screen Shot 2015-06-22 at 12.31.01 PM.png](https://qiita-image-store.s3.amazonaws.com/0/38290/28fb392a-fb08-7f37-3b3b-5d80bf66bcba.png)

といったところが応用として示されてる。

# Xeon+FPGA、早く来てほしい

Xeon+FPGAの出荷は2016年とのことで、とりあえずOpenCLでディープラーニングを実装する練習でも始めておこうかと思う今日このごろです。

ちなみに、次回の[FPGAエクストリームコンピューティング](http://qiita.com/kazunori279/items/cbd8292b454027241ce4)は8/2にドワンゴさんで開催予定。来月頭には告知する予定なので、しばしお待ちを……。