SSブログ

OS X用GigE Visionカメラドライバ - その21 [OS X用GigE Vision]

抄訳の続き。退屈な話が続く。もういい加減片付けたいけど、まだ半分も来てない。今日はキャッシュの無効化のための具体的なメカニズムについて。

キャッシングの問題に戻ると、Left機能を設定するたびにHeightRegの値を読みにいこうとは思わないだろうし、TopMaxノードも同じである。これはもちろんGenApi自身が新しい値を書き込むときにだけHeightRegレジスタが変化することを知っていればこの動作は不要である。このような場合にはHeightRegとTopMaxの値をキャッシュできる。

もしユーザがHeightRegに新しい値を書いたら、HeightRegキャッシュはすぐにアップデートされてTopMaxのキャッシュは無効化される必要がある。つぎに誰かがLeftノードをアクセスしたときTopMaxが読み込まれて、新しいキャッシュエントリが作られる。

ルールとして、あるノードのすべてのクライアントはその内容が変わったときにその情報を受けてキャッシュをの値を無効化する。

普通はカメラ設定ファイルのノード間のリンクは必要とされる情報をすべて保持して、ユーザが心配しなくてもいいようにキャッシュを扱うようにする。しかし、ノードに直接記述された依存関係以上の情報をカメラが保持するような場合もある。

あるカメラはビニング(Binning)という機能を持っている。ビニングがオンになったとき、隣り合うピクセルの電荷は一緒にされて、低い解像度にはなるが大きな電荷容量を得ることができる。VGA解像度のイメージャだとすると典型的な設計は次のようになる。
  • ビニングなしNo Binning(640x480)
  • 横方向ビニングHorizontal Binning(320x480)
  • 縦方向ビニングVertical Binning(640x240)
  • 全ビニングFull Binning(320x240)
GenICamではこの機能は図-に示すようなよっつのエントリを持つ列挙型を使って記述されるだろう。しかし、ビニングを変更するということはイメージャのサイズを、実際のイメージャそのものではなく、論理的なサイズを変えるということである。それはAOIパラメータに制限を与える。

0127fig11.png
カメラがレジスタを通して現在の論理的イメージャサイズに関する情報を提供すると仮定する。図-11に示すようにこのために二つの新しいノードImagerHeightRegとImageerWidthRegを導入する。TopMaxのためのXMLコードは次のようになる。
<IntSwissKnife Name="TopMax">
  <pVariable Name="CURHEIGHT">HeightReg</pVariable>
  <pVariable Name="IMAGERHEIGHT">ImagerHeightReg</pVariable>
  <Formula>IMAGERHEIGHT-CURHEIGHT</Formula>
</IntSwissKnife>
ユーザがビニングを変えたときにImagerHeightRegの値は変わることになる。しかしここでこの二つのノードの間ではデータのやり取りはない。BinningRegノードの内容が変化したときにImagerHeightRegのキャッシュは無効化されることを確実にするには、<pInvalidator>リンクを二つの間に設けなければならない。このリンクのただひとつの目的は、二つの機能の間の隠された依存関係を明示的にすることと、キャッシュのコヒーレンシを確保することである。
nice!(0)  コメント(1)  トラックバック(0) 

nice! 0

コメント 1

Cialis alternative

沒有醫生的處方
fast cialis online http://kawanboni.com/ Tadalafil 5mg
by Cialis alternative (2018-04-14 11:29) 

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。