United Statesからアクセスのようです。言語設定をEnglishに切り替えますか?
Switch to English site
Skip to main content

演算速度を比較!「FPGAファブリック」と「ARMコアプロセッサ」

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_AP_SoC_Arhitecture_f30aa268255f67fa1f89328c5a71e88c16972b6b.png

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_SoC_Platform_32163f9d5a13fd9bde54db873f65f63d5a562f5e.png

Cora Z7 Zynq 7000 Platform

モンテカルロ法による円周率の推定

モンテカルロ法による円周率の推定については、数多くのサイトで解説されています。この サイトを見てみてください。原理は、大量のランダムな点を発生させて、単位正方形で囲まれた円の中に何個入るかを調べるというものです。正方形の面積は1ですが、円の面積は半径が0.5なので、円周率÷4です。大量のランダムな点(x,y)があります。

Estimating_Pi_using_Monte_Carlo_e191f3e53f887f5288ce5b8dbecc826be1148bab.png

Estimating_Pi_using_Monte_Carlo1_a2892bbf0e998151568253dd550e4d110d70a156.png

このアルゴリズムを実装するには、単純にランダムな点(x,y)を生成し、その点の原点(x,y)からの距離が1以下(x2 + y2 <= 1)であるかどうかをチェックします。1以下であれば、円の内側に現れた点の数を増やします。

ARMプロセッサとLinuxでのアルゴリズムの実行

このチュートリアルでは、Cora Z7 ARMプロセッサでLinuxを起動する方法を学びます。その後、Goプログラミング言語を使用して、モンテカルロ法によりPiを推定します。必要なのは、Ubuntu 16.04.3、Xilinx Viavdo 2017.4PetalinuxGolangです。Golangはapt-getでインストールできますが、その他のツールはザイリンクスのウェブサイトからダウンロードする必要があります。Linuxを起動するにはPetalinuxを使用する必要があります。

下の表では、Cora Z7の各モデルが10万個のモンテカルロサンプルを処理するのに要した時間を示しています。

Petalinux_Monte_Carlo1_6e6d1309e2f78d161dc7b9421ab00ea909abd044.png

FPGAファブリックでアルゴリズムを実行

このチュートリアルでは、FPGAロジックでアルゴリズムを構築する方法を説明します。FPGAファブリックには、デジタル信号処理(DSP)スライスと呼ばれる要素があります。モンテカルロ法を実行する場合、2つの乗算演算(x*xとy*y)を実行する必要があります。各乗算演算の結果が48ビット以下の幅であれば、モンテカルロシミュレーションを実行するコードのインスタンスごとに、CoraのDSPスライスを2つ使用するだけで大丈夫です。ランダムなサンプルは、コントローラから供給されるシード値を用いて、線形フィードバック・シフト・レジスタ(LFSR)を用いて作成されます。システム全体のクロックは125MHzです。32ビットの整数に収まるだけのサンプルを実行することを選択してください。

以下に貼り付けたCoraの各モデルで出力された結果をご覧ください。

FPGA_Monte_Carlo_93bc1ffdc6a8fde4b08850e4cf2fe8f97f2f48ee.png

FPGAとプロセッサの比較

Cora Z7のモデルの遅い方は32ビット整数に相当するサンプルを約1秒で処理できましたが、速い方はLinuxで1億サンプルを1.8秒で処理するに留まりました。つまり、ハードウェアで高速化したバージョンのアルゴリズムは、77倍の速さだったことになります。このFPGAデザインでは、1クロックサイクルあたり9個のモンテカルロサンプルを処理することができます(8ナノ秒あたり1クロックサイクル)。

awong さんはまだ自己紹介を入力されていません...
DesignSpark Electrical Logolinkedin