« バイリニア補間ユニットの並列数について考える | トップページ | テクスチャキャッシュを試作してみました »

2016年6月27日 (月)

Xilinxの分散メモリを見直してみた

GPUを検討しつつ、本丸のシェーダーになかなか行かずにテクスチャキャッシュを検討中であったりします。

キャッシュといえば、メインのキャッシュメモリとそれを管理するTAGメモリで構成されるわけですが、今回はTAGメモリのお話です。

メインのキャッシュメモリはBlobk-RAMで構成したいと普通に考えていますが、容量の少ないTAGメモリに関してはDistributed-RAM(分散メモリ)を使うことを考えています。

 今まで、Distributed-RAM については、Block-RAM 使うにはサイズが小さくてもったいない箇所にLUTのFFで代用できる便利な機能程度に思っていたのですが、今回いろいろと見直すところがありました。

 狙って使えば、という部分はありますが、使い方次第で非常に潜在能力が高い気がしてきました。

 まず、今回のテクスチャキャッシュのTAGメモリは、Writeが無いのでダーティービットとかの管理もなく、100% READ_FIRST な書き込みのみです。
 何しろ、ヒットしたらそのまま、ミスヒットしたら読み直してその値に更新、なので、TAGメモリに関しては100%更新しちゃっていいわけで、しかもシングルポートで済みます。
 このシングルポート 且つ READ_FIRST というのがDistributed-RAMに非常にフィットします。

 まず、シングルポートなので、RAM64X1 にアサインでき、1個のSLICEMに4個確保できます。スライス一個で256bit(32バイト)というのは大きいです。

 しかも READ_FIRST はそのままスライス内のFFに古い値をREADしながら新しい値を書き込めるように思えるのでコンパクトに収まりそうです。

 ついでに言うと、Distributed-RAM はただのLUT 1個なのでめちゃくちゃ速いです。
  別のLUTと直列にしてREAD と ミスヒット判定をセットにしても 300~400MHz の合成レポートが帰ってきました(幅次第ですが)。

 これはうまく嵌るように周辺を作れば、非常に高いパフォーマンスが出せそうな気がします。 楽しみがまた増えました。

 一方で、当然ながら分散メモリも長所ばかりではないので気が付いた点を少し書いておくと

 ・ CE が(BlockRAMで言うEN)が無い
 ・ デュアルポートにするとリソースが増える

 などがあります。

  CEについては、キャッシュなどの場合、先行する処理のミスヒットや出力のREADY待ちでパイプラインストールが必要なので、どうしても回避が難しいところがあります。 WEとのANDをSLICE内に入れて欲しかったなぁ、などと思ってしまいますが、もともとの素子が高速なのでAND用にLUTをもう一段組んでもダメージが少ないという判断なのでしょう(憶測)。

 また デュアルポート云々については、逆にリソースの増えない(電力は増えるけど)BlockRAMの方は、使えるなら積極的にデュアルポート機能を使って効率的な回路を組んだほうが効果的な気もします。

 まだまだ奥が深いです。

« バイリニア補間ユニットの並列数について考える | トップページ | テクスチャキャッシュを試作してみました »

FPGA」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/560384/63837608

この記事へのトラックバック一覧です: Xilinxの分散メモリを見直してみた:

« バイリニア補間ユニットの並列数について考える | トップページ | テクスチャキャッシュを試作してみました »