人工知能(础滨)は、私たちとさまざまな机器とのやりとり、そして私たちの生活のあり方そのものを根底から変革する可能性を秘めています。础滨タスクでは、エッジ机器とデータセンターの间でペタバイト级のデータを効率よく転送して処理および演算が行われます。现実世界のデータを処理し、このデータの数学的表现を作成できるかどうかが重要な要素となっており、场合によってはこれが製品の大きな差别化要因となります。最适化された高精度なファンクションをハードウェアで実装すると、プロセッシング?ユニットの负荷を軽减できます。础滨ベース?システムで使用される数学アルゴリズムが安定してくれば、これらをハードウェアで実装して演算リソースを解放したいという要求が高まっています。これは、多くの础滨アプリケーションでメリットがあります。
础滨の最も重要な概念の1つに、ニューラル?ネットワークがあります。ニューラル?ネットワークとは、人间の脳および神経回路を模したコンピュータ?システムと定义されます。ハードウェアの観点からは、これは与えられた入力に対する出力を「学习」する関数であると言えます。この学习はトレーニングとも呼びます。たとえばネットワークで何かの画像を认识したい场合、ネットワークに多くの画像を见せて学习させます。この学习は、数学を用いて実装します。
トレーニングが完了したニューラル?ネットワークを実行してデータを分析/分類したり、不足しているデータを計算したり、未来のデータを予測したりすることを推論と呼びます。推論を実装するには、入力データに重み付き行列を掛け、その結果に活性化関数を適用し、ニューロンが受信している情報が特定の情報に関連しているのか、それとも無視すべきであるのかを判断します。活性化関数は単純な二値を出力するステップ関数から複雑な関数までいろいろな種類がありますが、特に多く使われているのはS(x) = 1/(1+e-x)として表されるシグモイド関数です。シグモイド関数は図1に示したようなS字曲線をしており、入力xが-∞に近付くと出力はS(x) = 0に近付き、xが+∞に近付くとS(x) = 1に近付き、x = 0のときはS(x) = 0.5となります。0.5より大きい値に「Yes」、0.5より小さい値に「No」のラベルを付けることも、入力xに対する出力値を「Yes/No」の確率として表すこともできます。ただし、シグモイド関数は入力値が>3または<-3のときに曲線がほとんど平坦になるため、学習を継続するには非常に高い精度が必要になるという課題があります。
図1:人工ニューロンの活性化関数として広く利用されるシグモイド関数
精度を高くするとデザインが複雑になるため、浮動小数点(FP)の精度が必要かどうかはしばしば議論の的となります。現在のニューラル?ネットワークを利用した予測では、32ビット浮動小数点が要求されることはほとんどなく、16ビット浮動小数点さえも不要なことがあります。多くのアプリケーションでは、ニューラル?ネットワークの計算に8ビット整数を使用しても十分な予測精度を維持できます。AIアプリケーションに必要な精度は、個々の设计要件に応じて決定する必要があります。たとえば、ニューラル?ネットワークで単に「青」を識別できればよいのか、さまざまな種類の「青」を区別する必要があるのかによって必要な精度は異なります。
DesignWare? Foundation Coresは多数の数学IPコアをライブラリにしたもので、これらの演算機能を使用するとAIアプリケーションの数学的構造を極めて柔軟に実装できます。DesignWare Foundation Coresはハードウェアに効率的に実装できるように最適化されており、设计者はデザイン固有の要件を満たしながらデザインの精度を制御し、消費電力、性能、面積のトレードオフを行うことができます。例として、簡単な積和演算器(ベースライン)と複数の精度をサポートしたビルド済み融合積和演算器(FMA)の精度と面積を比較したものを図2に示します。
図2:ベースラインと复数精度に対応した贵惭础
浮動小数点演算と整数演算のいずれの場合も、演算と演算の間の内部丸めは设计者が制御できます。浮動小数点演算の場合は、内部丸めの制御とFFP(Flexible Floating Point)フォーマットを使用すると、共通の演算を共有することによってより効率的なハードウェア実装が可能です。设计者はFFPフォーマットを使用して独自の特殊なFPコンポーネントを実装し、ビット精度のC++モデルを使用してコンポーネントの面積と精度を検討しながらデザイン固有の要件を満たすことができます。
浮动小数点アルゴリズムは、不可分操作を组み合わせて作成します。浮动小数点デザインをサポートする滨笔は、浮动小数点アルゴリズムを构成するサブファンクションに基づいている必要があります。例として、サブファンクションを组み合わせたシンプルな浮动小数点加算器のブロック図を図3に示します。
図3:サブファンクションに基づく滨笔ベースの浮动小数点デザイン
浮动小数点加算器には大きく指数部计算と仮数部计算の2つのパスがあります。これらのパスが情报を交换して最终的な计算结果を生成します。仮数部をシフトすると、指数部もそれに応じて调整されます。主なサブファンクションには、小数点の位置合わせ、固定小数点加算、正规化、丸めがあり、これらが仮数部计算を构成します。浮动小数点加算器のロジックの中で最も大きな割合を占めるのが正规化で、これを省略すればハードウェア最适化の余裕度が大きくなりますが、そうすると演算と演算の间で仮数部のビットが一部失われることがあります。仮数の内部値は固定小数点で表现され、これらは指数部计算チャネルの指数値と密接に结合されます。サブファンクションを実装するには、标準の浮动小数点システムよりも制约や特殊ケースの少ない方法で指数部と固定小数点の仮数部を表现する必要があります。
浮動小数点数の加算を繰り返す場合、正規化と丸めのステップがクリティカル?パスの大部分を占めます。複合演算を作成する場合、通常は一連の演算の最後に正規化と丸めを実行することが推奨されます。これは、正規化や丸めなしに浮動小数点演算の内部固定小数点値に直接アクセスした方が複雑さ、面積、およびクリティカル?パスを軽減でき、内部精度を设计者が自由に制御できるためです。図4は、簡単な2ステージ加算器の例を示したものです。正規化と丸めをなくすと、数値の挙動が変化します。第一に、最初のFP加算器で指数部の計算がやや簡略化されます。第二に、加算器の浮動小数点出力の表現がIEEE 754規格に準拠しなくなります。第三に、2番目の浮動小数点加算器はこの新しい表現を理解し、1番目の加算器でどのような処理が行われたのかについての情報を取得して判定を実行する必要があります。
図4:简略化したサブブロックで构成した复合ファンクション
シノプシスDesignWare Foundation Coresは、IPを活用したプロジェクトを作成する場合に使用するコンポーネントをライブラリとしてまとめたものです。各コンポーネントを設定すると、そのRTLとCモデルがプロジェクト?ディレクトリにインストールされます。これには、これらコンポーネントの検証とインプリメンテーションに関連するすべてのファイルが含まれます。デザインが完成したら、これらのファイルは全体的なSoCデザインに統合され、设计者は次世代製品の開発に向けてRTLの改良を続けることができます。
AIの爆発的成長により、現実世界で人間と機器がより直接的な方法でやりとりできる新しいデザインが次々と登場しています。現実世界のデータを処理し、このデータの数学的表現を作成できるかどうかが重要な要素となっており、设计者はさまざまなアプローチでAIを製品に適用しようと試みています。最適化された高精度なファンクションをハードウェアで実装すると、プロセッシング?ユニットの負荷を軽減できます。AIシステムでは、数学アルゴリズムをハードウェアで実装することで大きな優位性が得られます。
DesignWare Foundation Coresは、構成や実装をさまざまに変えてデザインのトレードオフを検討しながら精度、消費電力、性能、面積を最適化しつつ、デザイン固有の要件を容易に満たすことのできる強力なツールとなります。モデルを生成したら、ビット精度のC++モデルを使用してすぐにシミュレーションを実行して、AIデザインがプロジェクトの要件を満たしているかどうかを確認できます。
详细情报
ウェブサイト:DesignWare Foundation Cores