翻訳: プログラム可能なハードウエアを搭載したEC2インスタンス(F1)

原文

AWS Blog

Developer Preview – EC2 Instances (F1) with Programmable Hardware
by Jeff Barr | on 30 NOV 2016

https://aws.amazon.com/jp/blogs/aws/developer-preview-ec2-instances-f1-with-programmable-hardware/

感想
* Ultraスケール使ってみたい
* Ultraスケール向けにフロアプランナを作ってみたい
* Vivadoを１０本とか同時に動かせるのだろうか？
* Ultra8個あればASICプロトタイピングとか余裕でできる？


----
# プログラム可能なハードウエアを搭載したEC2インスタンス(F1)
ジェフ・バール


汎用的な目的を持ったツールと特定の目的のために作られたツールのどちらかを選ばなければ
ならなかったことはありませんか？
汎用ツールは、多くの異なる問題を解くのに使えますが、ある特定の問題に最適にはならないでしょう。

特定の目的向けに作られたツールは、その仕事に限れば素晴らしい能力を発揮しますが、それが必要な機会は多くはないでしょう。


コンピュータエンジニアは、アーキテクチャや命令セットをデザインするときにこの問題に直面し、たいていは広範囲の仕事で良い性能を出せるアプローチを選択することになります。

## FPGAの世界に入ろう

ハードウエアベースで解決するカスタム化への興味深い道筋の１つは、フィールド・プログラマブル・ゲートアレイ(FPGA)でしょう。

単一の機能を念頭においてデザインされたカスタムチップとは対照的に、FPGAはよりフレキシブルです。
FPGAはPCボード上のソケットに接続した後でもプログラムすることができます。
各々のFPGAは有限個の簡易な論理ゲートを持っています。
FPGAをプログラムするということは、簡単に言えば所望の論理機能（AND,OR,XORなどなど)やストレージ要素(フリップフロップやシフトレジスター）を生成するためにロジックゲートを結線することです。
CPUが本質的にシリアル処理（多少の並列要素はあるにしても）でかつ固定命令長、固定長のデータパス（たいてい32bitか64bit)であるのとは違って、FPGAは並列に多数の処理を実行するようにプログラムでき、その処理も任意のデータ幅（大小どちらでも）にすることができます。


この高度な並列化モデルは、集中的な計算が必要な問題を処理するためのカスタムアクセラレータを作るのに理想的です。
適切にプログラムされていれば、FPGAは遺伝子解析、自身解析、金融リスク解析、ビッグデータ検索、暗号化アルゴリズムなど、様々なタイプの用途で、３０倍スピードアップさせる可能性を秘めています。

![f1_fpga_floor_2.png](https://qiita-image-store.s3.amazonaws.com/0/56104/7a720927-fab0-f1e3-754f-78463943c0a2.png)

このことを素晴らしいと感じて、あなたのアプリケーションをスピードアップするために使ってみようとしているならうれしいです！
ただ、使うためにはチャレンジが必要です。
まず、FPGAは伝統的に大きめの特定目的のシステムのコンポーネントでした。
FPGAベースのソリューションは、ハードウエアプロトタイピング、ハードウエア機器の構築、大量生産、長期にわたる販売・配置サイクルを含んでいますが、簡単には買えませんし、あなたのデスクトップに接続することも簡単ではありません。
この導入までの時間が、FPGAの適用対象を制限していますし、CPUベースのソリューションをコスト的に有利にしてしまっています。

私たちはもっとうまくできると考えています。

## 新しいF1インスタンス

本日、私達は新しいF1インスタンスの開発者プレビューを公開しています。
あなたの用途向けにアプリケーションやサービスを構築できることに加えて、それをパッケージ化してAWSマーケットプレースで再販できるようになります。
これらをひっくるめると、ソフトウエアと同じようなビジネスモデルを使って、かつてはFPGAベースのアプリケーションを使うのに必要条件であった、資本集中的、かつ非常に時間を要するステップを避けることができるようになります。

我々は、あなたが独自のロジックを設計し、それをクラウドベースのツールを使って、シミュレーションや検証し、数日でマーケットにリリースする環境を提供します。

Intel Broadwell E5 2686 v4プロセッサ, 最大976GBのメモリ、最大4TBのNVMe SSDストレージ、そして、１個から８個までのFPGAを装備したF1インスタンスは、メインコア、FPGAベースのロジックに潤沢なリソースを提供します。
搭載しているFPGAはインスタンス専用となり、マルチテナント環境では分離されます。


以下は、FPGAのスペックです。
（１つのF1インスタンスには、これらが８個まで搭載できることを覚えておいてください）

* 16nmプロセスで製造された　Xilinx UltraScale+ VU9P 
* 288bit幅の64GB DDR4 4チャネル ECCプロテクトメモリ
* CPU接続のための専用PCIe x16 インタフェース
* 約250万個の論理エレメント
* 約6,800個のDSPエンジン(DSP:ディジタル信号処理プロセッサ)
* デバッグのための仮装JTAGインタフェース


１つ以上のFPGAを持ったインスタンスにおいて、専用PCIeファブリックによってFPGAと同一のメモリアクセス空間を共有し、相互に12GB/secでやり取りすることができます。
インスタンスの複数FPGAは、低レイテンシで高帯域通信を可能とする400Gbps双方向リングバスで接続されています。（ただし、この先進的な機能を利用するためには独自のプロトコルを
定義する必要があります）


## FPGA開発プロセス

開発者向けプレビューの一部として、FPGA開発AMIを使えるようにしています。
このAMIを設計、シミュレーションに最適なメモリ、CPU環境を持ったインスタンスで
起動することができます。そして、F1インスタンスを使って、最終的なデバッグ、テストを行うことができます。

![f1_run_ami_2.png](https://qiita-image-store.s3.amazonaws.com/0/56104/d54fbfb6-bace-99fb-8928-a42a91550465.png)


このAMIは、AWSクラウドで無料で使える開発ツールを含んでいます。
VHDLまたはVerilogでFPGAをコーディングし、それをシミュレーション、検証するのに、
Xilinx Vivid Design Suiteを使うことができます。
（サードパーティのシミュレータや高位合成ツール、グラフィカルな設計ツール、IPライブラリを使うこともできます）


ここで、シンプルな8ビットカウンタのVerilogコードをお見せしましょう。

```c
module up_counter(out, enable, clk, reset);
output [7:0] out;
input enable, clk, reset;
reg [7:0] out;
always @(posedge clk)
if (reset) begin
  out <= 8'b0;
end else if (enable) begin
  out <= out + 1;
end
endmodule
```



これらの言語は、C言語に近い文法で記述されますが、既存のCコードをFPGAにリコンパイル
できるというわけではありません。
FPGAプログラミングモデルを深く理解していき、ブール代数を学び、遅延伝搬や同期設計について学んでいく必要があります。
こういった基礎があって初めてFPGAをあなたの環境に当てはめる方法を考え始めることができるようになります。
もし、あなたにとって難しすぎると感じたとするならば、安心してください。
OpenCLを含む多数の高位合成ツールを使うこともできます。


インスタンスを立ち上げ、ログインし、多数のパッケージをインストールしました。
そして、ライセンスマネージャを設定し、ようやくVivadoツールを起動できました。
その後、リモートデスクトップを立ち上げ、ターミナルウインドウを開き、GUIモードでVivadoを開始しました。

![f1_run_vivado_1.png](https://qiita-image-store.s3.amazonaws.com/0/56104/1b1bae52-0a4c-c42d-f031-cea63a1b4817.png)


先ほどのサンプルコードと同じプロジェクトを開き、遂にFPGAがどのようにして設計、プログラムされるかを見ることができました。

![f1_vivado_running_1.png](https://qiita-image-store.s3.amazonaws.com/0/56104/cc6d3abf-fcf8-1337-e484-32ca7acc55d4.png)


ちょっとした探索をした後に、どうにか最初の論理合成を行うことができました。
(この時点でもう少しクリックしていろいろとやっています。こういったことについて
私は初心者ではないのです）

![f1_my_first_fpga_1.png](https://qiita-image-store.s3.amazonaws.com/0/56104/79a25e0f-c8e2-415f-78c8-02cf22e7be8a.png)


ここから、作った回路をテストし、Amazon FPGAイメージ(AFI)としてパッケージングし、自分で使うなり、AWSマーケットプレースに出品するなりするのでしょう。
ほんの数週間で可能なこれらすべての工程をあなたにお見せできればよいのですが。


## F1ハードウエア開発キット


私がF1インスタンスについて学んだ後に疑問に思ったことの一つは、FPGA、CPU、メモリ間のインタフェースです。
F1ハードウエア開発キット(HDK)には、ホスト-FPGA間、FPGA-メモリ間、FPGA間を含む複数の通信のための、あらかじめ設定されたI/Oインタフェースとサンプルアプリケーションが含まれています。
また、これに加えて、コンパイル用スクリプト、参考例、稼働時に使えるデバッグツールセット
も含まれています。
F1開発プレビューのメンバはこのキットを利用できます。

![f1_github_hdk_1.png](https://qiita-image-store.s3.amazonaws.com/0/56104/ed29f3d0-eb6b-0e9f-9cb4-827919f4da87.png)


## まとめ


ここで押さえておきたいことは、F1インスタンス、クラウドベースの開発ツール、FPGAベースアプリケーションの流通システムの組み合わせは、独特でパワフルなことです。
このFPGAモデルのパワーと自由度は、すべてのAWSユーザが今享受できます。
私は、この仕組みが全く新しいアプリケーションやビジネスを起こすものと確信しています。


## 今日から始めましょう

以前言及したように、我々は開発者プレビューの申請フォームをUS Eastリージョンで本日から開始しました。その他のリージョンは、2017年早々に一般利用できるようになってから開始します。
もし、FPGAプログラミングのご経験がおありで、ご興味がありましたら、登録してみてください。