説明

ブロックモデリング入出力バッファー

ブロックダイヤグラム・モデルのブロックにおける信号I/Oバッファーをアドレス指定する方法は、基底アドレスと、要素オフセットと、折り返しサイズと、先頭オフセットと、ストライド因子とを決定する段階を含む。


【発明の詳細な説明】
【技術分野】
【0001】
本発明は、ブロックダイヤグラム・モデリング入出力(I/O)バッファーに関する。
【背景技術】
【0002】
ブロックダイヤグラム・モデリングは、(ソフトウェア又はハードウェアでの)カスタム信号処理システムを概念化、設計、シミュレーション、及び実現する過程を単純化する。信号処理システムのブロックダイヤグラム・モデルは、信号を表す線(有向矢印)により相互連結されたブロックの集まりとして概念的に表される。各ブロックは、基本的な動的システムを表す。1つのブロックから出て別のブロックで終結する線は、最初のブロックの出力が2番目のブロックの入力となることを示す。任意のブロックにおける個別の各入力又は出力はポートと呼ばれる。信号は、各線結合により表される時間変化データ値に対応し、各瞬間において値を持つと仮定する。
【0003】
ブロックダイヤグラム・モデルは、動的システムを表す信号と状態変数との時間ベース関係である。モデルの解(システム応答の計算)は、これら関係を経時的に評価することより得られ、この時間はユーザが指定する「開始時刻」で開始され、ユーザが指定する「停止時刻」で終了する。これら関係の各評価は、時間段階と呼ばれる。信号は経時的に変化する量を表し、これら量は、ブロックダイヤグラムの開始時刻と停止時刻との間の全時刻に関して定義される。信号と状態変数との間の関係は、ブロックにより表される式の組により定義される。これら式は、入力信号と、出力信号と、状態変数との関係を定義する。この定義にはパラメータの概念が含まれ、パラメータは式の係数である。このブロックダイヤグラム・モデリングのアプローチは、シミュリンク(原語:Simulink)(登録商標)などの、システム分析及び設計の様々な側面を扱う多様なソフトウェア製品を生み出してきた。
【0004】
1つの信号のデータ値は、一般に1つ又は複数の個別データ要素の集まりである。所与の信号のデータ要素のこうした集まりは、ブロックI/Oバッファーと呼ばれるメモリバッファーに一般に格納されるが、それは信号が、ブロックの入力及び出力ポートに対応するからである。データ要素は概して数値であるが、これらは多数の属性を備えたストリング又はオブジェクトなどの他の形式もとりうる。
【0005】
モデリング・ソフトウェアの主要タスクの1つは、動的システムのブロックダイヤグラム・モデルからの出力の計算及び追跡を可能とすることである。実行エンジンは、ブロックダイヤグラム・モデルを実行するというタスクを、コンパイル、リンク、コード生成、及び実行ループからなる4段階で行う。コンパイル段階は、ブロックダイヤグラムのブロック相互連結の完全性及び妥当性のチェックを含む。この段階では、エンジンは、ブロックダイヤグラム内のブロックを階層リストに分類し、このリストは、ブロックダイヤグラム全体を実行するためには、どの順序でブロックを実行すべきかを表す。リンク段階では、エンジンはコンパイル段階の結果を用いて、ブロックダイヤグラムの様々な構成要素の実行に必要なメモリを割り当てる。又、この段階は、効率的に実行するのに適したブロック分類済みリストの抽出バージョンである実行リストを生成する。コード生成に関わるエンジンの次の段階はオプションである。この段階では、エンジンは、ブロックダイヤグラム・モデル(又はその一部)をソフトウェア・モジュール又はハードウェア記述(広くコードと呼ぶ)に翻訳する。この段階が実行されると、リンク及び後続の実行段階は、ブロックダイヤグラム実行時にこの生成コードを用いることになる。この段階を完全に飛ばすと、エンジンは、ブロックダイヤグラムの実行に関して解釈モードを用いることになる。場合によっては、ユーザはブロックダイヤグラム・ソフトウェアの範囲外にコードを導入したいと考えるので、ブロックダイヤグラムの実行に進めないことがある。最後の実行ループ段階では、エンジンは実行ループを使って実行リストを繰り返し、システムの応答を経時的に追跡する。
発明の概要
【0006】
一様態では、本発明は、動的システムのブロックダイヤグラム・モデルで、各計算領域において複数の信号入出力(I/O)タイプを提供する段階を含む方法を特徴とする。
【0007】
次の1つ又は複数の有利な特徴も含まれうる。信号I/Oタイプをアドレス指定する段階は、基底アドレスをアドレス指定する段階と、要素オフセットをアドレス指定する段階と、折り返し(原語:wrap-around)サイズをアドレス指定する段階と、先頭オフセットをアドレス指定する段階と、ストライド因子(原語:stride
factor)をアドレス指定する段階とを含む。基底アドレスは、信号I/Oタイプの順次アクセス可能要素の先頭メモリアドレスとすることができる。要素オフセットは、信号I/Oタイプにおけるi番目の要素を得るために基底アドレスと共に使用可能なオフセット指標iでよい。折り返しサイズは整数指標とすることができ、これに達した後に信号I/Oタイプが折り返されると考えられるものである。先頭オフセットは、基底アドレスに対する信号I/Oタイプの第1要素の相対位置を決定する整数オフセットとすることができる。ストライド因子は、信号I/Oタイプの要素間のスペーシングを表す整数とすることができる。信号I/Oタイプは柔軟な次元を備えることができる。
【0008】
幾つかの実施形態では、信号I/Oタイプは、ブロックダイヤグラム内のブロックの出力からの信号値を維持し、この信号値を1つ又は複数のブロックの入力に伝達するために用いる専用又は共用メモリ空間でよい。信号I/Oタイプは、入出力をメモリ内で編成できる様態とすることができる。計算領域は、時間に基づくシミュレーション領域、物理モデリング計算領域、データフロー計算領域、又はグラフィカル・プログラミング計算領域とすることができる。I/Oタイプは、複数ポートブロックの各ポートで異なっていてもよい。ブロックダイヤグラムはブロックを含むことができ、1つ又は複数のブロックが、信号値を保持するために用いられる信号I/Oタイプを取り決める。取り決めには、信号I/Oタイプの選択に影響を与える利用可能な信号I/Oタイプの順位付けを含むことができる。
【0009】
別の様態において、本発明は、ブロックダイヤグラム・モデルのブロックにおける信号I/Oバッファーをアドレス指定する方法を提供し、この方法は、基底アドレスと、要素オフセットと、折り返しサイズと、先頭オフセットと、ストライド因子とを決定する段階を含む。
【0010】
次の1つ又は複数の有利な特徴も含まれうる。基底アドレスは、信号I/Oバッファーの順次アクセス可能要素の先頭メモリアドレスとすることができる。要素オフセットは、信号I/Oバッファーにおけるi番目の要素を得るために基底アドレスと共に使用可能なオフセット指標iでよい。折り返しサイズは整数指標であって、これに達した後にI/Oバッファーがそれ自身に折り返されると考えられるものである。先頭オフセットは、基底アドレスに対する信号I/Oバッファーの第1要素の相対位置を決定する整数オフセットである。ストライド因子は、信号I/Oバッファーの要素間のスペーシングを表す整数である。
【0011】
本発明の実施形態は、次の利点の内1つ又は複数を含みうる。
【0012】
I/Oバッファーは、1つの計算領域で使用される2つ以上の入出力の存在を可能とし、ここでは、入出力は、モデル内の1つの構成要素の出力からの信号値を維持し、この信号値を1つ又は複数の構成要素の入力に伝達するために用いる専用又は共用メモリ空間である。I/Oタイプは、その入出力がメモリで編成又は定義される様態であり、且つ/又はメモリの要素がアクセスされる様態であって、その入出力へのアクセスが、ブロックダイヤグラム・モデル内で典型的に使用される1つ又は複数の処理に最適となるようにするものである。「処理(原語:operation)」には、数学的アルゴリズム、データ再編成、データ指標付け、代入(原語:assignment)などが含まれる。)例えば、計算アルゴリズムによっては、行列の連続した行が順次メモリ位置に配されるようにI/Oメモリを編成しようとするものもあり、他のアルゴリズムによっては、行列の連続した列を順次メモリ位置に配そうとするものもある。他の例には、順次メモリ位置がメモリの循環バッファーに入れられているかのようにアクセスされるメモリ編成が含まれる。他の例には、メモリ要素の逆順序アクセスがある。この例はデータ値がどこに位置するかに影響するだけでなく、そのデータ値が書き込まれているメモリ部分から要素がアクセスされる様態にも影響する。I/Oの編成及びI/Oへのアクセス方法は、「I/Oのタイプ」という用語に包含される。
【0013】
I/Oバッファーは、モデル内の複数ブロック間でデータを交換するのに用いるI/Oタイプをこれらブロックが「取り決め」する機能を提供する。通常、この過程をブロック間の「ハンドシェーク」と呼ぶ。各ブロックは、それ自身が実行可能な複数のI/O技法を備えることができ、更に、各ブロックは、協力してデータ転送を行う必要があるブロックと通信する過程を通して、各データ転送に用いる共通の技法を取り決める。典型的には、この取り決めはシミュレーションの開始前に(或いは、等価的に、モデルのコードを生成する前に一度)一度行われるが、シミュレーションの過程を通じて定期的或いは連続的に(対応する生成コードの実行の間中)行うこともできる。
【0014】
I/Oバッファーは、複数ポートブロックの各ポートで別々とすることができるI/Oタイプの選択肢を提供する。典型的には、計算ブロックは、1つ又は複数の入力ポートと1つ又は複数の出力ポートとを備える。特別なタイプのブロックには、出力ポートのみを備える「ソース」ブロックと、入力ポートのみを備える「シンク」ブロックとが含まれる。これら全てのタイプのブロックが複数のI/Oタイプを実行するモデルに参加でき、各タイプのブロックが1つ又は複数のI/Oタイプを提供できる。
【0015】
I/Oバッファーは、最も望ましいものから最も望ましくないものまでに亘って各ブロックが順位付け可能なI/Oタイプの選択肢を提供し、これは、ブロックがモデル内の他のブロックと共通I/O技法を取り決めようとする際の順序に影響する。I/Oタイプの望ましさはアルゴリズム固有であることが多く、従って、各ブロックは、要素アクセスの効率及びメモリ利用の削減などを含む様々な目標に基づいて「より良い」或いは「より悪い」I/O技法というそれ自身に独自の概念を持つことができる。
【0016】
このI/Oバッファーにより、シミュレータが、モデル内において統一した様態で複数のI/Oタイプを実行できる。
【0017】
本発明の1つ又は複数の実施形態の詳細は、添付の図面及び以下の説明に記載されている。本発明のその他の特徴、目的、及び利点は、詳細な説明及び図面、並びに特許請求の範囲から明らかとなるはずである。
【発明を実施するための最良の形態】
【0018】
図1は処理システム10を示す。処理システム10は、パーソナル・コンピュータ(PC)などのコンピュータ12を含む。コンピュータ12は、TCP/IP(転送制御プロトコル/インターネット・プロトコル)又は他の適切なプロトコルを実行する、インターネットなどのネットワーク14に接続されている。接続は、イーサネット(登録商標)、無線リンク、電話回線などを介したものでよい。コンピュータ12はプロセッサ16及びメモリ18を含む。メモリ18は、ウィンドウズ(登録商標)2000(登録商標)又はリナックスなどのオペレーティング・システム(「OS」)と、ネットワーク14を介して通信するためのTCP/IPプロトコル・スタック22と、プロセッサ16より実行され後述のブロックダイヤグラム・モデリング・プロセス50を実行する機械実行可能命令24とを含む。コンピュータ12は、グラフィカル・ユーザインターフェース(GUI)28をユーザ30に表示するための入出力(I/O)装置26も含む。
【0019】
図2では、ブロックダイヤグラム・モデリング・プロセス50は、シミュレートし且つグラフィカル・ユーザインターフェース(GUI)28に表示すべき動的システムのブロックダイヤグラム・モデルを生成する段階(52)を含む。このブロックダイヤグラム・モデルは、動的システムの入力と、状態と、出力との間の時間依存の数学的関係を図示する。このプロセス50は、ユーザ30から時間枠を受け取る(54)。プロセス50は、この時間枠をブロックダイヤグラム・モデルに組み込み(56)、この指定された時間枠においてブロックダイヤグラム・モデルを用いて動的システムの挙動をシミュレートする(58)。
【0020】
図3において、信号処理システムのブロックダイヤグラム・モデル70は、信号74を表す線(有向矢印)により相互連結されたブロック72の集まりとして概念的に表される。各ブロック72は、基本的な動的システムを表す。1つのブロックから出て別のブロックで終端する線74は、最初のブロックの出力が2番目のブロックの入力となることを示す。任意のブロックにおける個別の各入力又は出力はポートと呼ばれる。信号74は、各線結合により表される時間変化データ値に対応し、各瞬間において値を持つと仮定する。又、各ブロックは、対応する基本的システムに関する一組の状態を含む。状態を備えたブロックはメモリを持つと言われるが、それは、そうしたブロックが次に実行される時に状態を計算するため、これらブロックがその状態を所与の時刻にメモリに記憶するからである。1つのブロックに対応する式は、一般にそのブロック・オブジェクトに対応する方法としてソフトウェアで実現される。多くの式及び方法が動的システムの表現で使われているが、ここでは、出力及び更新という、信号処理システムの文脈で重要な2つのタイプの方法(及び式)に主として的を絞る。動的システムの応答の斬新的変化を追跡するため、これら方法は、ブロックダイヤグラム実行時に繰り返し呼び出される。
【0021】
ブロックのサンプル時間は、所与のブロックに関する出力、更新、及び/又は導関数法(合わせてブロックの実行と呼ぶ)への呼出の間の時間間隔である。この間隔を計算する際に、同一瞬間(現実時間の瞬間でなく、動的システムの実行に対応した時刻)における繰り返しの呼出は同一呼出と見なされる。1つのブロックのサンプル速度は、そのブロックの連続的な実行の間隔と考えることができる。ブロックが特定時刻に実行されると、このブロックにサンプルヒットがあったと言う。呼出と呼出との間に均一の又は定期的な間隔が存在しない場合は、このブロックは連続的サンプル時間を備えると言う。均一の間隔が存在する場合は、このブロックは、その間隔に等しい離散的サンプル時間を備えると言う。ここでは離散的なサンプル時間を持つ例に限定するが、本発明は、連続的サンプル時間を備えたブロックを含むシステムにも適用可能である。
【0022】
ブロックダイヤグラム・モデル70では、信号は多数のデータ値を含むことができる。この信号は、名前、データ型(例えば、8ビット、16ビット、又は32ビット整数)、数値型(例えば、実数又は複素数)、及び次元(例えば、一次元配列、二次元配列、又は多次元配列)などの多様な属性を持つことができる。所与の信号のデータ要素の集まりは、ブロック入出力(I/O)バッファーと呼ばれるメモリバッファーに一般に格納されるが、それは信号が、ブロックのポートに関連付けられているからである。
【0023】
従来から、ブロックダイヤグラム・モデリング・プロセスは、ブロックI/Oに関する基本的なフラット・バッファー・モデルをサポートしてきた。フラットI/Oバッファーは、これから列挙する4つの主要な属性で説明できる。
【0024】
フラットI/Oバッファーの第1の属性はサイズである。各I/Oバッファーは、概してメモリサイズが固定されており(バッファーにおける1つのデータ要素のサイズにバッファーのサイズを掛けたものに等しい)、ブロックダイヤグラムの実行前に全てのメモリは一旦割り当てられる。割当て制限を行うのは、ブロックダイヤグラムを効率的に実時間で実行可能とするためである。
【0025】
フラットI/Oバッファーの第2の属性はアドレス方式である。I/Oバッファーは、基底メモリアドレスから順次にアクセスされる要素の集まりからなる。すなわち、バッファーの基底メモリアドレスが与えられると、この基底アドレスと、要素指標(原語:element
index)を追跡する整数カウンタとを組み合わせて用いることで、バッファー内の要素に順次アクセスできる。例えば、バッファーが、基底ポインタアドレスuを備えた単純なC言語配列であれば、この配列の要素に*(u+0)
... *(u+N-1)としてアクセスできる。ブロックダイヤグラム実行時に配列の末端部を超える要素にアクセスすると、一般にメモリ分割違反となる。ここではi番目のメモリ要素へのアクセスを示すため、一般的な表記法であるu[i]を用いる。
【0026】
フラットI/Oバッファーの第3の属性は次元である。次元属性を各I/Oバッファーに付加するのは、通常、一組の連続メモリ要素がM次元行列の要素として解釈されるようにすることが目的である。N個の要素を備えたI/Oバッファーは、次元[N]のベクトルとして見ることができる。更に、I/Oバッファーは、同一列(又は複数列)からの要素がメモリで互いに隣接する次元の行列[P
x Q]として見ることができる。ある列からの要素がメモリで互いに隣接した状態で行列がメモリに記憶される場合、この行列は列順序で記憶されていると言われる。ある行からの要素がメモリで互いに隣接した状態となる場合、この行列は行順序で記憶されていると言われる。本明細書で用いる例では、行列は列順序で記憶されているものと仮定する。
【0027】
図4では、メモリ18のI/Oバッファー100は、9つの要素u[0]、u[1]、u[2]、u[3]、u[4]、u[5]、u[6]、u[7]、及びu[8]並びにこれらの対応するベクトル解釈102を含む。この解釈では、x1がu[0]を表し、x2がu[1]を表し、x3がu[2]を表し、x4がu[3]を表し、x5がu[4]を表し、x6がu[5]を表し、x7がu[6]を表し、x8がu[7]を表し、x9がu[8]を表す。一般に、xi=u[i]である。
【0028】
図5では、メモリ18のI/Oバッファー110は、9つの要素u[0]、u[1]、u[2]、u[3]、u[4]、u[5]、u[6]、u[7]、及びu[8]並びにこれらの対応する行列解釈112を含む。この解釈では、x00がu[0]を表し、x10がu[1]を表し、x20がu[2]を表し、x01がu[3]を表し、x11がu[4]を表し、x21がu[5]を表し、x02がu[6]を表し、x12がu[7]を表し、x22がu[8]を表す。一般に、xij=u[i+jM]で、この式ではM=行の数である。
【0029】
フラットI/Oバッファーの第4の属性は入出力写像である。所与のブロックに関して、そのブロックの入力バッファーと出力バッファーとの間には2つの基本的な関係があり、これらは独立I/Oバッファーと共用I/Oバッファーである。
【0030】
独立I/Oバッファーでは、この入出力関係をサポートするブロックは、全く別個の入力及び出力バッファー空間を備える。この関係を用いるのは、出力が生成された後でも入力が持続する必要がある場合か、入力及び出力バッファーが異なる属性を備える場合である。
【0031】
図6A、6B、6C、及び6Dでは、独立入力及び出力バッファーを示す例を図示する。この図は、ソースブロック120及びフレーム遅延(原語:frame
delay)ブロック122を含む。フレーム遅延ブロック122は、入力バッファー124、状態バッファー126、及び出力バッファー128を含む。最適化として、ソースブロックの出力バッファーは、フレーム遅延ブロックの入力バッファーと同一であると仮定する。ブロックダイヤグラム・ソフトウェアでは、I/Oバッファーは、一般にブロック出力のみに割り当てられる。ブロックの入力バッファーは、対応する入力信号を発生するブロックの出力バッファーを示すのみである。この最適化は、本明細書の全ての例で実行されているものと仮定する。図6Aでは、ソースブロック120は、フレーム遅延ブロック122の入力バッファー124に直接書き込みするが(130)、それはこのフレーム遅延ブロックの入力バッファーがソースブロックの出力バッファーと同一だからである。この書き込み処理が実行されるのは、ソースブロックにサンプルヒットがあり、その出力方法が実行された時である。フレーム遅延ブロックの出力方法がフレーム遅延ブロックのサンプルヒット時に実行されると、図6Bに示したように、状態バッファー126が出力バッファー128に転送される(132)。次に、フレーム遅延ブロックの更新方法が同一サンプルヒット時に呼び出されと、図6Cに示したように、入力バッファー124が状態バッファー126に転送される(134)。図6Dでは、ソースブロック120に次のサンプルヒットがあった時に、ソースブロックは、フレーム遅延ブロック122の入力バッファー124に次の値を書き込みする(136)。図6A、6B、6C、及び6Dの例では、入力バッファー値が出力生成後にも持続している必要があるので、入力バッファー124及び出力バッファー128は独立している必要がある。
【0032】
共用I/Oバッファーでは、出力バッファーと入力バッファーは同一メモリ空間を備える。この関係は、一致データ変換又は入れ換え計算(原語:in-place
computation)を用いて実現可能な変換を行うブロックにおいて概ね使用される。
【0033】
図7A及び7Bでは、共用入出力バッファーを用いるためにブロックをどのように実装できるかを示す例を図示する。この図は、ソースブロック150及び対数ブロック152を含む。対数ブロック152は入出力バッファー154を含む。図7Aでは、ソースブロック150のサンプルヒットでこのブロックの出力方法が実行される時に、ソースブロックは、対数ブロック152の入出力バッファー154に書き込みする。図7Bでは、対数ブロック152の出力方法がこのブロックのサンプルヒットで実行される時に、対数ブロックは、入れ換え計算を用いて入出力バッファー154に対数(入力)で上書きする。対数ブロック152が入力及び出力に共通バッファーを備えるのは、このブロック152が入れ換え計算を実行できるからである。
【0034】
上述のフラットI/Oバッファーにより、ユーザは、複雑な応用システムを概念化し構築でき、更にこうしたシステム用のコード(例えば、ハードウェア・プラットフォーム用の埋め込み可能コード)を生成できる。所望のシステム計算を正確に模倣させるように生成コードを作成することはできるが、この生成コードは、手動コード化実装に比べて、例えばメモリ消費又は計算効率又はその両方で不十分となる場合もある。こうした非効率性は、知識のある手動コード・プログラマーが高度なソフトウェア工学構成体を用いた結果として発生することがある。ブロックダイヤグラム設計からコードを生成する一方、ブロックI/Oバッファーのモデルに組み込んで効率を向上させうる、一組のそうした構成体を後述する。こうした構成体それぞれに関し、計算及びメモリ記憶効率を増加させる例を示す。
【0035】
図8において、オフセット・アドレス指定を用いるI/Oバッファー160を示す。オフセット・バッファーとはI/Oバッファーであって、それに割り当てられたメモリセグメント全てが、ブロックダイヤグラム実行の所与の時刻にアクセスされないものである。その代わり、I/Oバッファーの全メモリのうち、I/Oバッファーの開始メモリ位置からオフセットした部分からアクセスする。つまり、uがオフセット・バッファー162の開始メモリアドレスを表し、x[i]が任意の実行時刻にアクセスされるi番目の要素を表すとすると、x[i]
= u[i+Z]であり、この式でZはオフセット・バッファーの始めからのオフセットである。Zは、ブロックダイヤグラム実行の過程を通じて固定してもよいし、各実行段階で変化してもよい。
【0036】
図9では、上述のオフセット・バッファー162の有用性を、ブロックダイヤグラム・モデリング環境における信号セレクタ・ブロック170を用いて示す。シミュリンク(登録商標)では、信号セレクタ・ブロックは、入力ベクトル又は行列の選択要素を出力として生成する。ブロックダイヤグラムにおける信号セレクタ170の挙動によって、入力信号からN個の連続点を選択することで出力信号172が発生される。
【0037】
図10では、入力バッファーと出力バッファーを異なる長さを備えた別個のバッファーとした、フラットI/Oバッファーを用いたバッファー・ブロックを実装するためのアプローチを示す。セレクタ・ブロックのサンプルヒット毎に、入力のN個の連続値が出力バッファーにコピーされ、W+N個のメモリ要素が必要であり、サンプルヒット毎にW+N回のコピー処理が行われる。
【0038】
図11では、ブロック180は、長さWの単一バッファー182を備える。サンプルヒット毎に、出力バッファー184は、Z
= Nのオフセットを備えていることを除いては入力バッファー186と同一となるように指定される。代入処理のメモリと回数を減少するには、オフセット・バッファーを信号セレクタ・ブロック180の出力バッファー184に用いればよい。W個のメモリ要素が必要で、実行時にZが固定ならば(或いはZが変化するなら)、実行ステップ毎にW(或いはW+1)回のコピー処理が必要である。
【0039】
フラットI/Oバッファーを用いる場合、フラット・バッファーのi番目の要素にアクセスするには、バッファーの基底アドレスに指標値iを加え、この新たなアドレスにおける値にアクセスすればよい。従って、iを0 … N-1まで変化させることで、バッファー内にあるN個の全ての要素にアクセスできる。今、i
> Nであれば、通常はエラー又はメモリ分割違反となる。幾つかの例では、こうしたエラー(又は違反)を避けて、i > Nの時に、単純にメモリ空間の先頭まで折り返すのが有利である。すなわち、uがI/Oバッファーの基底メモリアドレスであれば、i番目の要素へのアクセスはx[i]
= u[i % N]と書くことができ、この式でNはバッファーのサイズであり、%はモジュロ演算子を表す。
【0040】
図12では、データのフレームをバッファーに入れるブロック190の所望の挙動を示す。
【0041】
フレームバッファー・ブロック190は、入力信号194のそれ以前のN回にわたるサンプルのベクトルである出力信号192を生成する。図13に示したように、この出力バッファーはフラット・バッファー実装を用いたもので、入力のN回のサンプルを記憶する連続メモリバッファーである。バッファー・ブロックのサンプルヒット毎に、出力バッファーの以前の値は、それらの現在位置の前のメモリ位置に桁送りされる。第1メモリ位置の値は廃棄される。従って、最後のメモリ位置の値は入力バッファーからの値で更新される。よって、N+1個のメモリ要素とN+1回のコピー処理が、サンプルヒット毎に必要なリソースである。
【0042】
図14に示したように、ブロックの入力と出力とで共用する循環I/Oバッファー196を用いることによって、代入処理の回数を大きく減らすことができる。新たな入力サンプル198は、循環バッファー196の適切な位置に代入される。すると、出力バッファー202の先頭200は1個のメモリ要素分だけ移動して出力バッファー202の値を「更新」する。従って、N個のメモリ要素、1回のコピー処理、及び1回のインクリメント処理が実行段階毎に必要なリソースである。Nが大きい場合、実行段階毎の計算回数は、循環バッファー196ではフラット・バッファーに比べてかなり少なくなる。
【0043】
図15に示したように、フレーム・リバッファー・ブロックの入力と出力とで共用する循環I/Oバッファーを用いることによって、代入処理の回数及びこのブロックが必要とする全メモリを大きく減らすことができる。新たな入力サンプルは、循環バッファーの適切な位置に代入される。次に、出力バッファーの先頭を移動して、出力バッファーの値を「更新」する。このアプローチでは、新たな入力が使用可能となる毎に、1つの出力と4つの代入処理を実行するには1つの代入処理しか必要としない。このアプローチは、フラット・バッファーに基づく実装に比べ(各実行段階において)3つのメモリ位置と1回の代入処理を節約する。
【0044】
図16では、ユニット遅延ブロックの入力と出力とで共用する循環I/Oバッファー234を用いることによって、代入処理の回数及びこのブロックが必要とする全メモリを減少させる。遅延ブロックにサンプルヒットがあると、入力サンプルは循環バッファー234の適切な位置に代入される。次に、出力バッファーの先頭を移動して、出力バッファーの値を「更新」する。実行段階毎に必要なリソースは、6つのメモリ要素、3回のコピー処理、及び2回のインクリメント処理である。入力バッファーの長さがMで、所望の遅延がNである一般的な場合では、M+N個のメモリ要素、M回のコピー処理、及び2回のインクリメント処理が実行段階毎に必要である。Mが増加するに従い、フラット・バッファーを用いる実装に比べて、メモリ及び計算が大きく節約されることが分かる。例えば、M
= 256であれば、実行段階毎に256個のメモリ位置と256回のコピー処理を節約することになる。
【0045】
図17では、ストライド・バッファー240を示す。フラットI/Oバッファーを用いる場合、ストライド・バッファー240の要素にアクセスするには、バッファーの1つの要素から次の要素へ順次にストライドすればよい。一定の使用状況では、1つの要素より大きいストライド長さを用いると有利である。例えば、ストライド長さを2つとすると、元々のバッファーにおいて一つおきの要素がアクセスされ、ストライド長さを3つとすると、元々のバッファーにおいて2つおきの要素がアクセスされることになる。すなわち、uがI/Oバッファーの基底メモリアドレスであれば、こうしたストライドに基づくアクセスはx[i]
= u[Si]と書くことができ、この式でSは、ストライド因子に対応する整数である。Sは、ブロックダイヤグラム実行の過程を通じて固定しても、変化してもよい。
【0046】
図18では、フレーム入力データにダウンサンプリングを行うブロックの所望の挙動を示す。ここでは、例示目的で、このダウンサンプリング器がサンプリング速度を2分の1に減少させると仮定する。同一の概念を他のダウンサンプリング速度にも拡張できる。
【0047】
図19では、ストライド・バッファーとして実装されたダウンサンプリング器242を示す。この実装は、フラット・バッファーを用いる実装に比べ(各実行段階において)N/2個のメモリ位置とN/2回の代入処理を節約する。ダウンサンプリング器ブロックのサンプルヒット毎に、ダウンサンプリング器ブロックのI/Oバッファーには入力値が代入される。入力及び出力バッファーは同一のメモリ空間を共用するので、出力は自動的に更新される。ダウンサンプリング器242に結合された全てのブロックは、ダウンサンプリング器ブロックの出力バッファーに対してストライドに基づくアドレス指定を用いるだけで、適切な入力値を得ることができる。実行段階毎に必要なリソースは、N個のメモリ要素及びN回のコピー処理である。このアプローチでは、Nが大きい場合はフラット・バッファーに比べ大きなメモリ及び計算の節約となる。
【0048】
ブロックダイヤグラム・モデルの実行時に、より最適なメモリ割当てを達成可能とするには、従来のフラット・バッファー・モデル以外のブロックI/Oの複数モデルをサポートする必要がある。更に、同一のブロックダイヤグラムに異なるモデルのブロックI/Oを混在可能とすることが不可欠である。
【0049】
ブロックI/Oの異なるモデルを同一ブロックダイヤグラムに混在させるということは、複数ブロックが互いに取り決めして、モデル内の様々なI/Oバッファーに用いるモデルを決定する機能が必要であることを意味する。これは次の2つの主たる理由で重要である。第1の理由は、1つのブロックのI/Oバッファーは別のブロックの出力バッファーであることで、第2の理由は、I/Oバッファーが共用バッファーとして明示的に表記される場合は、これらが様々なブロック間で共用されることである。本発明は、モデル内の各ブロックI/Oバッファーに最も適したメモリモデルを特定する助けとなる伝搬機構を含む。
【0050】
ブロックI/Oの複数モデルをサポートするため、我々は、オフセット、循環、及びストライドなどの上述の例で示した様々なバッファーモデルを包含する助けとなる包括的ブロックI/Oモデルを開発した。従来のフラット・バッファーを説明するのに用いた4つの属性、すなわちサイズ、アドレス指定モデル、次元、及び入出力写像の点からこの包括的モデルを説明できる。
【0051】
このブロックI/Oモデルのサイズは固定されていると仮定する。サイズに関して同じ挙動を保持するが、それはこうした固定サイズI/Oバッファーが実時間システムの状況では最も適しているからである。
【0052】
アドレス方式: フラット・バッファーの場合、I/Oバッファーの特定要素にアクセスするには、このバッファーの基底メモリアドレス及び現在アクセスしている要素の要素オフセットという2つの情報部分を用いていた。ここでは、I/Oバッファーが、異なる5つの情報部分を用いてアドレス指定されていると仮定する。
【0053】
第1の情報部分は基底アドレス(u)である。これは、I/Oバッファーの順次アクセス可能要素の先頭メモリアドレスである。
【0054】
第2の情報部分は要素オフセットである。I/Oバッファーのi番目の要素は、オフセット指標iを基底アドレスと組み合わせて用いることにより得られる。バッファーのi番目をx[i]と表し、I/Oバッファーのi番目のメモリ位置へのアクセスはu[i]とい表記を用いて表す。
【0055】
第3の情報部分は折り返しサイズ(W)である。これは整数要素指標であって、これに達した後にI/Oバッファーがそれ自身に折り返されるものである。従って、I/Oバッファーのi番目の要素へのアクセスは、x[i]
= u[i % W]と書くことができ、この式では「%」はモジュロ演算子を表す。
【0056】
第4の情報部分は先頭オフセット(Z)である。これは、基底アドレスに対するバッファーの第1要素の相対位置を決定する整数オフセットである。例えば、先頭オフセットS=5は、第1要素がx[0]
= u[i+5]によって与えられることを示す。
【0057】
第5の情報部分はストライド因子(S)である。場合によっては、I/Oバッファーの全ての要素は同時に使用できないことがある。そのかわり、1つおき(或いは2つ又は3つおき)の要素しか使用できない。従って、I/Oバッファーのi番目の要素は、x[i]
= u[Si]と書かれ、この式で、SはI/Oバッファーの要素間のスペーシングを決定するストライド因子である。
【0058】
これら5つの別個部分それぞれの情報を組み合わせることで、I/Oバッファーのi番目の要素を、x[i]=u[(Si+Z)%W]としてアドレス指定することになる。S
= 1、Z = 0、W = 無限大を選択することで、フラット・バッファーが得られることに注目されたい。様々なアドレス指定に関連した属性は、図20に示したようにオフセット、循環、及びストライド・アドレス指定を提供する。S、Z、及びWは、ブロックダイヤグラム実行の過程を通じて固定しても、動的に変化してもよい。これら属性が実行段階と共に変化する場合、I/Oバッファーのi番目へのアクセスをxn[i]
= un[(Sni + Zn) % Wn]として書き換えることができ、この式でnは実行段階を表す。
【0059】
上述のように、I/OバッファーはM次元行列と解釈できる。しかし、バッファーの次元は、ブロックダイヤグラムの実行過程を通じて変化しないことが前提であった。ブロックI/Oバッファーの我々の新たなモデルでは、ブロックダイヤグラムの実行過程を通じてバッファーに柔軟な次元を持たせる。I/Oバッファーが柔軟な次元を持ちうる様態を図21及び図22に示した。図21は動的次元I/Oバッファーを示す。このI/Oバッファーは、実行の進行に従って動的な次元を持つ。しかし、I/O要素は、I/Oバッファーのメモリマップにおける異なる要素に常に再写像される。図22は、このI/Oバッファーが、実行の進行に従って動的な次元を持つことを示す。I/Oバッファーのメモリマップへの個別要素の写像は変わらない。
【0060】
図23では、部分的に共用されるバッファー、すなわち入力及び出力のメモリ空間が部分的に重複しているバッファーという概念を導入する。ここでは、入力及び出力バッファーは同一のメモリ空間を共用する。入力バッファーがメモリ空間における最初の5つの要素に写像され、出力バッファーは同一メモリ空間における最後の6つの要素に写像される。
【0061】
これまで時間に基づくブロックダイヤグラムに焦点を当ててきたが、本発明は、メモリバッファーという概念が定義されている計算の他のブロックダイヤグラム・モデルにも拡張される。こうしたモデルの1つは、データの使用可能度(トークン)を用いてブロックの実行を駆動するグラフィカル・プログラミング・パラダイムを記述するデータフロー・ダイヤグラムであり、ここでは、1つのブロックが単一の処理を表し、線がブロック間の実行依存性を表す。本発明は、こうしたデータフロー・ブロックダイヤグラムにデータ・トークンを記憶するのに用いるメモリバッファーに拡張できる。
【0062】
本発明は、デジタル電子回路、又はコンピュータ・ハードウェア、ファームウェア、若しくはソフトウェア、或いはそれらの組合せによっても実現可能である。本方法は、コンピュータ・プログラム製品、すなわち情報媒体(例えば、プログラム可能プロセッサ、単一のコンピュータ、又は複数のコンピュータなどのデータ処理装置により実行されるか、その動作を制御するための機械可読記憶装置又は伝搬信号)において具体的に実現されたコンピュータ・プログラムとして実装できる。
【0063】
コンピュータ・プログラムは、コンパイル済み又は解釈実行言語を含む任意形式のプログラミング言語で書くことができ、こうしたプログラムは、独立型プログラム、又はモジュール、構成要素、サブルーチン、或いは計算環境における使用に適した他の単位を含む任意形式で導入できる。
【0064】
コンピュータ・プログラムは、単一のコンピュータ、又は単一サイトに配置した複数のコンピュータ、或いは複数サイトに分散されて通信ネットワークにより相互接続した複数のコンピュータで実行されるよう導入してもよい。
【0065】
本発明の方法段階は、入力データに作用し且つ出力を生成することによって本発明の機能を実行するコンピュータ・プログラムを実行する1つ又は複数のプログラム可能プロセッサにより実行できる。又、方法段階は、例えば、FPGA(書替え可能ゲートアレイ)又はASIC(特定用途向けIC)などの専用論理回路により実行でき、本発明の装置は、FPGA又はASICとして実装できる。
【0066】
コンピュータ・プログラムの実行に適したプロセッサは、例示目的だが、汎用及び専用マイクロプロセッサ並びに任意種類のデジタル・コンピュータの1つ又は複数のプロセッサを含む。一般に、プロセッサは、読み取り専用メモリ又はランダムアクセス・メモリ或いはそれら両方から命令及びデータを受け取る。コンピュータの不可欠な要素は、命令を実行するためのプロセッサと、命令及びデータを記憶するための1つ又は複数の記憶装置とである。一般に、コンピュータは、例えば、磁気ディスク、光磁気ディスク、又は光ディスクなどの1つ又は複数の大容量記憶装置を含むか、それらからデータを受信又は転送、或いはその両方を行うため機能的に接続されている。コンピュータ・プログラム命令及びデータを実現するのに適した情報媒体は、例として半導体記憶装置(例えば、EPROM、EEPROM、及びフラッシュメモリ装置)、磁気ディスク(例えば、内部ハードディスク又はリムーバルブディスク)、光磁気ディスク、及びCD
ROM及びDVD-ROMディスクを含むあらゆる形式の不揮発性記憶装置を含む。プロセッサ及びメモリは、専用論理回路により補足するかそれに組み込み可能である。
【0067】
本発明の幾つかの実施形態を説明してきた。しかしながら、本発明の精神及び範囲から逸脱することなく多くの修正が可能なことは理解されるであろう。従って、これ以外の実施形態も次の特許請求の範囲に入る。
【図面の簡単な説明】
【0068】
【図1】システムのブロックダイヤグラムである。
【図2】ブロックダイヤグラム・モデリング・プロセスのフローチャートである。
【図3】代表的なブロックダイヤグラム・モデルである。
【図4】入出力(I/O)バッファーのブロックダイヤグラムである。
【図5】I/Oバッファーのブロックダイヤグラムである。
【図6】(A)乃至(D)独立入力及び出力バッファーを示す。
【図7】(A)及び(B)共用入力及び出力バッファーを示す。
【図8】I/Oバッファーのブロックダイヤグラムである。
【図9】信号セレクタ・ブロックを示す。
【図10】フラットI/Oバッファーのブロックダイヤグラムである。
【図11】ブロックを示す。
【図12】フレームバッファー・ブロックを示す。
【図13】フラットI/Oバッファーを示す。
【図14】循環I/Oバッファーを示す。
【図15】リバッファー・ブロックを示す。
【図16】循環I/Oバッファーを示す。
【図17】代表的なストライド・バッファーを示す。
【図18】ダウンサンプリング・ブロックを示す。
【図19】ストライド・バッファーを示す。
【図20】アドレス指定に関連した属性を示す。
【図21】動的次元I/Oバッファーを示す。
【図22】動的次元I/Oバッファーを示す。
【図23】部分共用バッファーを示す。

【特許請求の範囲】
【請求項1】
動的システムのブロックダイヤグラム・モデルにおいて、各計算領域に複数の信号入出力(I/O)タイプを提供する段階を含む方法。
【請求項2】
前記信号I/Oタイプをアドレス指定する段階が、
基底アドレスをアドレス指定する段階と、
要素オフセットをアドレス指定する段階と、
折り返しサイズをアドレス指定する段階と、
先頭オフセットをアドレス指定する段階と、
ストライド因子をアドレス指定する段階とを含む、請求項1に記載の方法。
【請求項3】
前記基底アドレスが、前記信号I/Oタイプの順次アクセス可能要素の先頭メモリアドレスである、請求項2に記載の方法。
【請求項4】
前記要素オフセットが、前記信号I/Oタイプにおけるi番目の要素を得るために前記基底アドレスと共に使用されるオフセット指標iである、請求項2に記載の方法。
【請求項5】
前記折り返しサイズは整数指標であって、これに達した後に前記信号I/Oタイプが折り返されると考えられる、請求項2に記載の方法。
【請求項6】
前記先頭オフセットは、前記基底アドレスに対する前記信号I/Oタイプの第1要素の相対位置を決定する整数オフセットである、請求項2に記載の方法。
【請求項7】
前記ストライド因子は、前記信号I/Oタイプの要素間のスペーシングを表す整数である、請求項2に記載の方法。
【請求項8】
前記信号I/Oタイプが柔軟な次元を含む、請求項2に記載の方法。
【請求項9】
信号I/Oタイプが、前記ブロックダイヤグラム内のブロックの出力からの信号値を維持し、当該信号値を1つ又は複数のブロックの入力に伝達するために用いる専用又は共用メモリ空間を含む、請求項1に記載の方法。
【請求項10】
信号I/Oタイプは、前記入出力をメモリ内で編成する様態を含む、請求項1の方法。
【請求項11】
前記計算領域が時間ベース領域である、請求項1の方法。
【請求項12】
前記計算領域が物理モデリング計算領域である、請求項1の方法。
【請求項13】
前記計算領域がデータフロー計算領域である、請求項1の方法。
【請求項14】
前記計算領域がグラフィカル・プログラミング計算領域である、請求項1の方法。
【請求項15】
前記I/Oタイプが、複数ポートブロックの各ポートで異なる、請求項1の方法。
【請求項16】
前記ブロックダイヤグラムは複数ブロックを含むことができ、当該ブロック1つ又は複数が、信号値を保持するために用いられる信号I/Oタイプを取り決める、請求項1の方法。
【請求項17】
前記取り決めは、信号I/Oタイプの選択に影響を与える利用可能な信号I/Oタイプの順位付けを含む、請求項16に記載の方法。
【請求項18】
ブロックダイヤグラム・モデルのブロックにおける信号I/Oバッファーをアドレス指定する方法であって、基底アドレスと、要素オフセットと、折り返しサイズと、先頭オフセットと、ストライド因子とを決定する段階を含む、方法。
【請求項19】
前記基底アドレスが、前記信号I/Oバッファーの順次アクセス可能要素の先頭メモリアドレスである、請求項18に記載の方法。
【請求項20】
前記要素オフセットが、前記信号I/Oバッファーにおけるi番目の要素を得るために前記基底アドレスと共に使用なオフセット指標iである、請求項18に記載の方法。
【請求項21】
前記折り返しサイズは整数指標であって、これに達した後に前記信号I/Oバッファーが折り返されると考えられる、請求項18に記載の方法。
【請求項22】
前記先頭オフセットは、前記基底アドレスに対する前記信号I/Oバッファーの第1要素の相対位置を決定する整数オフセットである、請求項18に記載の方法。
【請求項23】
前記ストライド因子は、前記信号I/Oバッファーの要素間のスペーシングを表す整数である、請求項18に記載の方法。
【請求項24】
前記ブロックダイヤグラムにおいて前記I/Oタイプの視覚描写を遅延させる段階を更に含む、請求項1の方法。
【請求項25】
前記視覚描写がI/Oタイプのテキスト注釈である、請求項24に記載の方法。
【請求項26】
前記視覚描写が、特定の線におけるI/Oタイプのテキスト注釈である、請求項24に記載の方法。
【請求項27】
前記視覚描写が、ラインスタイルとしてのI/Oタイプのグラフ描写である、請求項24に記載の方法。
【請求項28】
前記視覚描写が、ブロックのポートの表示子としてのI/Oタイプのグラフ描写である、請求項24に記載の方法。
【請求項29】
前記ブロックダイヤグラム・モデルのコードを生成する段階を更に含む、請求項1の方法。
【請求項30】
前記ブロックダイヤグラム・モデルのコードを生成する段階を更に含む、請求項18の方法。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

image rotate

image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate

【図13】
image rotate

【図14】
image rotate

【図15】
image rotate

【図16】
image rotate

【図17】
image rotate

【図18】
image rotate

【図19】
image rotate

【図20】
image rotate

【図21】
image rotate

【図22】
image rotate

【図23】
image rotate


【公表番号】特表2007−525727(P2007−525727A)
【公表日】平成19年9月6日(2007.9.6)
【国際特許分類】
【出願番号】特願2006−513112(P2006−513112)
【出願日】平成16年4月16日(2004.4.16)
【国際出願番号】PCT/US2004/011967
【国際公開番号】WO2004/094272
【国際公開日】平成16年11月4日(2004.11.4)
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
1.リナックス
【出願人】(505384841)ザ マスワークス, インク (15)
【氏名又は名称原語表記】THE MATHWORKS, INC.
【住所又は居所原語表記】3 Apple Hill Drive, Natick, MA01760 (US).
【Fターム(参考)】