こちらの記事について、内容・翻訳・視点・長さなど、皆様のご意見をお送りください。今後の記事製作の参考にしたいと思います。
Thank you! Your feedback has been received.
There was a problem submitting your feedback, please try again later.
こちらの記事の感想をお聞かせください。
FPGA(Field Programmable Gate Array)は、ユーザーが指定したタスクを実行するようにハードウェア的にプログラムされた論理ゲートのアレイです。FPGAには、多くの計算や命令を同時に実行できる並列処理機能が備わっています。これにより、プロセッサベースのプラットフォームに比べて計算速度が大幅に向上します。また、DSPスライスや高速メモリなどの高速な組み込みリソースにより、FPGAはアルゴリズムの高速化にも利用されるようになりました。
本プロジェクトでは、円周率推定アルゴリズムをFPGAハードウェアで実行した場合の速度と、同じアルゴリズムをプロセッサで実行した場合の速度を比較します。モンテカルロ円周率推定アルゴリズムは、ARM/FPGA SoC開発用のDigilent Cora Z7 Zynq-7000のシングルコアおよびデュアルコア・オプションのFPGAファブリックとプロセッサの両方で実行されます。ザイリンクス Zynq-7000アーキテクチャは、シングルコアまたはデュアルコアの667MHz ARM Cortex-A9プロセッサとザイリンクスの7シリーズFPGAを緊密に統合しています。
Zynq APSoC Architecture
Cora Z7の製品モデルは、それぞれ「Cora Z7-10 (184-0484) 」、「Cora Z7-07S (184-0456) 」と呼ばれています。Cora Z7-10とCora Z7-07Sの唯一の違いは、Zynqの部品の能力です。Cora Z7は、1GbpsイーサネットPHYからアナログ・デジタル・コンバータ、汎用入出力端子まで、豊富なハードウェア・インターフェースを備えており、多種多様な組み込みアプリケーションの開発に最適なプラットフォームとなっています。
製品モデル | Cora Z7-10 | Cora Z7-07S |
Zynqの部品 | XC7Z010-1CLG400C | XC7Z007S-1CLG400C |
ARMプロセッサの数 | 2 | 1 |
1 MSPS オンチップADC | Yes | Yes |
ルックアップテーブル(LUT) | 17,600 | 14,400 |
フリップフロップ | 35,200 | 28,800 |
DSPスライス | 80 | 66 |
ブロックRAM | 270 KB | 225 KB |
クロック管理タイル | 2 | 2 |
Cora Z7 Zynq 7000 Platform
モンテカルロ法による円周率の推定
モンテカルロ法による円周率の推定については、数多くのサイトで解説されています。この サイトを見てみてください。原理は、大量のランダムな点を発生させて、単位正方形で囲まれた円の中に何個入るかを調べるというものです。正方形の面積は1ですが、円の面積は半径が0.5なので、円周率÷4です。大量のランダムな点(x,y)があります。
このアルゴリズムを実装するには、単純にランダムな点(x,y)を生成し、その点の原点(x,y)からの距離が1以下(x2 + y2 <= 1)であるかどうかをチェックします。1以下であれば、円の内側に現れた点の数を増やします。
ARMプロセッサとLinuxでのアルゴリズムの実行
このチュートリアルでは、Cora Z7 ARMプロセッサでLinuxを起動する方法を学びます。その後、Goプログラミング言語を使用して、モンテカルロ法によりPiを推定します。必要なのは、Ubuntu 16.04.3、Xilinx Viavdo 2017.4、Petalinux、Golangです。Golangはapt-getでインストールできますが、その他のツールはザイリンクスのウェブサイトからダウンロードする必要があります。Linuxを起動するにはPetalinuxを使用する必要があります。
下の表では、Cora Z7の各モデルが10万個のモンテカルロサンプルを処理するのに要した時間を示しています。
FPGAファブリックでアルゴリズムを実行
このチュートリアルでは、FPGAロジックでアルゴリズムを構築する方法を説明します。FPGAファブリックには、デジタル信号処理(DSP)スライスと呼ばれる要素があります。モンテカルロ法を実行する場合、2つの乗算演算(x*xとy*y)を実行する必要があります。各乗算演算の結果が48ビット以下の幅であれば、モンテカルロシミュレーションを実行するコードのインスタンスごとに、CoraのDSPスライスを2つ使用するだけで大丈夫です。ランダムなサンプルは、コントローラから供給されるシード値を用いて、線形フィードバック・シフト・レジスタ(LFSR)を用いて作成されます。システム全体のクロックは125MHzです。32ビットの整数に収まるだけのサンプルを実行することを選択してください。
以下に貼り付けたCoraの各モデルで出力された結果をご覧ください。
FPGAとプロセッサの比較
Cora Z7のモデルの遅い方は32ビット整数に相当するサンプルを約1秒で処理できましたが、速い方はLinuxで1億サンプルを1.8秒で処理するに留まりました。つまり、ハードウェアで高速化したバージョンのアルゴリズムは、77倍の速さだったことになります。このFPGAデザインでは、1クロックサイクルあたり9個のモンテカルロサンプルを処理することができます(8ナノ秒あたり1クロックサイクル)。