Parallella Fan!
Home記事一覧BBS

Epiphanyアーキテクチャ・リファレンス概要

公式ドキュメントの入手方法

公式ドキュメントは、以下のサイトからダウンロードできます。

Epiphanyアーキテクチャー・リファレンス・マニュアル、SDK リファレンス・マニュアル、データ・シート等

概要

Epiphanyアーキテクチャーは、以下の要素から構成されます。


図:Epiphanyアーキテクチャー実装

Epiphanyアーキテクチャーは幅広いアプリケーションにおいて良好な性能を発揮するように設計されていますが、特にコードやデータが空間的・時間的にローカリティーのあるアプリケーションにおいて卓越した性能を示します。そのようなアプリケーションの例としては、画像処理、通信、センサー信号処理、暗号処理などがあります。

各ノード間の高速通信はEpiphanyアーキテクチャーの2D eMesh Network-On-Chip(NoC)によって実現されます。メッシュ・メットワークは高スループットのリアルタイム・アプリケーションにおけるトラフィック・パターンを効果的に扱えます。多くのデータを1サイクルで通信するためには各ノード間に多数の配線が必要ですが、メッシュ型のネットワークはそれを省スペースで実現できるという利点があります。

各ルーティング・リンクは8 Bytes/cycleの転送能力を持ち、各ルーティング・ノードにおいて64 Bytes/cycleの転送が可能となっています。動作クロックが1 GHzの場合、64 GB/secの帯域幅をサポートします。


図:「eMesh」ネットワーク・オン・チップ概要

Epiphanyアーキテクチャーのメモリー・マップはフラットかつ非保護となっています。各メッシュ・ノードは無制限にメモリー・システムの全域に直接アクセス可能です。Epiphanyアーキテクチャーはフラットな32 bitアドレスのメモリー・マップと4096までの独立したメッシュ・ノードをサポートしています。

共有メモリー・アーキテクチャーと低遅延のオン・チップ・メッシュ・ネットワークは、非常に小さなオーバーヘッドで数バイトから数キロバイトに渡るメッセージの受け渡しを可能にしています。

eMesh NoCの広い帯域と少ない遅延は、細粒度のタスクの並列実行から大きなカーネルの実行までを可能にします。Epiphanyアーキテクチャーは様々なレベルの並列性に対応しているため、並列プログラミングがより簡単になり、タスク間通信のボトルネックを大幅に削減します。

Epiphanyアーキテクチャーの特長:

要点抜粋

メモリー操作の順序付けについて(Epiphany Architecture Reference(以降E.A.R.と略)4.2より)

エンディアンについて(E.A.R. 4.3)

Epiphanyアーキテクチャーのメモリー・アーキテクチャーは、リトル・エンディアンです。

データ・アラインメントについて(E.A.R. 4.4)

全てのデータの格納アドレスは、そのデータ・サイズに合わせて「整列」されていなければなりません。整列されていないデータへのアクセスは、例外を発生します。非整列のストアでは、間違った値がメモリーに書き込まれます。非整列のロードでは、例外が発生する前に間違った値がレジスターに読み込まれます。各データ・タイプにおける格納アドレスの下位ビットは、以下のようになっていなければなりません。(「x」は1または0の値をとります。)

データ・タイプアドレスの下位3ビット
バイトxxx
ハーフ・ワード(2バイト)xx0
ワード(4バイト)x00
ダブル・ワード(8バイト)000

プログラム・フェッチ・アラインメントについて(E.A.R. 4.5)

全ての命令は、ハーフ・ワード(2バイト)境界に整列されていなければなりません。

レジスターについて(E.A.R. 7.1.2)

各コアには32bit x 64個のレジスターがあります。そのうち45個が汎用レジスターとして使用できます。64bitの値のロード・ストアも可能です。

Epiphany命令セットについて(E.A.R. 7.7)

全ての命令は16bit長バージョンと32bit長バージョンがあります。16bit長バージョンを利用すれば、コードサイズや消費電力を減らすことができます。ただし、16bit長バージョンでは利用できるレジスターや即値のサイズに制限があります。

ロード・ストア命令について(E.A.R. 7.7.2)

ロード命令やストア命令では、ローカル・メモリーだけでなく他のコアのメモリーや外部メモリーにアクセスできます。(ただし、効率を考慮すればローカル・メモリー以外へのアクセスにはDMAを積極的に利用すべきです。)

ロード・ストアのアドレッシング・モードには以下の種類があります。

レジスター・ムーブ命令について(E.A.R. 7.7.6)

条件付きムーブ命令があるので、単純な条件分岐は分岐ミスのペナルティの影響を受けることなく実行することができます。

分岐ミスのペナルティについて(E.A.R. 7.11)

Epiphany eCore CPUには動的分岐予測機構はありません。分岐は、常に「分岐しない」方向に静的に予測されます。条件分岐で分岐しない場合のペナルティは0サイクルです。

分岐した場合は、必ず3サイクルの分岐ミス・ペナルティが発生します。一般的なCPUの分岐ミス・ペナルティに比べれば僅かなものですが、極めて小さなループ等では、ロスを最小化するために、ループ・アンロール等のテクニックが有効です。

DMA概要(E.A.R. 8.1)

Epiphanyの各プロセッサ・ノードは、独立したDMAエンジンを備えています。

DMAエンジンはCPUと同じクロックで動作し、1クロックあたり64ビットのデータを転送します。クロック1GHzの構成において最大8ギガバイト毎秒の連続転送が可能です。

このDMAエンジンには以下の特徴があります。

【表】DMA転送の種類

ソースデスティネーション機能
ローカルメモリー外部メモリー4つのローカル・メモリー・バンクのうちの一つからデータを読み出し、eMeshネットワークに書き込み処理として送信します。
外部メモリーローカルメモリーeMeshネットワークに読み込みリクエストを出します。ブロッキング(データ転送が完了するまで停止)、もしくはノンブロッキング(転送を待たずに即座に戻る)処理を選択できます。
オートDMAレジスターローカルメモリー外部マスタから書き込ませます。これはスレーブ・モードに設定されている場合に使用されます。
外部メモリー外部メモリーeMeshネットワークに読み込みトランザクションを送信します。読み込みトランザクションはスプリット・トランザクションなのでデスティネーションは任意に設定可能です。書き込み先のメモリーはスプリット・トランザクション・ルーティング・モードをサポートしている必要があります。

DMAエンジンは2つの独立したチャンネルを持ち、それぞれマスター・モードもしくはスレーブ・モードとして動作可能です。

スレーブ・モードでは転送のペースは外部のマスターによって制御されます。マスター・モードではメモリーとインターフェースのリソースが許す限り毎クロック、トランザクションを発行します。

DMAディスクリプター(E.A.R. 8.2)

DMAディスクリプターは以下のように構成されます。全てのディスクリプターはローカル・メモリーに置かれ、ダブル・ワード境界にアラインされている必要があります。

ディスクリプターはスタートアップ・ビットに1がセットされた場合、もしくはチェイニング・モードに設定された場合にDMAチャンネル・コンフィギュレーション・レジスター・セットに読み込まれます。チェイニング・モードでは転送が完了すると自動的に次のディスクリプターが読み込まれます。

Addr0+7, Addr0+6Addr0+5, Addr0+4Addr0+3, Addr0+2Addr0+1, Addr0
STRIDE-INNER-DSTSTRIDE-INNER-SRCNXT_PTRDMACONFIG
STRIDE-OUTER-DSTSTRIDE-OUTER-SRCCNT-OUTERCNT-INNER
DST ADDRESS(HI)DST ADDRESS(LO)SRC ADDRESS(HI)SRC ADDRESS(LO)

DMAチャンネル・アービトレーション(E.A.R. 8.3)

DMAチャンネルの優先度は固定となっており、チャンネル0は常にチャンネル1よりも高い優先度で実行されます。

DMA使用上の注意(E.A.R. 8.4)

DMAはミス・アラインド・アクセスや存在しないアドレスへのアクセスに対してエラーを報告しません。このようなシナリオでは、予期しない動作がおこり、コアやチップはリセットが必要な状態になるかも知れません。


上記の情報は米国Adapteva社による「Epiphany Architecture Reference」などを基にしたものです。出典元の著作物の権利は、米国Adapteva社など、その原著作権者に帰属します。