JP3691297B2 - シェーピング方法 - Google Patents
シェーピング方法 Download PDFInfo
- Publication number
- JP3691297B2 JP3691297B2 JP22875699A JP22875699A JP3691297B2 JP 3691297 B2 JP3691297 B2 JP 3691297B2 JP 22875699 A JP22875699 A JP 22875699A JP 22875699 A JP22875699 A JP 22875699A JP 3691297 B2 JP3691297 B2 JP 3691297B2
- Authority
- JP
- Japan
- Prior art keywords
- arrangement
- group
- ideal
- value
- address
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Images
Landscapes
- Data Exchanges In Wide-Area Networks (AREA)
Description
【発明の属する技術分野】
この発明は、ATMネットワークノードの交換装置内で実施されるシェーピング方法に関するものである。
【0002】
【従来の技術】
図77は、例えば電子情報通信学会技術報告SSE98−193(1999年1月)岩村、小林、堀江、藤田、芦「GFR処理回路の帯域割り当て方法に関する検討」に示された従来のシェーピング方法を示す図である。図において、GIDTBLはグループ識別子配置テーブル、ADRはGIDアドレス、CALPはGIDの計算理想配置位置、CALDはGIDの理想配置間隔、RDは相関計算範囲である。
【0003】
図77において、理想配置位置CALPの前7スロット、後8スロットを抜粋拡大したものが図の下部に示されており、スロット毎に1から16の番号が振られている。スロット5からスロット12が許容CDV値7の場合の許容CDV範囲であり、この各々のスロットに対して、9スロット毎の相関理想範囲RD5からRD12が定義されている。
【0004】
図78は、この従来のシェーピング方法の1グループ内のグループ要素配置の手順を示す図である。図の処理trunc_s3_past_s3において、理想配置間隔CALDは、総スロット数/グループ要素数GPCRで計算され、これに基き理想配置位置CALPが求められる。各々の理想配置位置CALPに関して、許容CDV範囲内、許容CDV値を7とすれば、前3スロットから後4スロット、すなわち理想位置をスロット8と置くとスロット5からスロット12までの各スロットについて、相関計算範囲RD5からRD12の荷重付き相関を計算し、配置密度がなるべく均等になるように配置位置を選択する。
【0005】
さらに、配置母体のGIDテーブルGIDTBL内の理想位置CALPの配置位置に関しては、理想配置間隔CALDの範囲内で10箇所を選択して試行し、全体としての配置密度がなるべく均等になる位置、すなわちGIDテーブルGIDTBL内の配置済スロットがなるべく均等になる位置を選択して、GIDを配置する。
【0006】
上記のような従来のシェーピング方法では、GID配置に関して多種類の複雑な仮想配置処理を試行し、その結果を比較して最適な配置位置を選択している。図78の手順で示すように、この方式では多重のループ処理からなる仮想配置処理が課されている。
【0007】
【発明が解決しようとする課題】
図77と図78に示す方法では、許容CDV値が7以下であるが、許容CDV値が大きくなると、trunc_s3_past_s4からtrunc_s3_past_s7へのループの回数は、許容CDV値に比例して多くなり、GIDテーブルの全スロットに対する要配置グループ要素の割合が小さい場合でも、多重のループ処理による仮想配置処理を経る必要があるという課題があった。
【0008】
また、この方法は、配置の際のCDVを、許容CDV値を超えない最大値にするような構造になっているので、少ないCDVで配置できる場合でも、大きなCDV値の位置に配置されてしまうという課題があった。
【0009】
また、この方法は、理想配置位置CALPの計算については、割り切れない整数除算の商を単純な整数計算(理想間隔CALD=整数個の総スロット数/整数個のグループ要素数GPCR)で一定値において計算しており、実数計算に基く理想位置と、整数化した場合のずれに対する配慮がないという課題があった。
【0010】
この発明は、上述のような課題を解決するためになされたもので、第1の目的は、構造的に全グループを配置するようにしたものである。第2の目的は、理想配置位置を全スロット中にできるだけ均等に分散させるようにしたものである。第3の目的は、理想配置位置に配置できない場合に、適切な代替位置を選択するようにしたものである。第4の目的は、正確なCDV値が算出できるようにしたものである。第5の目的は、周期と範囲を限定した乱数系列が得られるようにしたものである。
【0011】
【課題を解決するための手段】
この発明に係るシェーピング方法は、一個または複数個のグループの、グループ毎に定められた個数の要素を、アドレスを有する複数個のスロットから構成される母体テーブルに分散配置するものにおいて、上記グループ毎の理想配置スロット位置(以下、スロット位置を位置と称す)を算出する理想位置算出処理と、算出した上記理想配置位置にグループ要素を、帯域が同一の上記グループをまとめて、帯域が大きく、理想位置からのずれの許容度を示す優先度が高い上記グループ順に配置するグループ要素配置処理と、上記理想配置位置に配置できない場合に代替のスロットを探索する代替位置探索処理とを備え、上記理想位置算出処理が、定められた個数の上記グループを上記母体テーブルへ均等配置する際の、二種類の整数配置間隔を求める整数間隔算出処理と、定められた個数のグループを上記母体テーブルへ均等配置する際の上記理想配置位置を、実数計算により求めて整数化する実数間隔算出処理と、上記実数間隔算出処理において、実数計算により求めた値を整数化する際に、バイアスを加算してから整数化演算処理を行うバイアス付加処理と、上記二種類の整数配置間隔の選択順番を変化させる間隔混合法変化処理と、同一帯域グループ内の上記グループ毎の理想配置位置を、上記整数配置間隔内に均等分散する群内理想位置均等分散処理と、上記同一帯域グループの上記グループ毎の配置開始位置を、上記母体テーブルに均等分散する群内開始位置均等分散処理と、上記実数間隔算出処理および上記群内理想位置均等分散処理により算出した理想配置位置と、上記群内開始位置均等分散処理により算出した配分開始位置を行列座標にして記憶する行列座標記憶処理と、帯域の異なる上記グループの配置開始位置を、上記母体テーブル内にランダム分散する開始位置ランダム分散処理と、同一帯域グループ内のグループ要素の均等配分を、上記整数間隔算出処理および上記実数間隔算出処理を用いて行う共通化均等配分処理と、同一グループの要素の隣接スロットへの配置を禁止する隣接配置禁止処理とを備え、上記代替位置探索処理が、上記理想配置位置の周辺のスロット配置状況を観察し、あらかじめ記憶させておいた最適配置位置パターンと照合し、最適配置位置を求めるパターン照合処理と、上記母体テーブル内の配置済スロットの割合に依存して、上記最適配置位置パターンを変化させる配置割合依存パターン照合処理と、上記理想配置位置の近傍スロットをランダムに探索する近傍ランダム探索処理と、上記グループの配置開始位置を上記母体テーブル内でランダムに探索する全体ランダム探索処理と、同一帯域グループ群の配置開始位置基準点を、上記母体テーブル内で、所定の連続スロットの空をランダムに探索する全体連続ランダム探索処理とを備えたものである。
【0012】
この発明に係るシェーピング方法は、理想位置算出処理におけるバイアス付加処理において、付加するバイアス値をゼロ以上1未満とする小数バイアス付加処理と、上記理想位置算出処理における間隔混合法変化処理において、上記小数バイアス付加処理でバイアス値を変化させ、グループ要素の再設定を行うバイアス変化処理と、上記バイアス変化処理において、変化させるバイアス値の順番をあらかじめ定めて、ゼロ以上1未満の値をとるバイアス値に、バイアス値の種類の総数を乗じることによって整数値として、この整数値の数列とバイアス値の種類総数を記憶させておくバイアス値変化パターン記憶処理とを備えたものである。
【0013】
この発明に係るシェーピング方法は、理想位置算出処理における実数間隔算出処理において、32ビット以下の整数による固定小数点変数を用いて、母数を除数で除算し、第1の商と第1の剰余を求める第1の処理と、上記第1の剰余を所定のビット数だけ左シフトする(所定のビット数回だけ2を乗ずる)第2の処理と、上記左シフトされた第1の剰余を上記除数で除算し、第2の商と第2の剰余を求める第3の処理と、上記第2の商に、1以上で上記除数以下の第1の整数を乗算し、第1の変数を求める第4の処理と、上記第2の剰余に上記第1の整数を乗算し、上記除数で除算し、第2の変数を求める第5の処理と、上記第1の変数と上記第2の変数を加算し、第1の剰余分回答を求める第6の処理と、上記第1の剰余分回答を、上記所定のビット数だけ右シフトし(所定のビット数回だけ2で除算し)、第2の剰余分回答を求める第7の処理と、上記第1の商に上記第1の整数を乗算し、商分回答を求める第8の処理と、上記第2の剰余分回答と上記商分回答を加算することにより、回答を求める第9の処理と、上記第1の整数を、1以上から上記除数以下の範囲で変化させ、上記第4の処理から上記第9の処理を繰り返すループ処理とを備えたものである。
【0014】
この発明に係るシェーピング方法は、理想位置算出処理における開始位置ランダム分散処理、ならびに代替位置探索処理における近傍ランダム探索処理、全体ランダム探索処理および全体連続ランダム探索処理において、2のべき乗値で表される乱数の周期を引数とし、周期毎に異なる変数を設け、周期毎の変数を初期化する乱数初期化処理と、周期毎の変数を一次関数で更新する処理と、一周期間の乱数発生時にゼロと最大目的地の間の各整数を1回または2回ランダムに発生させる乱数発生周期制御処理と、上記最大目的地を越えない最小の2のべき乗の周期を選択する周期選択処理と、上記選択した2のべき乗の周期の乱数関数を呼出す乱数関数呼出し処理とを備えたものである。
【0015】
この発明に係るシェーピング方法は、代替位置探索処理におけるパターン照合処理において、あらかじめ行っておく最適配置位置パターン作成処理と、あらかじめ行っておく最適配置位置パターン記憶処理と、パターン照合時に行う最適配置位置パターン参照処理とを備え、上記最適配置位置パターン作成処理が、同程度に適した空位置があるときは全てを配置候補とする処理と、新規配置により、配置済の連続が発生しない空位置がある場合には、上記空位置を配置候補とする処理と、配置済の連続が発生しない空位置がない場合には、配置済の連続数が最小となる位置を配置候補とする処理とを備え、上記最適配置位置パターン記憶処理において記憶するパターンが、理想配置位置周辺のスロットの配置状況を、配置済スロットを1,空スロットを0として1と0の連続数列で表し、これを二進数列とみなして十進数に換算した配置状況パターンと、最適配置位置パターンにおける配置候補数と、最適配置位置パターンにおける配置候補位置を、理想配置位置との相対位置で表して羅列した配置候補位置とを備え、上記最適配置位置パターン参照処理が、現在の理想配置位置周辺のスロットの配置状況を調査して配置状況パターンを作成する処理と、上記最適配置位置パターン記憶処理において記憶されたパターンを参照する処理と、上記最適配置位置パターン記憶処理において記憶された配置候補数が複数あるときは、乱数により配置候補位置の一つを選択する処理とを備えたものである。
【0016】
この発明に係るシェーピング方法は、代替位置探索処理におけるパターン照合処理および近傍ランダム探索処理において、理想位置に配置できない場合に実際に配置された代替位置が、理想位置より母体テーブルにおいて右側(スロットアドレスの大きい側)に配置された場合のスロット数のずれ(代替位置と理想位置のアドレスの差)を表す変数である借りを、算出した理想配置位置アドレスに加算し、代替位置アドレスを減算して指標を求める指標計算処理と、上記指標が正またはゼロの場合には、代替位置が、理想位置より母体テーブルにおいて左側(スロットアドレスの小さい側)に配置された場合のスロット数のずれ(代替位置と理想位置のアドレスの差)を表す狭まりを指標とし、かつ新規借りをゼロとし、上記指標が負の場合には上記狭まりをゼロとし、上記新規借りを上記指標の絶対値とする狭まり・借り更新処理と、上記新規借りをこれまでの借りの積算値に加算する借り積算処理とを備えたものである。
【0017】
この発明に係るシェーピング方法は、一個または複数個のコネクションの、コネクション毎に定められた出力帯域に基づいて伝送される固定長セルの送出間隔を調整するものにおいて、コネクション、または幾つかのコネクションの集合として構成されるコネクショングループ(以下、まとめてグループと称す)に対して要求される帯域値の大きな順にグループを並び替える処理と、帯域値順に、処理対象のグループに対して固定長セルを送出する際の理想送出間隔を算出する処理と、それぞれがアドレスを有する複数のスロットから構成されて固定長セルの出力順を規定する母体テーブル上に、処理対象のグループについて配置開始位置を含めた全ての配置位置について理想配置位置を順次決定する処理と、上記理想配置位置に処理対象のグループを配置できるか否かを判定する処理と、配置可能である場合には、上記理想配置位置に処理対象のグループを配置する処理と、配置不可である場合には、配置済みの帯域合計値が判定値よりも小さい時には上記理想配置位置を中心とした許容CDV値内の範囲の奇数アドレス(または偶数アドレス)に優先的に処理対象のグループを配置し、配置済みの帯域合計値が判定値よりも大きい時には許容CDV値内の範囲の任意のアドレスに処理対象のグループを配置する処理とを備えたものである。
【0018】
この発明に係るシェーピング方法は、一個または複数個のコネクションの、コネクション毎に定められた出力帯域に基づいて伝送される固定長セルの送出間隔を調整するものにおいて、コネクション、または幾つかのコネクションの集合として構成されるコネクショングループ(以下、まとめてグループと称す)に対して要求される帯域値の大きな順にグループを並び替える処理と、帯域値順に、処理対象のグループに対して固定長セルを送出する際の理想送出間隔を算出する処理と、それぞれがアドレスを有する複数のスロットから構成されて固定長セルの出力順を規定する出力テーブル上に、処理対象のグループについて配置開始位置を含めた全ての配置位置について理想配置位置を順次決定する処理と、配置済みの帯域合計値が判定値よりも小さい場合には、理想配置位置を中心とした許容CDV値内の範囲の奇数アドレス(または偶数アドレス)に優先的に処理対象のグループを配置し、配置済みの帯域合計値が判定値よりも大きい場合には、理想配置位置を中心とした許容CDV値内の範囲の任意のアドレスに処理対象のグループを配置する処理とを備えたものである。
【0019】
この発明に係るシェーピング方法は、帯域合計値に対して比較される判定値が、母体テーブルの全出力帯域の半分の値として与えられるものである。
【0020】
この発明に係るシェーピング方法は、処理対象のグループを許容CDV値内の範囲の奇数アドレス(または偶数アドレス)に優先的に配置する際に、所定数で除した剰余が特定の数値となるアドレスに処理対象のグループを配置するものである。
【0021】
【発明の実施の形態】
以下、この発明の実施の一形態を説明する。
実施の形態1.
この発明の実施の形態によるシェーピング方法を用いたグループ識別子配置例についてまず説明する。図1はグループ識別子配置テーブルの一例を示すものである。図において、GIDはグループ識別子、SLOTはGIDを収容するメモリ空間であるスロット、ADRはスロットSLOTのアドレス、GIDTBLはGIDアドレスADRが0から11979の11980個のスロットSLOTから構成されるグループ識別子(GID)配置テーブルである。
【0022】
図1に示す帯状のGID配置テーブル(GIDテーブルバンド)は、論理的には両端がつながっており、図2に示す輪状のGID配置テーブル(GIDテーブルリング)と等価である。図1および図2に示す用語を整理したものを図3に示す。
【0023】
次に、この実施の形態を具体的に説明するに先立ち、この実施の形態におけるGID配置テーブルを使用して、GID配置を行う必要がある背景とその位置付けについて述べる。
【0024】
インターネット等の急速な発展にともない、ATM(Asynchronous Transfer Mode;非同期転送モード)を用いて安価なデータ通信を実現する方法が求められている。このなかで、ATMのサービスクラスであるGFR(Guaranteed Frame Rate)が注目され、ATMフォーラムやITU−T(国際電気通信連合)等で標準化が進んでおり、ATMForum Technical Committee Traffic Management Working Group:“Traffic Management Working Group Living List(ATM Forum/LTD−TM−01.04 to 01.06),”Julyto Dec.1997、およびITU−T勧告I.371 Living List,Geneva,Jun.1998等の文書が公表されている。
【0025】
GFRでは、フレーム単位で各コネクションの最低帯域(mCR;minimum Cell Rate)を保証し、余裕がある場合には、最大速度(PCR;Peak Cell Rate)を超えない範囲で、mCRを超えた余剰帯域を各コネクションに割り当てる。各コネクションへの帯域割当時には、多重化によるCDV(Cell Delay Variation;セル遅延変動)の発生や公平性等を考慮する必要があり、GFRの帯域割当は重要な技術課題となっている。
【0026】
図4にGFRにおける帯域割当の概念図を示す。図において、HYWAYは通信路のハイウェイ、CONNCTNはATMのコネクションを示す。ここでは、1.2Gb/s(正確には1.198Gb/s)のハイウェイHYWAYに、最大2048個のコネクションCONNCTNを収容する。コネクションCONNCTNをハイウェイHYWAYに収容する際に、複数のコネクション間で余剰帯域を共用する。コネクション間で帯域共用を行う帯域割当を行うのが、帯域共用部BANDMである。この際、帯域共用は全コネクション一括では行わず、コネクションを最大512個のグループGROUPに分割して、各々のグループ内で行う。即ち、GFRの帯域割当は、コネクションCONNCTN単位と、グループGROUP単位の二段階に分割して行われる。
【0027】
帯域共用部BANDMにおける、グループGROUP内帯域のコネクションCONNCTNへの割当法としては、WRR(Weighted Round Robin;荷重付ラウンドロビン)方式や、共通FIFOバッファ方式が検討されている。
【0028】
WRR方式は、例えばM.Katevenis,S.Sidiropoulos,C.Courcoubetis,“Weighted Round−Robin cell multiplexing in a general−purpose ATM switch chip,”Journal on Selcted Areas in Comm.,vol.9,no.8,pp.1265−1279,Oct.1991で説明される方式で、コネクションCONNCTN毎にバッファを設けて各コネクションのセルを荷重付で順番に読み出している。
【0029】
コネクション毎の荷重は、各コネクションの識別子(CID:Connection Identifier)を配置したコネクション識別子配置テーブルCIDTBLに保持されており、帯域共用部BANDMは、コネクション識別子配置テーブルCIDTBLに基づいて、WRR荷重の制御を行う。
【0030】
共通FIFOバッファ方式は、例えば吉野學、東間悟、家永憲人“GFRバッファ構成におけるTCP/IP公平性の検討”、99信学総大B−8−15,March 1999で紹介されている方式で、全コネクションCONNCTN共通のFIFOバッファを設け、バッファ内の閾値を超えたセルにタギングし、タギングされたセルを優先的に廃棄する。両者とも、タギング・廃棄はフレーム単位に行う(EPD:Early Packet Discard)。
【0031】
この実施の形態では、帯域共用部BANDMではWRR方式をとることを想定しているが、以下の技術は他の方式でも同様に適用することができる。
ここでは、帯域共用部BANDMでのコネクション識別子配置テーブルCIDTBLに基いたCID配置を、CID配置問題と呼ぶ。
【0032】
1.2Gb/sハイウェイHYWAYへのグループGROUPの割当においては、帯域共用は行わない。しかし、各グループGROUPを許容CDVの範囲でハイウェイHYWAYに割り当てるには、工夫が必要であるため、これも技術課題となっている。グループ割当は、多重化部MUXで、各グループGROUPの識別子(GID)を配置したグループ識別子配置テーブルGIDTBLを参照する。ここでは、この問題をGID配置問題と呼ぶ。本実施の形態の発明は、GID配置問題の効率的な解法を与えるものである。
【0033】
なお、図4はコネクションCONNCTN,グループGROUP,ハイウェイHYWAYの階層構造を説明するための概念図であり、実際の装置構成とは異なる部分がある。図4では、帯域共用部BANDMと多重化部MUXは、全く別個に描かれており、帯域共用部BANDMで全グループのコネクションを割り当てた後、各グループを多重化部MUXで多重化するように見えるが、実際は、帯域共用部BANDMと多重化部MUXは融合している。そこでは、グループ識別子配置テーブルGIDTBLを参照して、割り当てられたグループのみ、コネクション識別子配置テーブルCIDTBLの荷重に従ったWRRを行う。
【0034】
以下に、この実施の形態の内容を具体的に説明していく。その構成は次の通りである。まず、GID配置問題について説明した後、GID配置の手順の概要を示す。次にGID配置の手順の詳細を説明していく。大筋としては、まず、GID配置における理想位置の算出方法を述べ、次に、理想位置に配置できない場合の処置について説明する。さらに、GID配置において使用する要素技術として、CDVに関する技術および乱数に関する技術について述べる。
【0035】
以下に、この実施の形態におけるGID配置問題について、前述の図1から図3および図5に基き詳細に説明する。図5は、GID配置問題の入力パターンの例を示す。図において、TEST1はテストパターン1、GPRIOはグループの優先度、GPCRはグループの帯域、GPCRDはグループ帯域(小数表現)である。GPRIOとGPCRは図3にも記されている。
【0036】
GID配置問題では、まず、グループGROUP毎の帯域GPCRDと優先度GPRIOが与えられる。これらはグループの属性としてグループを特徴付ける値である。この他に、各グループには、識別子としてグループ識別子GIDが振られるが、これは入力データの段階では付与されない。
【0037】
グループ帯域は、小数表現GPCRDか整数表現GPCRで表される。グループ帯域は1.198Gb/sのハイウェイHYWAY中の当該グループの帯域を示し、小数表現で0から599.0Mb/sの値をとる。ここで、帯域配置際の単位帯域が0.1Mb/sである。即ち、図1および図2に示す一つのスロットSLOTは0.1Mb/sであるため、グループ帯域は、
GPCR=GPCRD(Mb/s)/0.1(Mb/s)
=GPCRD×10
の整数値で表すことができる。このグループ帯域GPCRは、当該グループの要素数を示す。
【0038】
グループの優先度は、グループの要素を配置する際の理想位置からのずれ(CDV)の許容度を表す指標で、優先度が高いほど、ずれの許容度が小さい。配置グループの優先度の例を図6に示す。優先度としては高優先(High Priority)、低優先(Low Priority)、優先無(Non Priority)があり、それぞれHP、LP、NPと略記される。
【0039】
GID配置の仕様は、優先度毎に指定することができる。例えば、高優先グループはCDV≦7以内で全て配置し、CDV≦31で高優先を含む全グループの80%を配置する、というものである。
【0040】
グループ配置の際の基本方針は、高優先→低優先→優先無の順にそれぞれ帯域の大きいグループから配置していく。しかし高優先の小帯域のグループを全て配置してから低優先の大帯域のグループを配置しようとすると、配置できないことがあるので、その場合は、高優先の小帯域のグループの前に低優先の大帯域のグループを配置するように配置順を変更する。
【0041】
図5のパターン例TEST1では、優先度GPRIOが高優先(HP)で、帯域GPCRDが16.7のグループが8個、優先度GPRIOが低優先(LP)で、帯域GPCRDが8.7のグループが3個ある。GID配置問題では、各グループのグループ要素を、1.2GハイウェイHYWAYに均等に配置することが課題である。
【0042】
即ち、図1または図2に示すGID配置テーブルGIDTBLに、当該グループのGIDを書き込むことにより、グループ要素を均等に配置することである。図1のGID配置テーブルでは、アドレスADRが0のスロットSLOTから10個毎に、GIDが1と記されている。これは、識別子が1のグループの要素の配置位置が、アドレスADRが0,10,20,…のスロットSLOTに配置されているという意味である。同様に、識別子が2のグループの要素は、アドレスADRが5の位置から13スロット毎に配置されている。
【0043】
以下に、この実施の形態におけるGID配置の基本方針を述べる。
・同一帯域のグループはまとめて配置する。これを群化と呼ぶ。
・帯域の大きいグループの群から配置していく。
・群化した同一帯域群は、全スロット(11980個)の中からランダムに選択されたベースオフセットを基準に配置する。
・群中のスタートオフセットは全スロット(11980個)に均等に分散させるが、理想位置が既配置の場合は、全GIDの中からランダム選択する。
・一つのグループ内のGIDは、全スロット(11980個)に均等に分散させる。理想位置と許容CDV値を考慮し、最適な位置を選択する。
・許容CDV値の範囲でグループ内GIDを配置できないときは、当該グループにおける既設定GIDを削除し、スタートオフセットを全スロット(11980個)の中からランダムに選択し、再設定する。
・許容回数スタートオフセットを変更してもグループ内GIDを設定できないときは、GID間隔計算時の整数化の方法を変更し、再試行する。
・許容回数GID間隔の整数化方法を変更してもグループ内GIDを設定できないときは、許容CDV値を変更する。
【0044】
本実施の形態におけるGID配置アルゴリズムの大きな特徴は次の点である。
・乱数による配置位置のランダム選択
・同一帯域グループ内の理想配置位置は可能な限り均等分配
・許容CDV値が7のときは、理想位置付近のパターン照合により最適配置位置を選択
・同一グループGID隣接配置禁止機能
これらの特徴を中心に、本実施の形態におけるGID配置アルゴリズムの詳細を以下に説明する。
【0045】
次にGID配置の手順について説明する。まず、グループの階層例として、次に示すTEST2のテストパターンをとる。
([HP]167,167,167,167,167,167,167,167,163,163,163,163,163,163,163,163,157,157,157,157,157,157,157,157,151,151,151,151,151,151,151,151,149,149,149,149,149,149,149,149,139,139,139,139,139,139,139,139,137,137,137,137,137,137,137,137,131,131,131,131,131,131,131,131,127,127,127,127,127,127,127,127,113,113,113,113,113,113,113,113,61,61,61,61,61,61,61,61,2,2,2,2,2,2,2,2)
【0046】
これは8個ずつの12種類の96個のグループから構成されるパターンで、図7のように階層化される。同一帯域のグループをまとめたものを同一帯域グループ群とする。グループ配置の際には、帯域の大きいグループから群毎に配置処理を行い、各群内ではグループ毎、各グループ内では個別GID毎に配置を行う。グループが階層化されているのにともない、グループの配置処理も階層化されている。GID配置の基本構成を図8に、図中のtrunc_s0からtrunc_s3の処理の手順を図9から図12に示す。
【0047】
次に、本実施の形態のGID配置における、GID配置の理想位置の算出について述べる。
まず、同一帯域グループ内の理想配置位置の均等分配について述べる。
同一帯域を有する群化されたグループの各要素の理想配置位置は、全GID中に可能な限り均等に分配するというのが、本実施の形態におけるGID配置アルゴリズムの基本方針である。以下に、この均等配分の方法について説明する。
【0048】
例えば、図5に示すテストパターンTESTの最初の8個のデータの帯域GPCRは167である。この8個をまとめて一群として処理する(群化)。ここで167個のグループ要素を全スロットである11980中になるべく均等に割り振るには、11980/167=71.7365スロット毎にグループを配置すればよいが、1スロットは分割できず、GIDアドレスは整数値となっているので、グループ配置もこの制限下で行わなければならない。ここで、厳密な理想の計算位置からどのくらいずれても許容されるかを表すのが許容CDV値である。許容CDV値とCDV算出方法については後に詳述する。
【0049】
次にステップの配置について説明する。
さて、167個のグループを11980個のGID中に整数的に配置するためには、11980=71×44+72×123から、71の間隔を44個と72個の間隔を123個を混合して配置する必要がある。便宜上、小さいほうの間隔(この場合は71)をstep1、大きいほうの間隔(この場合は72)をstep2と呼ぶ。step2=step1+1である。
【0050】
本実施の形態においてstep1とstep2の計算は関数cnt_mix_clc_intで行っている。図13は、cnt_mix_clc_intの手順を示すフローチャートである。関数cnt_mix_clc_intは、図10の処理trunc_s1_s1のcnt_set_step_infおよびcnt_set_size_infで用いられる。
【0051】
図13のcnt_mix_clc_intは、割算のもとになる全体数whole_intのなかに、分割数divider_int個の要素をできるだけ均等配置する処理を、整数の世界のみで行う処理である。配置要素の間隔size1とsize2=size1+1,size1の数num1,size2の数num2を返す。この例の場合は、whole_int=11980,divider_int=167,size1=step1=71,size2=step2=72となる。
【0052】
図の処理cnt_mix_clc_int_s1では、size1とsize2を求めて、処理cnt_mix_clc_int_s2では、whole_int/divider_intの余りover,この場合は123を求める。処理cnt_mix_clc_int_s3では、size1の個数num1,この場合は44個、およびsize2の個数num2,この場合は123個を求める。
【0053】
step1とstep2の2種類の間隔の混合方法としては、次のような方法が考えられる。
1)まずstep1をまとめて配置し、step1が配置し終わったらstep2を配置する。
2)step1とstep2の混合比を計算し、これに従ってstep1とstep2を混合配置する。混合比が整数なので、最後に余りが出てどちらかが固まって配置される。
3)step1とstep2については意識せずに、ステップの累積値(GIDアドレス)を次の(1)式により実数で計算し、実数値を丸めて整数値とする。
GIDアドレス=11980/帯域×i (1)
但しi=1,2,…帯域
方式1)〜3)の順でアルゴリズムが複雑化するが、理想GID値からのずれは小さくなる。
【0054】
本実施の形態におけるGID配置アルゴリズムにおいては、1)〜3)の順で全ての方法を使用した経緯があるが、整数化によるCDVを1未満に抑えるために、最終的には3)の方式を使用している。3)の方式は単純に見えるが、使用変数をできるだけ正整数のみにするという制約のもとでは、それほど容易ではない。
【0055】
図14に、グループ帯域が380の場合に、各方式を用いて整数化したGIDアドレスを求めた場合の、CDVと借りの最大値、最小値、平均を求めたシミュレーション結果を示してある。帯域=380ということは、GIDの0から11979になるべく均等に380個のグループ要素を配置するということであり、表にはこの380個の配置中でのCDVと借りの値の最大・最小・平均を示してある。
【0056】
方式1)では、まずstep1=31を180個全て配置してから、次にstep2=32を200個配置する(11980=31×180+32×200)。間隔の小さいほうのstep1を先に配置しているため、借りは発生しないが、CDVは非常に大きくなり、方式3)の場合の100倍になっている。
【0057】
方式2)では、380/180=2.1111を四捨五入した整数比率2に基き、step1とstep2を1個ずつ交互に混合していき、最後に20個余ったstep2をまとめて配置する。借りの0.4737は、最初にstep1でなくstep2を配置したために発生した借りが、そのまま最後まで残ったもので、その後は新たな借りは発生していない。方式2)の場合もCDVは大きくなり、方式1)の場合の10倍になっている。
【0058】
方式3)では、実数値の整数化の方法として、四捨五入、切捨て、切上げ、切捨てと切上げをランダムに選択の4種類を試行した。四捨五入、切捨て、切上げについては、一貫して同じ方法を用いるならば、CDVはほぼ同じで1未満となることがわかる。借りは、常に小さめの整数値を選択する切捨てではゼロ、常に大きめの整数値を選択する切上げでは1に近い値、四捨五入では中間となっている。また、切捨てと切上げをランダムに選択する方式ではCDVが他の方式より1大きくなってしまうので、整数化の丸めには一貫して同じ方式を用いる必要があることがわかる。
【0059】
本実施の形態では、これらの機能は実数による混合パラメータ計算設定処理関数cnt_mix_realで実現される。図15は、関数cnt_mix_realの手順を示すフローチャートである。関数cnt_mix_realは、図10のtrunc_s1_s1のcnt_set_size_infおよびtrunc_s1_s4で用いられる。関数cnt_mix_realは、割算のもとになる全体数whole_intのスロットに、分割数divider_int個の要素をできるだけ均等配置する処理を実数の世界で行い、整数化した値を配置テーブルに書き込んで返却する。外部からの入出力は整数で、実数計算は本関数の中だけで閉じるようになっている。配置間隔の数が整数計算の場合と一致するかどうかのチェック機能を有する。
【0060】
図15の処理cnt_mix_real_s1では、整数変数whole_intとdivider_intを実数に変換している。処理cnt_mix_real_s2では、丸めバイアスを計算している。丸めバイアスについては後述する。処理cnt_mix_real_s4では、i番目の実数配置位置answerを計算し、これに丸めバイアスround_biasを加算し、切捨てで整数化してanswer_intを求め、テーブル*mix_cum_tblに設定している。処理cnt_mix_real_s3からcnt_mix_real_s7のループで、iを1からdivider_intまで変化させている。処理cnt_mix_real_s5では、ここで求めた間隔および個数が、図13の整数計算関数cnt_mix_clc_intで求めた値と一致しているかどうかを検査している。
【0061】
次に、ステップ混合法の変更について説明する。
まず、丸めバイアスの加算について説明する。
上記方式3)の(1)式に基き、帯域=380の場合のステップの加算値を実数で計算して、四捨五入、切捨て、切上げの三通りで整数化した場合の整数値の違いを図16の表に示す。図16からわかるように、整数化法の違いによって、GIDアドレス即ちstep1とstep2の混合状態は若干異なる。
【0062】
本実施の形態のアルゴリズムでは、グループの個々のGID配置時に、種々のスタートオフセット等を試行しても全GIDが配置できない場合、このステップ混合法の差異を利用して、さらに配置を試行してみる機能がある。これは図15の実数による混合パラメータ計算設定処理関数cnt_mix_real内の変数、丸めバイアスround_biasによって実現されている。
【0063】
丸めバイアスround_biasは、処理cnt_mix_real_s2でround_bias_int/bias_pitchによって求められる。このbias_pitchは100で、round_bias_intは0から99の間の整数をとるので、丸めバイアスround_biasは0から0.99までの0.01刻みの数をとることができる。
【0064】
ここでは、整数化の際に、元来の実数値に丸めバイアスround_biasを加算してから切捨てることにより、整数化のバリエーションを出している。丸めバイアスround_bias=0では切捨て、0.5では四捨五入となる。図17に示すように、切上げは端点の扱いが異なるので丸めバイアス加算によっては表せないが、丸めバイアスround_bias=0.99とすることにより模擬している。
【0065】
丸めバイアスは、ロムテーブルo_cnt_round_seqに記されているround_bias_intの値に従って設定される。これは下記のようになっているが、実際には最初の五個程度しか使用しない。
【0066】
{0,99,50,25,75,12,37,62,87,6,18,31,43,56,68,81,93,3,9,15,21,28,34,40,46,53,59,65,71,78,84,90,96,2,5,8,11,14,17,20,23,27,30,33,36,39,42,45,48,52,55,58,61,64,67,70,73,77,80,83,86,89,92,95,98,1,4,7,10,13,16,19,22,26,29,32,35,38,41,44,47,51,54,57,60,63,66,69,72,76,79,82,85,88,91,94,97,24,49,74}
【0067】
ステップ混合のバリエーションを出すためにこのようなステップ混合機能がある。ステップ混合機能は、方式1)の方法でステップを初期配置する場合には非常に効果が大きいが、方式3)の方法で実数を用いて配置する際には、比較的効果が少ない。
【0068】
次に行列座標について説明する。
いずれかの方法で帯域個数分のstep1とstep2を適当に混合したとすると、この混合結果を記憶しておく必要がある。混合結果を記憶するのは面倒なので、ステップ混合の基本ルールさえ覚えておけば、結果は記憶せずともすぐに再現できるように見えるが、それほど簡単にはいかない。一つの帯域のグループが一つだけならよいが、複数のグループが存在して群化して配置されるとき、グループ毎に配置開始位置が異なるが、step1とstep2の混合方法は同一の枠組みで行わないと、わずかなずれが積算して一部分にに配置済GID群の固まりが形成されてしまう現象が発生する。このような問題を解消するために、この実施の形態では、行列座標の概念を導入した。
【0069】
行列座標とは、帯域毎に定義されるもので、step1とstep2の混合方法を記憶しておく目的のために用いられる。基準となる行列座標(mtxi,mtxj)=(0,0)をもとにし、mtxi番目のステップのmtxj番目のGIDを(mtxi,mtxj)と表す。
【0070】
帯域=167の場合の行列座標の概念例を図18に示す。図において、GIDTBLはグループ識別子配置テーブルを表し、図1では横一行に描かれているGIDTBLをstep1またはstep2の長さに分断して、縦列に並べて描いてある。図のORGは、このときの原点を示し、行列座標の行方向の座標をmtxi,行列座標の列方向の座標をmtxjで表す。ここで注意する点は、行列座標の原点ORGは、GIDアドレスが0のスロットとは限らないということである。
【0071】
行列座標(mtxi,mtxj)が0から11979のGIDのどこに対応しているかの対応関係を示すのが図19,図20,図21の表である。図19は、行列座標の原点(mtxi,mtxj)=(0,0)がGID=0に対応している場合を示す。これが行列座標の基準となるので、行列座標設定時にはまずこの場合を計算する。行列座標はGIDアドレスと対応付けて記憶するのであるが、行列座標(mtxi,mtxj)からGIDアドレスを求めるときには、(mtxi,mtxj)の全ての組み合わせについて記憶しておく必要はなく、mtxj=0のときの各mtxiのGIDである(mtxi,0)さえ記憶しておけばよい。図19においては、網掛の部分の値のみがポインタ*(a_cnt_step_cum_tbl+mtxi)に記憶されている。
【0072】
図19は行列座標設定の基準であるが、実際には行列座標の原点(mtxi,mtxj)=(0,0)はGIDアドレス=0に対応するのではなく、その時々に乱数で0から11979のなかから選ばれるベースオフセットアドレスに対応するのである。図19の例において、行列座標の原点をベースオフセットアドレス=11727とした場合の例を図20に示す。図20は、図19の各座標の値にベースオフセット=11727を加算して求めたものである。アルゴリズム中では、図22に示す関数cnt_matrix_coordinate_setにより、図19ではなく図20のテーブルを用いている。
【0073】
関数cnt_matrix_coordinate_setは、図10のtrunc_s1_s4で用いられる。図19は図20を算出する過程で必要であるが、図20を算出してしまえば記憶しておく必要はない。図20も図19と同様に、mtxj=0のときの各mtxiのGIDである(mtxi,0)即ち網掛の部分の値のみがポインタ*(a_cnt_step_adr_tbl+mtxi)に記憶されている。
【0074】
さて、行列座標(mtxi,mtxj)から対応するGIDを求めるときには図20を用いればよいことはわかった。反対に任意のGIDから対応する行列座標(mtxi,mtxj)を求める場合には、図20の*(a_cnt_step_adr_tbl+mtxi)を検索して差を求めれば求められるが、GIDから行列座標を求める対応表があれば便利である。これを図21に示す。図21において、GID=0は(mtxi,mtxj)=(3,38)に対応し、(mtxi,mtxj)=(0,0)はGID=11727に対応している。図21の行列座標(mtxi,mtxj)は、a_cnt_gid_tbl[i].mtxiとa_cnt_gid_tbl[i].mtxjに収納されている。
【0075】
これまでは、ある帯域の一個のグループを配置する場合のステップの混合方法について述べた。次に、同一帯域のグループを複数配置する場合の配置方法について述べる。同一帯域のグループが複数存在する場合は、これらを別個に配置するのではなく、まとめて順次配置する。
【0076】
図23に帯域167の一個のグループを配置する場合の理想位置の例を、図24に二個のグループを配置する場合の例を示す。図23では、前述のようにstep1とstep2を混合して配置する。このとき、行列座標の原点のGIDアドレスは乱数選択したベースオフセットであるが、図23では簡単のためにベースオフセット=0としてある。
【0077】
図24では、グループ1とグループ2の2グループを配置するが、ここでグループ1とグループ2ができるだけ散らばるためには、図に示すように、グループ1のステップの中間付近にグループ2が配置されるようにしたほうがよい。さらに、グループ数が増えた場合には、ステップ内に均等分散されるように配置すると、衝突の可能性が小さくなる。同一帯域グループ群ではベースオフセットは共通にし、同一の行列座標に基づいて配置する。これは、行列座標を用いると、mtxjを一定にしてmtxiだけ1ずつ増加させることによって実現できる。この様子を図25に示す。ここで問題となることに、次の二点がある。
1)複数グループ対応のmtxjの選択
2)配置を開始するmtxiの選択
これらについて、以下に説明する。
【0078】
次にサイズの概念について説明する。
複数グループ対応のmtxjは、基本的にはstep1を均等配分して割り当てる。本実施の形態では、11980個のGIDを帯域個に分割した間隔のことをステップ、ステップを同一帯域グループ個数で分割した間隔のことをサイズと呼ぶ。ステップのとる値はstep1またはstep2=step1+1であるのと同様に、サイズもsize1またはsize2=size1+1をとる。
【0079】
ステップとサイズは、分割母体を分割して整数化するという点では類似性があり、次のように比較できる。この類似性を利用して、本実施の形態では、共通のアルゴリズムとして、図13の関数cnt_mix_clc_intおよび図15の関数cnt_mix_realを用いて、ステップ情報をcnt_set_step_infで、サイズ情報をcnt_set_size_infで計算している。関数cnt_set_step_infの手順を図26に、関数cnt_set_size_infの手順を図27に示す。これらの関数は、図10の処理trunc_s1_s1で用いられる。
【0080】
ステップ情報を*(a_cnt_step_cum_tbl+i)に設定したのと同様に、サイズ情報は*(a_cnt_size_cum_tbl+i)に保持される。図7のTEST2のように、帯域=167のグループが8個ある場合の、サイズ情報保持テーブルの例を図29に、同例の配置の様子を図30に示す。
【0081】
サイズ情報は、一ステップ内の配置を示すもので、全ステップ共通の行列座標mtxjを表す。ここで、サイズ情報は小さいほうのステップstep1(図30の例では71)に基づいているので、ステップがstep2の場合の最後のGID(図30の例ではi=1,2,166の場合のステップの右端のmtxj=71)には、理想位置としてのグループ配置はなされないことになる。
【0082】
次に同一帯域グループ開始ステップの均等分散について説明する。
図30では、各グループに割り当てられたmtxjに対してi=0,1,2,…,166の167個のグループ要素が配置されている。しかし、図30で黒く示されている配置位置CALPは、そこに配置できたら望ましいという理想の位置にすぎない。理想位置CALPが既に配置済みの場合は、前後の空位置を探索して許容CDVの範囲内の空位置に配置しなくてはならない。
【0083】
多数のグループのGIDを割り当てる際の、第一番目の割り当てならば、理想位置が既に配置済みであることはないが、二番目以降の場合は、理想位置が既に配置済みである可能性が出てくる。この可能性を鑑みると、グループ配置を開始するステップ、即ち図30のGIDTBLのなかで、どのmtxiの列から開始するかも意味を持つことがわかる。図30でいえば、全てのグループに関してmtxi=0のステップからGID配置を開始するのが一番単純である。配置し始めは既配置スロットが少なく理想位置への配置が可能であるが、配置が進みmtxiが増加するにつれ、既配置スロットが増えて理想位置への配置が困難となってくる。
【0084】
全てのグループで同様のことが発生するので、mtxi=166のステップに近付くと空スロットが少なくなって、場合によっては許容CDV内では配置不可となる可能性も出てくる。ここでは、このような事態を避けるために、グループ毎に配置開始位置をずらして全GID中になるべく分散するようにしている。このずれを表すのがバイアス個数bias_numであり、次式で求められる。但し、端数は切捨てて整数値をとる。
バイアス個数bias_num=帯域/同一帯域グループ個数
図30の例では、バイアス個数=167/8=20である。故に、各グループの配置開始ステップはi=0,20,40,60,80,100,120,140となる。この様子を図31に示す。
【0085】
グループ配置の際の基準となる点をオフセットと呼ぶ。図31に基づいて各オフセットについて説明する。まず、行列座標の原点ORGを設定するのがベースオフセットbase_offsetであり、全GIDアドレス(0から11979)の中から乱数で選ばれる。
【0086】
また、各グループの配置開始位置がスタートオフセットstart_offsetである。スタートオフセット設定のためには、まずベースオフセットを基準にして、mtxi=0の第一ステップを同一帯域グループ個数で均等分配したサイズ毎に、スタートオフセット原点start_offset_orgを設定する。各グループ毎のスタートオフセット原点に、バイアス個数bias_numだけステップiを順次ずらして、スタートオフセットstart_offsetを設定する。
【0087】
次に、スタートオフセット設定関数cnt_set_start_offsetについて述べる。
前に述べたように、配置理想位置を均等分散し行列座標の変換テーブルを図19,図20,図21に記憶している。GID配置の際にはこれらを読み出して使用する。
【0088】
スタートオフセット配置の際に用いるのはスタートオフセット設定関数cnt_set_start_offsetである。図32に、関数cnt_set_start_offsetのフローチャートを示す。この関数は、図11の処理trunc_s2_s1のスタートオフセット設定で用いられる。ここでは、変数loop2が、当該群において何番めのグループを配置しているかを示すことがポイントである。
【0089】
図31のスタートオフセットorgのkは、ベースオフセットに図29のサイズ情報保持テーブルのk番めの値*(a_cnt_size_cum_tbl+k)を加算したものとなる。これに、図19の*(a_cnt_step_cum_tbl)を用いて、バイアス個数bias_num×loop2を加算したのがスタートオフセットkとなる。これは、図20の*(a_cnt_step_adr_tbl)のbias_num×loop2番めの値と、図29のサイズ情報保持テーブル*(a_cnt_size_cum_tbl)のloop2番めの値を用いることによっても求められる。
【0090】
次に、配置GID取得処理cnt_set_clc_gidについて述べる。
Loop3内の個別GID配置の際に均等分配情報を読み出すのが配置GID取得処理関数cnt_set_clc_gidである。スタートオフセットとloop3(何番めの個別GIDを設定しているか)から、図33に示すように理想配置位置を求める。この関数は、図12の処理trunc_s3_s1の理想位置取得で用いられる。
【0091】
まず、図の処理cnt_set_clc_gid_s1で、図21のGIDから行列座標を求めるテーブルa_cnt_gid_tblにより、スタートオフセットのmtxi座標とmtxj座標を求める。次に処理cnt_set_clc_gid_s2で、このmtxi座標にloop3を加算して、現在配置しようとしているGIDのmtxi座標を求める。
【0092】
次に、処理cnt_set_clc_gid_s3で、現在配置しようとしているGIDのmtxj座標を、スタートオフセットのmtxj座標と等しく設定する。更に処理cnt_set_clc_gid_s4で、現在配置しようとしているGIDのmtxi座標とmtxj座標が求められたので、図20のステップ情報テーブルa_cnt_step_adr_tblを用いて、当該スロットのGIDアドレスを求める。
【0093】
次に同一グループGID隣接配置禁止機能について述べる。
本実施の形態におけるアルゴリズムでは、同一グループのGIDを隣接して配置してはいけないという制約を設けている。帯域の大きなグループでは、許容CDVの範囲内でGIDを配置した場合でも、互いに隣接して配置されるという現象が発生する。隣接配置はないほうが、グループ内GIDが分散していることになるので望ましい。
【0094】
隣接配置禁止の判断は、GID配置可不可判断(隣接GID禁止)関数cnt_chk_gid_availableで行われている。図34に、cnt_chk_gid_availableのフローチャートを示す。これは、図12の処理trunc_s3_s2あるいはtrunc_s3_s4等の、loop3の中での個別GID配置可不可判断に用いられる。
【0095】
以下に、理想位置のスロットにグループ要素が配置できない場合の処置について述べる。前節において、理想位置の均等配分のメカニズムについて述べた。しかし理想位置CALPはあくまでも「そこに配置できることが望ましい」という位置であり、既にそのスロットが配置済みであった場合には、別のスロットを探さなくてはならない。図36は、理想位置とその周辺を表す図である。図36のGID配置テーブルGIDTBLは、図1のGIDTBLの一部分を示すものである。図において、理想位置CALPのスロットが既配置で新たにGIDを配置できないとすると、その近傍の適当なスロットに配置する必要がある。
【0096】
別の配置スロットの探索方法は、配置しようとするものの種類により異なる。また、仮に目的の理想位置がちょうど空いていたとしても、周辺のGIDの配置状況を考慮して、その理想位置に配置せずに周囲に配置したほうがよい場合もある。これらの区別を以下に述べる。
【0097】
図35は、理想位置のスロットに配置できない場合の処置について、まとめたものである。
【0098】
次に、CDV=7のときのパターン照合について説明する。
本実施の形態のアルゴリズムでは、許容CDV値が7のときは、理想位置付近のパターン照合により最適配置位置を選択している。すなわち、図12の処理trunc_s3_s2からtrunc_s3_s5の代わりに、許容CDV値が7の場合には以下の手順でパターン照合を行う。
【0099】
許容CDV値が7ということは、理想位置のスロットを含めて周辺8個のスロットに配置できれば、許容されるという意味である。各GIDアドレスが空の場合を0,配置済の場合を1と表すと、許容CDV値が7の範囲は、8ビットのビットパターンで表すことができる。
【0100】
さらに、この範囲の前後の状況も考慮したほうが望ましいが、あまり広い範囲を考慮すると複雑になるので、本アルゴリズムでは、前後に一アドレスずつ加えて、10ビットパターンの範囲を考慮している。理想位置周辺の10個のGIDアドレスの空具合を10ビットのビットパターンで表すことにより、空具合に応じた最適配置位置を、10ビットのビットパターン対応で選択しようというのが、このパターン照合の概要である。10ビットの空具合は、全パターンを網羅しても1024パターンなので、手作業で最適配置位置を選択することができる。
【0101】
初期のアルゴリズムでは、理想位置が空なら無条件配置しており、また許容CDV値が7の範囲の前後各1ビットも考慮してなかったので、パターンは7ビット128通りであった。しかし、理想位置に配置することにより配置済GIDが連続してしまう現象や、考慮している範囲の外側の配置済GID群を増大させてしまう不都合が発生したため、10ビットパターン照合することになった。
【0102】
既配置パターンから最適配置位置を選択する方針は次の通りである。
1)同程度に適した空位置(ビット0)が複数あるときは、全てを配置候補とし、パターン照合時に乱数により候補位置の一つを選択する。
2)新規配置により1(配置済)連続が発生しない空位置(0)があれば、そこに配置する。即ち、3ビット以上の0(空)連続があるときは、両端の0を除いた0の位置に配置する。
3)新規配置により1(配置済)連続が発生しない空位置(0)がない場合は、1(配置済)の連続数が最小となる位置を選択する。
4)10ビット範囲の外側の配置状況については悲観的な想定をして、配置位置を選択する。即ち、外側の配置状況によっては、10ビット内部での1連続数より少ない1連続数が実現できるとしても、外側が別の状況なら、さらに長い1連続が発生してしまう可能性のあるような位置は選択しない。
【0103】
ロムテーブルo_cnt_cdv7_patとビットパターンの一部を図37に示す。表の左半分がロムテーブルで、右半分が10ビットの配置パターンである。ロムテーブルでは、横一行のデータが一組となって、右側の配置パターンの最適配置位置を表している。ロムテーブルの最左列のパターンコードは、配置ビットパターンを二進数列とみなして、これを十進数に換算した場合の数を示す。
【0104】
図37の第1行目では、ビットパターンは(0,0,0,0,0,0,0,0,0,0)なので、パターンコードは0となっている。パターンコード256のパターンは(0,1,0,0,0,0,0,0,0,0)であり、パターンコード1023のパターンは(1,1,1,1,1,1,1,1,1,1)である。
【0105】
パターンコード作成の際の各ビットの重みが、図37の右半分の配置パターン表の上部に示されている。この配置パターン表の上部には、各ビットのラベルが記されている。ビットパターンのビットは、右側から0,1,2,…と名付けられているわけではなく、真中の理想位置から左右交互に番号付けされている。これは、理想位置から出発して、理想に近い位置を順次探索していく場合の順番を示す。
【0106】
ロムテーブルには、現状のビットパターンに新規に1を配置する場合の最適位置を示すが、同様に適した位置が複数存在する場合には、全ての候補のラベルが列挙してある。候補の個数がロムテーブルの2列目に記されている。第1行目のパターンコード0では、候補ラベル0,1,2,3,4,5,6,7の8個の候補が同様に適していることが示されている。ロムテーブルで配置候補に挙げたラベルの位置は、配置パターンでは斜線表示してある。複数の配置位置候補がある場合は、実際の配置時に乱数によって一つが選択される。
【0107】
パターンコードが0で空ビットが多いときは、配置候補位置(斜線部分)が多数存在するが、パターンコード1,2,3,…と増加するにつれて、配置候補位置は少なくなってくる。パターンコード255のように、1の多いパターンでは、配置候補はラベル6の1ビットのみとなるが、パターンコード256のように、0の多いパターンでは、配置候補位置は6ビットもある。パターンコード1022や1023では全ビットが1なので、配置候補はゼロで配置不可となる。
【0108】
これらの機能に加えて、配置の初期には奇数アドレスにのみ配置する等の制御を付加したものが、CDV許容範囲内パターン照合関数cnt_chk_cdv_pat_valueで実現されている。配置アドレスについてさらに細かい制御を付加して、バリエーションをつけたものが、cnt_chk_cdv_pat_R1,cnt_chk_cdv_pat_R13,cnt_chk_cdv_pat_R135,cnt_chk_cdv_pat_R1357である。
【0109】
関数cnt_chk_cdv_pat_valueの手順を示すフローチャートを図38に、関数cnt_chk_cdv_pat_R1357の手順を示すフローチャートを図39に示す。関数cnt_chk_cdv_pat_R1からcnt_chk_cdv_pat_R135は、関数cnt_chk_cdv_pat_R1357の部分集合になっているので、手順は図39に含まれる。
【0110】
図38のcnt_chk_cdv_pat_valueでは、CDV≦7のときに、付与のGIDの周辺10スロットの配置状況を読み込み、10ビットのパターンind_cdv7に表現する。このパターンを、あらかじめ最適位置を探索しておいたパターン表(ロムテーブルに保管)と照合して、最適位置に配置する。
【0111】
図38の処理cnt_chk_cdv_pat_value_s6とcnt_chk_cdv_pat_value_s7とcnt_chk_cdv_pat_value_s8において、配置アドレスの奇偶に依存して、ロムテーブルo_cnt_cdv7_patと、o_cnt_cdv7_pat_oと、o_cnt_cdv7_pat_eを使い分けているが、いずれも、図37に示すような内容テーブルである。
【0112】
図39の関数cnt_chk_cdv_pat_R1からcnt_chk_cdv_pat_R1357では、設定帯域合計が小さいときには、奇数アドレスのGIDにグループ要素を配置する。
【0113】
関数cnt_chk_cdv_pat_R1では、GIDアドレスを8で割ったときの余り1の位置に配置する(図の処理cnt_chk_cdv_pat_R1357_s11からcnt_chk_cdv_pat_R1357_e1)。許容回数試行しても配置不可の時は、次の余り1あるいは3の位置に配置する関数に移る。
【0114】
関数cnt_chk_cdv_pat_R13では、GIDアドレスを8で割ったときの余りが1あるいは3の位置に配置する(図の処理cnt_chk_cdv_pat_R1357_s31からcnt_chk_cdv_pat_R1357_e3)。許容回数試行しても配置不可の時は、次の余り1または3または5の位置に配置する関数に移る。
【0115】
関数cnt_chk_cdv_pat_R135では、GIDアドレスを8で割ったときの余りが1または3または5の位置に配置する(図の処理cnt_chk_cdv_pat_R1357_s51からcnt_chk_cdv_pat_R1357_e5)。許容回数試行しても配置不可の時は、次の余り1または3または5または7の位置に配置する関数に移る。
【0116】
関数cnt_chk_cdv_pat_R1357では、GIDアドレスを8で割ったときの余りが1または3または5または7の位置に配置する(図の処理cnt_chk_cdv_pat_R1357_s71からcnt_chk_cdv_pat_R1357_e7)。許容回数試行しても配置不可の時は、奇数アドレス配置はあきらめる。
【0117】
理想スロットに配置できない場合の他の試行手順には、以下のものがある。なお、乱数に関しては、後で詳述する。
図11のtrunc_s2_s1のスタートオフセットの設定で理想スロットに配置できない場合は、図40に示すGID乱数検索処理(全GID対象)関数cnt_chk_start_rand_allを用いる。この関数では、後述する(3)式に示すように、周期16384の乱数を0から11979の間の乱数に変換し、空GIDが見付かるまで最大16384回試行する。空GIDスロットが一個でも存在すれば、必ず発見される。
【0118】
図10のstunc_s1_s2のベースオフセットの設定で理想スロットに配置できない場合は、関数GID乱数検索処理(全GID対象)±delta,cnt_chk_start_rand_all_deltaを用いる。この関数は、図40に示すcnt_chk_start_rand_all関数と同様に乱数で空GIDを探索するが、処理cnt_chk_star_rand_all_s4の判断で、当該GIDのみならず±deltaの範囲で空のGIDを探索する。
【0119】
図12の処理trunc_s3_s3において、許容CDV値が7を超えた場合で、理想GIDスロットに配置できない場合には、図41に示すCDV許容範囲内乱数GID検索処理cnt_chk_cdv_randを用いる。この関数では、CDV許容範囲内のGIDを乱数で検索する。
【0120】
図12の処理trunc_s3_s3からtrunc_s3_s5を繰り返しても、許容CDV値内でグループ要素が配置できないときは、処理trunc_s3_s6からtrunc_s3_s61に進んで、配置済の当該グループのグループ要素をリセットし、処理trunc_s3_e6から図11のtrunc_s2_st2に戻ってスタートオフセットを変更して、グループ要素の再設定を行う。
【0121】
ループ3からループ2に差戻してスタートオフセットを変更する試行を許容回数行っても、当該グルーブの全要素が設定できないときは、図12の処理trunc_s3_s7からtrunc_s3_s71に進んで、処理trunc_s3_e7から図10のtrunc_s1_st2に戻り、丸めバイアスを変更してグループ要素の再設定を行う。丸めバイアスの変更については前述した。
【0122】
ループ3からループ1に差戻して丸めバイアスを変更する試行を許容回数行っても、当該グルーブの全要素が設定できないときは、図12の処理trunc_s3_s8からtrunc_s3_s81に進んで、許容CDV値を変更して、処理trunc_s3_e8から図11のtrunc_s2_st2に戻り、グループ要素の再設定を行う。可能な限り許容CDV値を増加させずにグループ要素を配置するために、trunc_s3_s6からtrunc_s3_s7の試行を行うが、それでも配置できない場合は、trunc_s3_s81で許容CDV値を増加するのである。許容CDV値増加の方法については後述する。許容CDV値の最大値は全スロット11979であるが、これでも配置できない場合は、trunc_s3_edで配置不可として終了する。
【0123】
次に、本実施の形態におけるCDVについて説明する。
本実施の形態のCID配置アルゴリズムの目的は、グループの各要素を、全GIDスロット中に可能な限り均等に分配することである。しかし、通常は、全GIDスロットの個数はグループ要素の個数では割りきれない。一方、GIDアドレスは整数値となっている。故に、理想配置スロットのGIDアドレスは、厳密な理想の計算位置(実数)を整数化して求める必要があり、ここで若干のずれが生じる。このずれは、GID配置問題の構造上、必ず発生するものであるが、発生の仕組みと範囲を把握して、所望の範囲内に収める必要がある。このずれを構造的CDVと呼ぶ。構造的CDVについては後述する。
【0124】
また、グループ要素配置時に、理想配置位置のGIDスロットが必ず空いているとは限らず、この場合には理想配置位置の周辺に配置することになる。この際に理想配置位置の周辺として許容される範囲が許容CDV値である。許容CDV値についても後述する。
【0125】
次にCDVの仕組みと構造的CDVについて説明する。
まず、構造的CDVについて説明する。
ここでは、CDV算出のために、借り(debt)という概念を導入する。また、通常のCDV計算方法と区別するために、ここではCDVのことを狭まりと呼ぶ。狭まりとは、実際の配置位置が理想位置より先行した場合の、理想位置と実配置位置の差を指す。実配置位置が理想位置より遅延した場合は狭まりはゼロとなり、ペナルティがないように見えるが、新たな借りを発生してしまう。ここで、実配置位置とは、理想位置に配置できない場合に実際に配置された代替位置である。また、先行するとは、GIDテーブルにおいて左側(スロットアドレスの小さい側)に配置されることであり、遅延するとは、GIDテーブルにおいて右側(スロットアドレスの大きい側)に配置されることである。
【0126】
即ち、その次以降の配置の理想位置は借りの分だけ後方に移動し、計算上の理想位置に実配置されたのでは狭まりが発生することになってしまう。故に、実際の理想位置は、計算理想位置にこれまでの借りの総和を加算(遅延)した位置となる。ここでは、この理想位置と実位置の関係を指標(index)と呼ぶことする。指標の正負により、狭まりまたは新規借りが発生することになる。
【0127】
図42は、本実施の形態におけるCDV算出アルゴリズムcnt_clc_cdv_showのフローチャートを示す。この関数は、GID配置を行ったときに、CDVを算出するために、図12の処理trunc_s3_s21およびtrunc_s3_s41,図38の処理cnt_chk_cdv_pat_value_s11,図39の処理cnt_chk_cdv_pat_R1347_s12,cnt_chk_cdv_pat_R1347_s32,cnt_chk_cdv_pat_R1347_s52,cnt_chk_cdv_pat_R1347_s72で用いられる。
【0128】
図42において、処理cnt_clc_cdv_show_s1では、
指標=(計算理想+借り)−実位置=借り+(計算理想−実位置)
により指標を計算する。その結果を処理cnt_clc_cdv_show_s2で判定し、指標がゼロまたは正の場合は、実位置より理想位置が遅いので、処理cnt_clc_cdv_show_s3に進み、狭まり=指標とする。このときは、新規借りは発生せず、処理cnt_clc_cdv_show_s5で計算し、借り積算値、即ちΣ借りは不変となる。指標が負の場合は、実位置より理想位置が早いので、処理cnt_clc_cdv_show_s4に進み、狭まり=0とする。このときは指標の絶対値が新規借りとなり、この値を処理cnt_clc_cdv_show_s5でΣ借りに加算する。
【0129】
次に、CDV計算の例を示す図43により、CDV計算の仕組みを説明する。図において、BANDAXは帯域軸を示す。これは図1のグループ識別子配置テーブルGIDTBLに対応する。図1のグループ識別子配置テーブルGIDTBLは、スロットSLOTを単位とするディジタル的なものであるのに対し、図43の帯域軸BANDAXはアナログ的なものである。帯域軸の左側から、順次GID配置を行う。その他、CALPは計算理想位置、REALPは実位置、SFTDPはシフトされた理想位置、NEWDBTは新たに発生した新規借り、SUMDBTはΣ借り、即ちこれまでの借りの積算値、CDVは狭まりである。各々の記号に付加している数字は、時間を追って0,1,2,3,…の順に設定される各値の順番を示している。
【0130】
図43において、計算理想位置CALP0,CALP1,CALP2,CALP3は等間隔に配置されている。実位置REALP1は、CALP1より早いため、ここでは狭まりが発生する。即ち、
指標1=計算理想CALP1−実位置REALP1≧0
となるので、CDV1=指標1となる。この時点では、まだ借りは発生していない。
【0131】
実位置REALP2は、計算理想位置CALP2より遅いため、ここでは新規借りが発生する。即ち、
指標2=計算理想CALP2−実位置REALP2<0
となるので、新規借りNEWDBT2=−1×指標(正値)となる。
ここで借りができてしまったので、理想位置3は、計算理想位置CALP3にΣ借り(この時点ではまだ新規借りNEWDBT2のみ)を加算したシフトされた理想位置SFTDP3となる。
【0132】
実位置REALP3aの場合は、
指標3a=シフトされた理想位置SFTDP3−実位置REALP3a≧0
となり、CDV3a=指標3aとなる。実位置3bの場合は、
指標3b=シフトされた理想位置SFTDP3−実位置REALP3b<0
となり、新規借りNEWDBT3b=−1×指標3bとなる。
これらの機能は、CDV計算処理関数cnt_clc_cdv_showで実現されている。
【0133】
次に許容CDV値について説明する。
許容CDV値は初期値が7で、その後はE_CNT_CDV_CHKiの区切り目毎に、E_CNT_CDV_ADDiの値が、図44に示す表のように加算される。これは許容CDV値設定関数cnt_set_allow_cdvによって行われる。図45は、許容CDV値設定関数cnt_set_allow_cdvの手順を示すフローチャートである。この関数は、図12の処理trunc_s3_s81で用いられる。
【0134】
但し、上記の許容CDV値は、整数化された理想GIDが既に配置済みの場合に、前後にどこまでずらしても許容されるか、という許容値として用いられるのであり、整数化されたGIDが実数計算のGIDからずれる範囲の許容値として使用するためにあるのではない。整数化されたGIDが実数計算のGIDからずれる範囲は、1未満となるように制御する必要がある。測定機器を接続して観測する際には、実数計算の等間隔に基く位置を基準とするため、CDVが基準値を超えるエラーとして検出されてしまう可能性があるからである。
【0135】
以下に、本実施の形態における、乱数による配置位置のランダム選択について説明する。
まず、本実施の形態における乱数列の生成方法について述べる。
本実施の形態における乱数発生アルゴリズムでは、乱数発生の周期毎に、15種類の乱数系列が準備されている。これを図46に示す。乱数系列により発生させる乱数の周期は、2のべき乗の数2p とし、0から(2p −1)の範囲の乱数Raを発生させる。一般に0から(Gmax−1)までの乱数Rgを求める場合は、次式により変換する。
Rg=Ra×Gmax/2p
【0136】
本実施の形態における乱数発生アルゴリズムでは、発生を要する乱数の最大周期が、GID配置テーブルの全スロット数11980であり、
8192=213<11980<214=16384
となるので、指定できる周期は214までとしてある。しかし、同様のアルゴリズムで、これを超える周期の乱数を発生することができる。
【0137】
また、図46の周期1の関数は、常に0を発生するだけで、乱数としての使途はないが、エラー時等に全体としての整合性をとるために設けてある。
本実施の形態における乱数発生アルゴリズムでは、引数としてp即ち周期cycleの基底2の対数cycle_log2を与え、呼び出すたびに乱数列を乱数テーブルの所定変数を計算して書換える関数cnt_randが設けられている。図47は、cnt_randを示すフローチャートである。
【0138】
この関数は、図10の処理trunc_s1_s2のベースオフセット設定、図11の処理trunc_s2_s1のスタートオフセット設定、図12の処理trunc_s3_s3のランダムスロット検索、図38の処理cnt_chk_cdv_pat_value_s10の配置候補位置選択等、乱数を使用する箇所で多数用いられる。
【0139】
また、乱数テーブルの初期化のために、引数としてp即ちcycle_log2および初期値seedを与え、所定変数をseedに初期化できるようにしてある関数cnt_srancが設けられている。図48は、cnt_srandを示すフローチャートである。この関数は、図9の処理trunc_s0_s2で用いられる。
【0140】
図47の関数cnt_randは、呼ばれるたびに、周期cycleの乱数値を更新し、新しい値を返す。処理cnt_rand_s1の更新式および処理cnt_srand_s1の初期化式は次の(2)式に基く。
この式の意味は、初期値x0 =seedから開始して、順次1103515245xn +12345を2( cycle_log2))で割った余りをxn+1 とするということである。
【0141】
次に、上記(2)式の根拠についてに説明する。
例えば、脇本和昌、“乱数の知識”、森北出版 初等情報処理講座5,1981,pp.32に記されているように、計算機による一般的な一様擬似乱数の生成法として、混合型合同法(mixed congruence method)がある。これは次式に従って乱数列を生成する方法である。
xn+1 =axn +c(modulo2p )
x0 =seed
この式の意味は、初期値x0 =seedから開始して、順次axn +cを2p で割った余りをxn+1 とするということである。
【0142】
ここで、上式によって生成される乱数列x0 ,x1 ,x2 ,…の最大周期は、
a=1(modulo4) …4で割ったとき1余る数という意味
c=1(modulo2) …2で割ったとき1余る数という意味
のとき、2p となる。本実施の形態における乱数発生アルゴリズムでは、この定数の値に、B.W.Kernighan and D.M.Ritchie,“The C programming language Second edition”,Prentice Hall,1988,pp.46の乱数と同じ下記の値を用いているが、上式を満たす他の値でもよい。
a=1103515245
c=12345
【0143】
この実施の形態における乱数発生アルゴリズム自体は、前述の文献等で従来から知られている混合型合同法に基くものであるが、CID配置問題を解くにあたり、乱数発生周期の非常に長いプログラム言語の組込み関数ではなく、混合型合同法を用いて、乱数発生周期を目的に応じて制御できるようにした乱数関数を作成した点に特徴がある。
本実施の形態の乱数アルゴリズムと、プログラム言語の組込み関数の乱数関数との比較を、以下に述べる。
【0144】
本実施の形態の乱数アルゴリズムによれば、周期2p の乱数を2p 回発生させれば、0から(2p −1)の数がちょうど一回ずつ発生することが確認済みである。周期内での数列発生の順番はseedによって決まるので、2周期分の乱数を発生させれば、1周期目と2周期目との数列の順番は等しくなる。プログラム言語Cの標準ライブラリにも乱数を求める関数randは存在するが、Cのrand関数は、乱数発生の周期が長くなるように作成されており、乱数発生の細かさも指定できないので、0から(2p −1)の間の数の乱数を2p 回発生させても、一回も発生しない数や複数回発生する数が多数存在する。これは本実施の形態の目的にそぐわないので、乱数関数を手作りしてある。
【0145】
図49に本実施の形態の乱数と、シミュレーションを行ったC言語ソフトウェアであるマイクロソフト社のVisual C++の組込み乱数の比較を示す。図49の実線は次のようにして求めた。まず、本実施の形態の乱数でseed=1、周期214として0から16383の間の乱数Raを発生させ、これを次の(3)式により0から11979の間の乱数R1に変換する。
R1=Ra×11980/16364 (3)
【0146】
この試行を11980回繰り返した場合、0から11979の間の数は一回発生する、二回発生する、一回も発生しない、のいずれかとなる。各々の回数が図49の実線で示されている。ちょうど一回発生する数が7188個、ちょうど二回あるいはゼロ回発生する数の個数は等しく、2396個となっている。図には示されていないが、同様の試行を16384繰り返すと、Raは0から16383の間の数がちょうど一回ずつ発生されるので、R1の0から11979の間の数は一回発生が7580個、二回発生が4400個となり、一回も発生しない数はゼロとなる。
【0147】
図49の破線はマイクロソフト社のVisual C++の組込み乱数randを用いて、0から11979の間の乱数を求める試行を11980回繰り返した場合の、0から11979の間の数の発生頻度である。変換式は次の通り。
R3=Rc×11980/(RAND_MAX+1)
但し、シミュレーションを行ったC言語ソフトウェアであるマイクロソフト社のVisual C++では、RAND_MAX=32767=215−1である。一回も発生しない数が4449個、ちょうど一回発生する数が4361個、二回発生する数が2168個、三回発生する数が773個、四回発生する数が182個、五回発生する数が46個、六回発生する数が1個となっている。Cの組込み乱数は、本実施の形態の乱数に比べると、乱数発生の頻度が一様でなく、一定間隔内の数を発生させる目的には適さないことがわかる。
【0148】
図49の実線データで一回発生の数が7188個となっている。乱数のシードを変えた場合に、この値がどのように変化するかを示すのが図50である。本アルゴリズムにおいて、シードを0から11979間で変化させ、それぞれの場合に周期16384の乱数を11980回発生させ、上記(3)式で0から11979の間の乱数に変換した場合に、ちょうど一回発生する数の個数を横軸にし、発生頻度を縦軸にとったものである。シードをいくつにとっても、一回発生の数の個数は7120から7320の間におさまることがわかる。
【0149】
乱数に関係した関数には、以下のものがある。
図51は、基底2の対数を計算する関数cnt_log2を示すフローチャートである。この関数は、図41の処理cnt_chk_cdv_rand_s1で用いられる。基底2の対数を計算する手順について、図51に基き説明する。関数cnt_log2が引数として変数yとともに呼ばれると、cnt_log2_s1において、引数yに対して2x ≦y<2(x+1) なるxを求め、cnt_log2_edで、求めたxを返す。付与のyの範囲内の値を乱数で求める場合には、その周期の2の対数(log2)を端数切り捨てで計算する。CDV許容範囲内乱数GID検索処理関数cnt_chk_cdv_rand内で用いる。
【0150】
その他、図41のCDV許容範囲内乱数GID検索処理cnt_chk_cdv_rand,図40のGID乱数検索処理(全GID対象)関数cnt_chk_start_rand_all,ならびにcnt_chk_start_rand_all_deltaが乱数を用いている。これらについては前述した。
【0151】
ところで、上記説明では、この発明を、ATMのGFRにおけるGID配置問題解決に利用する場合について述べた。しかし、図1あるいは図2に示すGIDテーブルGIDTBLと同様に、アドレスADRを有するスロットSLOTに、図3に示す属性をもつグループ、すなわち、要素数がGPCRで、グループ識別子がGIDで、理想位置からのずれの許容度が単数または複数種類のグループ要素を、均等に分散させるという目的の他の問題にも利用できることはいうまでもない。
【0152】
以上のように、この実施の形態1によれば、配置処理時間が短く、理想配置位置に配置できない場合には適切な代替位置を選択し、全体的に均等に分散配置を行うことができるという効果が得られる。
【0153】
実施の形態2.
実施の形態2から4は、実施の形態1の図15に示す関数cnt_mix_realの改良に関するものである。実施の形態1の関数cnt_mix_realは、割算のもとになる全体数whole_intのスロットに、分割数divider_int個の要素をできるだけ均等配置する処理を実数の世界で行い、整数化した値を配置テーブルに書き込んで返却する関数であり、外部から入出力は整数で、実数計算はこの関数のなかだけで閉じるようになっているものであった。
【0154】
実施の形態1の図15に示す関数cnt_mix_realでは、処理cnt_mix_real_s1で整数変数whole_intとdivider_intを単精度の浮動小数点変数wholeとdividerに変換し、処理cnt_mix_real_s4で、上記(1)式の値を計算していた。この実施の形態では、(1)式に対応する配分位置計算式として、次の(4)式を用いる。
answer=whple*i/divider (4)
但し、各パラメータの値は図52の通りとする。
【0155】
図53と図54にこの実施の形態におけるanswerの計算法を示す。これらの図の処理cnt_mix_real_s1からcnt_mix_real_s4は、図15の同処理に対応する。図53と図54では、図15内の他の処理は省略されている。図53と図54示すanswer計算手順では、処理cnt_mix_real_s1で、整数変数whole_intとdivider_intを倍精度浮動小数点変数wholeとdividerに変換している。
【0156】
(4)式を用いてi=1,2,…,dividerにつき順次answerを計算する方法の一つは、各iにつき下式によって、まずwholeとiの掛算をしてからdividerによる割算をする方法である。
answer=(whole*i)/divider (5)
【0157】
これは図53の処理cnt_mix_real_s4に示されている。ここで、wholeとiが図52に示す値をとると、その積は最大となる。ところで、IEEE標準に準拠した通常の浮動小数点表示では、十進表示の有効桁数はfloatで6桁、doubleで15桁となっている。故に(5)式の計算は、floatでは有効桁数を超えて桁落ちが発生してしまい、有効な値を得ることができない。一方、図53に示すようにdoubleを用いると、桁落ちが発生せず有効な値を得ることができる。
【0158】
(4)式の計算のもう一つの方法は、先にwholeのdividerによる割算をしてから、順次各iにつき掛算をする方法である。
answer=(whole/divider)*i (6)
この方法ならば、図54のcnt_mix_real_s4_1で先に一回割算をしておけば、iを変化させた各ループではcnt_mix_real_s4_2のように掛算だけをすれば良く、計算速度が速くなる。また、先に割算をして小さな数にしておくので、桁あふれも発生しない。しかしfloatでは、この場合も有効桁数不足で有効な値を得ることができない。
【0159】
例として、divider=380,i=19の場合をとると、
となるのであるが、ここでfloat変数としてのanswerの中身は十進表現で、
+5.98999998092651367e+0002
となっている。これを整数化すると598となり、目的の599は得られないのである。この場合も、図54に示すようにdoubleを用いると、有効な値を得ることができる。
【0160】
以上のように、この実施の形態2によれば、実数間隔算出処理において、倍精度変数doubleを用いることにより、桁落ちが発生せず有効な値を得ることができるという効果が得られる。
【0161】
実施の形態3.
実施の形態3は、実施の形態1の図15に示す関数cnt_mix_realの改良に関するものである。
実施の形態1の図15に示す関数cnt_mix_realでは、処理cnt_mix_real_s1で整数変数whole_intとdivider_intを浮動小数点変数wholeとdividerに変換し、処理cnt_mix_real_s4で、(1)式の値を計算していた。この実施の形態では、実施の形態1の(1)に対応する配分位置計算式として、実施の形態2の(4)を用い、各パラメータの値は図52の通りとする。この実施の形態では、(4)式の計算に固定小数点変数を用いる。
【0162】
この実施の形態による配置位置計算手順を示すに先立ち、一般的な固定小数点表示で計算をする手順を、図55を用いて説明する。ここでは、通常表示の元の数を整数とするので小数点が最下位ビットの右側においてあるが、元の数が小数ならば、対応する位置に配置すれば良いだけである。手順は、まず通常表示の整数を所望のビット数シフトして固定小数点表示に変換し、その上で必要な計算をして、その結果を逆にシフトして通常表示の数に戻す。シフトするビット数SHIFTは、必要な精度によって決まる。固定小数点表示の変数は、シフトしてもあふれないだけのビット長でなくてはならない。
【0163】
図56にこの実施の形態における第一のanswerの計算法を示す。これらの図の処理cnt_mix_real_s1からcnt_mix_real_s4は、図15の同処理に対応する。図56では、図15内の他の処理は省略されている。
【0164】
(4)式の計算を、まずwholeとiの掛算をしてからdividerによる割算をする方式は、次の(7)式および図56で示される。
whole=whole<<SHIFT
divider=divider<<SHIFT
answer=(whole*i)/divider (7)
但し、whole<<SHIFTは、整数wholeをSHIFTビット左シフトすることを示す。
【0165】
これは図56の処理cnt_mix_real_s1で示されている。最初に処理cnt_mix_real_s1の左シフトによってwholeとintと固定小数点表示を求めておき、i=1,2,…,dividerにつき順次answerを計算する。この方式では、(7)式の分子と分母で左シフトが相殺されるので、右シフトによる戻しシフトは必要無い。
【0166】
この際の必要ビット数を示したのが図57である。ここでwholeとiは図52の範囲の値をとるので、必要ビット数は、それぞれ14ビット、13ビットとなる。また、図52の範囲の値をとるdividerによる割算を行って有効な結果を得るためには、シフトビットは、13ビットは必要となる。これらを合計すると40ビットとなる。
【0167】
シミュレーションに用いたMicrosoft Visual C++では、最大ビット数の整数は32ビットの符号なし整数(unsigned long,最大値4294967295=232−1)なので、図57に示す40ビット表示によるシミュレーションを全面的に行うことはできない。
【0168】
しかし、上式に示すように、iが43を超えない時には、固定小数点表示変数が32ビットで足りる。そこでdivierが2≦divider≦43の範囲で実験した結果、誤差の無い有効な結果を得ることができた。故に、固定小数点表示変数として40ビット以上の整数を準備できれば、この方式で有効な結果を得ることができる。
【0169】
図58にこの実施の形態における第二のanswerの計算法を示す。これは上記の第一の方式と対比するために、説明するもので、第一の計算法より性能が劣っている。
【0170】
(4)式の計算を、まずwholeのdividerによる割算をしてから、順次各iにつき掛算をする方式は、次の(9)式および図58で示される。
whole=whole<<SHIFT
whole_divide=whole/divider
answer=whole_divide*i
answer=answer>>SHIFT (9)
【0171】
最初の整数wholeの左シフトを図58の処理cnt_mix_real_s1で計算し、whole/dividerによる割算をcnt_mix_real_s4_1で、あらかじめ計算して整数whole_divideに収納しておき、i=1,2,…,dividerにつきcnt_mix_real_s4_2で順次answerを計算し、最後にcnt_mix_real_s4_3で右シフトにより普通表示の数に戻す。
【0172】
この方式では、先に一回割算をしておけばiを変化させた各ループでは掛算だけをすればよい。しかし、この方式では、cnt_mix_real_s4_1の整数whole_divide計算時に切捨て誤差が発生し、その後のiによる乗算では、この切捨て分を復活することができないので、有効な結果を得ることができない。場合によっては、実数計算と同じ正確な値を得られることもあるが、wholeとdividerとiの関係がちょうど割り切れる関係のときには、有効な値を得ることができない。
【0173】
例としてdivider=380,i=19の場合を考える。(4)式に代入すると、
となり、ちょうど割り切れる。
【0174】
一方、SHIFT=13として(9)式に代入すると次のようになる。
これを計算すると、次のようになる。
【0175】
【数1】
【0176】
(11)式の結果は(10)式と異なってしまう。シフトビットSHIFTを更に大きくしても、同様の結果となる。この方法の根本的な問題点は、整数の除算では、割り切れない場合の商は必ず切捨てされるということに起因する。例えば(10)式のように、除算と乗算を同時に行えば、ちょうど割り切れる計算において、除算を先に行い、その際に切捨てで商を求める限り、後の乗算では切捨て分は復活できない。故にいくらシフトビット数を増しても、この方法では有効な結果は得られない場合が発生する。ちなみに、浮動小数点表示の計算では、数を丸める際に最も近傍へ丸めるため、このようなことが発生しない。
【0177】
図59にこの実施の形態における第三のanswerの計算法を示す。これは第一の計算法と対比するために説明するもので、性能は第一の計算法に比べて劣る。
【0178】
第二の計算法の問題点は、最初のwholeのdividerによる割算で、商を整数化するために切り捨てることにあった。それならば、最初の商だけは実数で計算し、その結果を用いて後の乗算を行えば、うまく行くのではと考えられる。実施の形態2で示したように、実数はfloatでは足りないことが解ったので、doubleを用いる。手順は次の(12)式及び図59に示す。変数の属性を明らかにするために、doubleにはdb、整数にはintが付けてある。
【0179】
【0180】
この方法では、上記に示すように整数として32ビットのunsigned longを用いているが、残念ながら32ビット整数では、有効性は検証できない。この方法を使用するには、整数として少なくとも64ビットオーダーの長さが必要である。
【0181】
以上から、この実施の形態で有効なのは第一の計算法であり、固定小数点表示により配置位置answerを求めるためには、図56で示したように、乗算後に除算をして、整数は40ビット以上とする必要がある。
【0182】
以上のように、この実施の形態3によれば、実数間隔算出処理において、固定小数点変数を用いることにより、整数だけで処理することができ、配置処理時間を短くすることができるという効果が得られる。
【0183】
実施の形態4.
実施の形態4は、請求項2の実数間隔算出処理の方法、すなわち、実施の形態1の図15に示す関数cnt_mix_realの改良に関するものである。
実施の形態1の図15に示す関数cnt_mix_realでは、処理cnt_mix_real_s1で、整数変数whole_intとdivider_intを、浮動小数点変数wholeとdividerに変換し、処理cnt_mix_real_s4で、(1)式の値を計算していた。実施の形態3では、固定小数点表示変数を用いて実施の形態2の(4)式の値を計算し、各パラメータの値は図52に従っていた。
【0184】
実施の形態3では、固定小数点表示変数による計算方式を示した。固定小数点表示変数による計算では、実施の形態3の第一の方式に示したように、乗算後に除算を行い、整数は40ビット以上必要であることを示した。しかし、32ビット以上の整数は標準化されておらず、コンパイラに依存しているため、誤動作防止のためにできれば使用を避けたい状況である。そこで、この実施の形態では、固定小数点計算を32ビット以下の整数で行う方法を示す。
【0185】
この実施の形態では、実施の形態1の式1に対応する配分位置計算式として、実施の形態2の(4)式を用い、各パラメータの値は図52の通りとするが、シフトするビット数はSで表す。この実施の形態では、(4)式の計算に32ビット以下の整数を用いて、固定小数点計算を行う。
【0186】
この実施の形態による配置位置計算手順を示すに先立ち、この実施の形態における計算方式の導出を示す。この実施の形態で示す計算方式をres_res法と呼ぶ。このres_resとは、residue of residue、すなわち余りの余りを意味する。
【0187】
この実施の形態の第一の方式として、まず、実施の形態1で示した丸めバイアスをゼロとした場合を考える。計算の方針は以下の通りとする。
・ビットシフトするのは、wholeをdividerで割算したときの余り(residue)であるwhole_resのみで、商(quotient)であるwhole_quoはシフトしない。
・なるべく等価変換により式の変形を進める。(分母と分子に同じ数があるときは消すなど)
・掛算を先に行う。
・切捨てをともなう割算・ビットシフトは最後まで行わない。
【0188】
付与の定数wholeと変数dividerからanswerを求める式の変形を以下に示す。
【0189】
【数2】
【0190】
上式の右辺の第一項(whole/dividerの商の分)については、ビットシフトは行わず乗算で計算し、第二項(余りの分)についてのみ、ビットシフトを行って計算する。
【0191】
以下に、whole=11980,divider=380,i=19,S=13の場合の数値例を示す。
11980=31×380+200
11980×213=31×213×380+200×213
ここで、
【0192】
上記の計算のプログラム例を以下に示し、フローチャートを図60に示す。
whole_quo=whole/divider;
whole_res=whole%divider;
res_s=whole_res<<S;
res_quo_s=res_s/divider;
res_res_s=res_s%divider;
res_quo_ans_s=res_quo_s*i;
res_res_ans_s=res_res_s*i/divider;
res_ans_s=res_quo_ans_s+res_res_ans_s;
res_ans=res_ans_s>>S;
quo_ans=whole_quo*i;
answer=quo_ans+res_ans;
【0193】
以下に、この実施の形態の第一の方式における必要ビット数の検討を行う。
各変数の説明を図61に示す。各変数の値の範囲は図61に示してあるが、これらの値はdividerの値に依存して変化する。故に、図61の値の範囲による必要ビット数を単純に加算したのでは、本当に必要なビット数を上回る値が出てしまう。必要ビット数を正しく評価するためには、各変数の最大値と与えるdividerの値との関係を調査する必要がある。
【0194】
与えるdividerの値と各変数の値の最大または上限値との関係を示したのが図62である。図62では、シフト数Sは13としている。横軸のdividerの値の最大値は、実際には5990であるが、各変数の挙動が良くわかるように、11980まで示してある。縦軸は各変数のlog2をとって切上げたもので、各変数を表現する必要ビット数を示している。図62から、divider≦5990でS=13の場合は、必要ビット数は26ビットであることがわかる。これを一般化して、必要ビット数はS+13として良いと思われる。故に、S≦19ならば32ビット整数が使用できることになる。
【0195】
次に、この実施の形態の第一の方式を拡張して、この実施の形態の第二の方式として、丸めバイアスを加算する場合について述べる。丸めバイアス(round bias)は、0から99の値をとるround_bias_intとround_bias_pitch=100で、
round_bias=(round_bias_int)/(round_bias_pitch)
で表し、0から0.99の値をとるものとする。
【0196】
この実施の形態の第一の方式の式のanswerは、以下のようになる。
【0197】
【数3】
【0198】
プログラム例は以下のようになり、そのフローチャートを図63に示す。
【0199】
以下に、丸めバイアスを加算する場合の必要ビット数について示す。
この実施の形態の第一の方式で、丸めバイアスを加算しない場合の必要ビット数はS+13とした。シフトビットS=13の場合のround_bias_sのround_bias_intに対する値の変化を示したのが図64である。図64から、round_bias_sは13ビット必要なことがわかる。これはSによる。丸めバイアスを加算する場合は、上記で説明したように、res_ans_sがround_bias_sだけ増加することになる。
【0200】
図62の(e)に図64の(b)の丸めバイアスを加算したものが、図65である。これは図62の(e)と同じであるので、図62と同様に、divider≦5990でS=13の場合は、必要ビット数はS+13として良いと思われる。故に、S≦19ならば32ビット整数が使用できることになる。
【0201】
この実施の形態の第一の方式の評価を以下に示す。評価は、シフトビットS=0,9,13の場合について、round_biasを0から0.99まで0.01刻みで変化させて、各々の値における評価指標の場合の数を調べた。round_biasの各値につき、帯域(divider)は1から5990まで変化させ、各帯域につき、1≦i≦dividerの範囲でiを変化させた。
【0202】
評価指標と結果を図66に示す。step1とstep2の間隔については、3ケースとも、整数計算により求めた規定値と異なる場合はないので、シフトビットをいくつにとっても、帯域が変わってしまう等の面倒な問題を引き起こすことはないと思われる。しかし、理想値を与えるdoubleによるanswerとの比較では、シフトビットが小さいほど、answerが異なる場合の数が多くなる。doubleによるanswerと異なる値をとると、CDVが最大1まで増加してしまうので、直後にCDVチェックを行った場合は、エラーが発生する可能性がある。
【0203】
ところで、図67の(b)と(c)から、S=9と13の場合は0,0.25,0.5,0.75の4値では、doubleとの差異がゼロになっている。故にround_biasとして、この4値を用いれば、doubleとの差異がなくなると言える。図67の(a)から、S=0の場合も差異が小さくなる点があるが、そのときでも、round_bias=0の点を除いて、約1000個の差異がある。round_bias=0の場合には、S=0,12,20,21のときに図66の評価指標全てがゼロになった。
【0204】
この実施の形態では、GID配置問題の理想配置位置の固定小数点による計算を、32ビット以下の整数で実現する方法を検討し、res_res法を導出した。丸めバイアスを加算する場合も、しない場合も、シフトビットSのとき、必要ビット数はS+13としてよい。故に、S≦19ならば32ビット整数が使用できることになる。
【0205】
シミュレーションによる評価では、シフトビットS=0,9,13の場合について、round_biasを0から0.99まで0.01刻みで変化させたところ、step1とstep2の各個数、合計個数、step1,step2以外の間隔の個数はゼロであった。理想値であるdoubleによる計算との比較では、シフトビットが小さいほど、answerが異なる場合の数が多くなる。これにより、CDVが最大1まで増加してしまうので、直後にCDVチェックを行った場合には、エラーが発生する可能性がある。しかし、整数計算により求めた規定値(stepの数等)は守られているので、帯域が変わってしまう等の面倒な問題を引き起こすことはないと思われる。
【0206】
以上のように、この実施の形態4によれば、実数間隔算出処理において、固定小数点変数を用いた計算を、32ビット以下の整数で行うことができ、配置処理時間を短くすることができるという効果が得られる。
【0207】
実施の形態5.
図68は、この発明の実施の形態5によるシェーピング機能を実現する装置の構成を示す概略図である。図68において、1はシェーピング回路等の制御を行うCPU、2はATMセル(固定長セル)のセルストリームの入力を受けて各セル間の間隔を調整して出力することで出力トラフィックを制御するシェーピング回路、3は転送されるATMセルのヘッダ情報(VPI、VCI等のあて先情報)を読み取ってATMセルが転送されるべき出力線の出力インタフェース部にATMセルを送出するルーティングスイッチとして与えられるスイッチ部、4は入力線とスイッチ部3との間におけるインタフェース機能を実現する入力インタフェース部、5は出力線とスイッチ部3との間におけるインタフェース機能を実現する出力インタフェース部である。
【0208】
また、スイッチ部3は、複数の入力インタフェース部4から延びる伝送線を集線して各入力インタフェース部から転送されるATMセルを集めてATMセルストリームを構成するATMセル集約部と、ATMセル集約部で構成されたATMセルストリームから順次ATMセルを取り出してヘッダ情報を基に各ATMセルを所望の出力インタフェース部に分配するATMセル分配部とを有して構成されている。
【0209】
シェーピング回路2は、スイッチ部3のATMセル集約部とATMセル分配部との間に配置される。これにより、入力線または出力線におけるATMセルの転送速度が150Mbps程度とすると、スイッチ部における集線度に応じてシェーピング回路にはその何倍もの帯域幅を有する出力テーブルが付設される。
【0210】
また、各コネクションにおけるATMセルの転送速度に拘る最大出力セル帯域(Peak Cell Rate、以下PCRと称する)を設定する際には、1つのコネクション(VCコネクション、VPコネクション等)を対象としてPCRを算出する場合もあれば、幾つかのコネクションの集合として構成されるコネクショングループを単位としてPCRを算出することも考えられる。以下の説明では、このようなコネクショングループ単位でPCRを設定することを前提に本願発明を説明する。
【0211】
コネクションのグループ化に関しては、ATMを用いた通信を設定する際の網のコネクション受付制御部へのユーザからの通信申告等を基にして、同一の帯域幅を有する複数のコネクションをまとめてグループ化すること、帯域幅が所定の関係にあり1つのグループとして適宜まとめることが可能な複数のコネクションをまとめてグループ化すること、その他CPUによる所定の処理に基づいてグループ化が可能である複数のコネクションをまとめてグループ化すること等が考察される。
【0212】
図69は、シェーピング回路に設定される出力テーブル(グループ識別子配置テーブルまたはGIDテーブル)の例を示す図である。10は帯域幅1.2Gbpsを有する出力テーブル、11は出力テーブル10を約0.1Mbps単位に区切って得られた単位テーブル(スロット)、12は出力テーブル10上での番号、すなわちコネクショングループを配置する上での番地(アドレス)である。なお、この例では、1.2Gbpsの出力テーブル10を、約0.1Mbpsの単位テーブル11に区切って11980個の単位テーブル11が生成される。そして、1.2Gbpsとは、ルーティングスイッチによるATMセルの読み取り速度を示すものとして与えられるものである。
【0213】
出力テーブル10内で番号が付されていない単位テーブル11は、単位テーブル11が空であることを示し、単位テーブル11に番号が付されている場合は、その番号のコネクショングループがその単位テーブル11に配置されていることを示す。単位テーブル11に100と付されている場合には、その単位テーブル11に、コネクショングループの100番が配置されていることを示し、またnはコネクショングループ100の理想送出間隔を示すものである。
【0214】
上記の個々の単位テーブル11には、グループ化されたコネクションにて転送される多数のATMセルについての識別情報が適正に収容される。ATMセルの送出は、単位テーブル11毎に逐次的に実施され、1つの単位テーブル11の読み出しからは、1つのATMセルが送出される。そして、出力テーブル10の最終番地まで到達すると、初期番地(すなわち、出力テーブル番号“0”)に復帰して、同様に単位テーブル11毎に次に配置されていたATMセルが送出される。
【0215】
次にシェーピングを行う動作について説明する。
図70は、この発明の実施の形態5によるシェーピング方法を示すフローチャートである。各コネクショングループのPCRの値は、例えばシェーピング回路2を制御するCPU1により決定される場合もあれば、または予め設定されてCPU1に付随するメモリに記憶されている場合もある。
【0216】
まず、処理ST20で、PCR(帯域値)の大きな順(降順)に、各コネクショングループのソートを行う。ソートによる並べ替えが行われると、処理ST21でPCR毎に同一のPCRを有するコネクショングループ数をカウントする。次に、処理ST22で処理対象グループの理想セル送出間隔nを計算する。処理ST23では、処理対象グループと同一のPCRを有するコネクショングループが、処理対象グループを含めて複数存在するか否かを判定し、同一のPCRを有するグループが他に存在しない場合には、処理は分岐して処理ST24に移る。
【0217】
処理ST24では、出力テーブル上で処理対象グループを配置する最初の先頭番地を乱数等の計算方法を用いて算出する。このように算出された先頭配置番地(配置開始位置)について、処理ST25で処理対象グループを配置可能か否かを判定する。他のコネクショングループが既配置の場合には、処理ST24に戻って再度計算を行う。逆に配置可能であれば、処理ST26で出力テーブル上の該当先頭配置番地に配置する。次に、処理ST27では、先頭配置番地を基準として、処理対象グループを許容CDV値以内の範囲で逐次的に配置していく。具体的には、(先頭配置番地)+N*nなる演算を実施して理想配置番地(理想配置位置)を決定し、その理想配置番地に配置可能か否かを判定するとともに、配置不可の場合には、許容CDV値以内の範囲で近傍を検索する。なお、上記の式において、Nは1から処理対象グループについての総配置個数までの自然数を示す。
【0218】
上記の近傍検索に関しては、
1)許容CDV値以内の範囲における検索であること、
2)理想配置番地からのずれをなるべく小さくすること、
3)既に他のコネクショングループが配置済みの単位テーブルにはなるべく隣接しないようにすること、
と表現される3つの条件に基づいて決定するアルゴリズムを採用することができる。例えば、3つの条件をパラメータ表現するとともに各パラメータを重み付けして、パラメータ値の総和を最小化する番地を配置番地とするようなアルゴリズムが考察される。
【0219】
さらに、配置番地の検索に関しては、従来技術のようにATMセルを後方にずらすのみではなく、前方および後方の両方向で空番地の検索が実施される。ここで、単位テーブルの配置において、隣接するのを避けるのが求められるのは、隣接していると、次のコネクショングループの配置(ATMセルの配置)の際に衝突が起こりやすくなるとともに、出力インタフェース部において輻輳が発生しやすくなるからである。そして、処理ST28で全コネクショングループの配置がすべて終了したか否かを判定し、残りがあれば処理ST22に戻って処理を継続し、残りがなければ処理を終了して出力テーブルの設定を完了する。
【0220】
処理ST23で同一のPCRを有するコネクショングループのグループ数が2以上である場合には、処理は処理ST29に分岐して、処理ST24と同様に、出力テーブル上で処理対象グループを配置する先頭配置番地を乱数等の計算方法を用いて算出する。このように算出された先頭配置番地については、処理ST30で配置可能か否かを判定し、既配置の場合には、処理ST29に戻って再度計算を行い、逆に配置可能の場合には、処理ST31で当該先頭配置番地に処理対象グループを配置する。
【0221】
次に、処理ST32では、同一のPCRを有するコネクショングループのグループ数がm個あるとすると、処理ST31において決定した先頭配置番地から理想送出間隔nの間に、各グループの先頭配置番地を均等に設定する。処理ST33では、それぞれのコネクショングループが先頭配置番地に配置可能か否かを判定する。
【0222】
既配置(配置不可)の先頭配置番地がある場合には、それらのコネクショングループの先頭配置番地に関しては、処理ST34において近傍検索による先頭配置番地決定処理を実施する。この近傍検索では、処理ST27のように、許容CDV値以内の範囲における検索であるという条件を課されることはないが、例えば、
1)均等配置番地からのずれをなるべく小さくすること、
2)既に他のコネクショングループが配置済みの単位テーブルにはなるべく隣接しないようにすること、
と表現される2つの条件に基づき決定するようなアルゴリズムを採用することができる。
【0223】
次に、処理ST35では、各コネクショングループ毎に、理想送出間隔nに1から総配置個数までの自然数(N)を順次乗じた数に処理対象グループの先頭配置番地を加算して得た理想配置番地を算出し、その理想配置番地に配置可能であれば配置し、配置不可であれば、処理ST27で実施したのと同様の近傍検索を行い配置番地を決定する。
【0224】
1つの処理対象グループに対して処理が終了すると、処理ST36で同一のPCRを有するすべてのコネクショングループについての配置が完了したか否かが判定され、完了していない場合には、処理ST35に戻って同一のPCRを有する次のコネクショングループに対して処理を行い、完了している場合には、処理ST28に進行する。処理ST28では、全コネクショングループに対して処理が終了したか否かを判定し、残りがあれば処理ST22に戻って処理を継続し、残りがなければ処理を終了して出力テーブル上への配置処理を完了する。
【0225】
以上のように、この実施の形態5によれば、同一のPCRを有する複数のコネクショングループについて、それぞれのコネクショングループの先頭配置番地が均等に設定されるとともに、同一のPCRを有する複数のコネクショングループが先頭配置番地から最終配置番地まで互いに均等に配置されるように構成されているので、出力テーブル上でコネクショングループのより均等な配置が実現されて、ATMセルの衝突や輻輳が防止されるから、許容CDV値に対してより多くのコネクション数を確保することができるという効果が得られる。
【0226】
また、処理対象のコネクションを理想配置番地に配置できない場合には、理想配置番地を中心とした許容CDV値以内の範囲で、前方および後方の空番地を検出して配置番地を決定するように構成したので、許容CDV値内の範囲の空番地を効率的に利用できるから、許容CDV値に対してより多くのコネクション数を確保することができるとともに、ATMセルの衝突が頻繁に生じる場合でも、後方のみの検索のように出力帯域が小さくなることがないという効果が得られる。
【0227】
さらに、許容CDV値内の範囲に、処理対象のコネクションを配置可能な番地が複数ある場合には、隣接する前方および後方の番地が、ともに他のコネクションにより配置済みとなっていない番地を優先的に選択して、当該処理対象のコネクションを配置できるので、隣接する番地へのコネクションの配置ができる限り防止されて、ATMセルの衝突を低減することができるから、許容CDV値に対してより多くのコネクション数を確保することができるという効果が得られる。
【0228】
さらに、すべての出力インタフェース部に送出されるATMセルの出力順を規定できるだけの容量を有する広帯域の出力テーブルを備える構成としたので、出力テーブル上へのコネクショングループの配置において、微修正等を容易に実施できるから、出力テーブル作成の容易化および効率化を図れるという効果が得られる。さらに、このような広帯域の出力テーブルを用意することで、それぞれのコネクショングループが配置される番地の隣接をできる限り防止するので、許容CDV値に対して、より多くのコネクション数を確保することができるという効果が得られる。
【0229】
なお、この実施の形態5では、広帯域な出力テーブルをスイッチ部に付設する構成としたが、このような広帯域な出力テーブルを、それぞれの出力インタフェース部ごとに設ける構成とすることも可能である。
【0230】
実施の形態6.
実施の形態6によるシェーピング方法を実現するための、シェーピング回路およびルーティングスイッチ等からなる装置構成、並びにシェーピングに使用される広帯域の出力テーブルは、図68および図69に示されたものと同じであるので、同一符号を用いて、その詳細な説明をここでは省略する。
【0231】
次に動作について説明する。
図71は、この発明の実施の形態6によるシェーピング方法を示すフローチャートである。まず、処理ST40で、PCRの大きな順(降順)に、各コネクショングループのソートを行い、各コネクショングループをPCRの大きな順に並べ替える。次に、処理ST41で、配置済みコネクショングループのPCRの帯域合計値PCR_SUM(配置済みの帯域合計値)の初期値としてゼロを設定する。
【0232】
そして、帯域値の大きな順に処理対象グループを決定して、特定された処理対象グループについて、第1に処理ST42において、当該処理対象グループの理想セル送出間隔nを算出するとともに失敗回数の初期値としてゼロを設定する。処理ST43では、出力テーブル上で処理対象グループを配置するうえでの先頭配置番地を乱数等の計算方法を用いて算出する。なお、この先頭配置番地は、理想配置番地において配置可能か否かを判定する処理ST44において、理想配置番地の初期値として与えられるものである。
【0233】
処理ST44では算出された理想配置番地に配置可能か否かが判定され、配置可能であれば処理ST45において出力テーブル上の該当番地に配置する。配置不可であれば、処理ST46に進んで配置番地検索処理1を実行する。
【0234】
図72は、配置番地検索処理1の処理内容を示すフローチャートである。配置番地検索処理1においては、まず処理ST101でPCR_SUMが全出力帯域値(この実施の形態6では1.2Gbps)の半分の値(判定値)以下であるか否かを判定する。半分以下である場合には、処理ST102に進行して許容CDV値内の奇数番地のなかで空番地を検索する。また、処理ST101でPCR_SUMが全出力帯域値の半分より大きい場合には、処理ST103に進行して許容CDV値内の偶数番地のなかで空番地を検索する。
【0235】
なお、偶数番地および奇数番地に拘りなくこのような空番地が複数ある場合には、実施の形態5での近傍検索と同様に、例えば、
1)許容CDV値以内の範囲における検索であること、
2)理想配置番地からのずれをなるべく小さくすること、
3)既に他のコネクショングループが配置済みの単位テーブルにはなるべく隣接しないようにすること、
と表現される3つの条件に基づき、最適な配置番地を決定することが考えられる。
【0236】
処理ST102および処理ST103は処理後ともに処理ST104に進行して、処理ST104では出力テーブル上に配置可能か否かを判定する。出力テーブル上に配置可能である場合には、処理ST107に進行して“配置可能”として本処理を終了する。また、出力テーブル上に配置不可である場合には、処理ST105に進行して許容CDV値内の範囲のすべての空番地を検索する。すなわち、処理ST102で許容CDV値内の奇数番地で空番地を検索して配置不可であれば、許容CDV値内の偶数番地で空番地を検索し、処理ST103で、許容CDV値内の偶数番地で空番地を検索して配置不可であれば、許容CDV値内の奇数番地で空番地を検索する。
【0237】
そして、処理ST105の検索結果に基づき、処理ST106で、出力テーブル上に配置可能か否かを判定する。出力テーブル上に配置可能である場合には、処理ST107に進行して“配置可能”として本処理を終了する。また、出力テーブル上に配置不可である場合には、処理ST108に進行して“配置不可”として本処理を終了する。
【0238】
図71に戻って処理ST46が終了すると、処理ST47に進行して配置番地検索処理1の結果が配置可能であるか否かを判定する。配置不可であれば、処理ST48に進行して、当該配置番地が先頭配置番地であるか否かを判定する。そして、処理ST48における判定で、先頭配置番地である場合には、処理ST49に進行して失敗回数を1増分し、その後処理ST43に復帰して先頭配置番地の計算を再び行う。
【0239】
処理ST48における判定で先頭配置番地でない場合には、処理ST50に進行して、失敗回数が許容検索失敗回数未満であるか否かを判定する。許容失敗回数以上である場合には、異常終了(処理ST51)として出力テーブル上への配置処理を終了する。許容失敗回数未満である場合には、処理ST52に進行し、失敗回数を1増分するとともに当該処理対象グループについての既配置番地をクリアして空番地に戻し、その後処理ST43に復帰して先頭配置番地の計算から処理を再び行う。
【0240】
処理ST47で配置可能の場合には、処理ST45に進行して出力テーブル上の該当番地に処理対象グループを配置する。処理ST45の処理が終了すると、処理ST53で処理対象グループの配置がすべて終了したか否かを判定する。未終了である場合には、処理ST54で式{(先頭配置番地)+n*N(N:1から総配置個数までの自然数)}から次の理想配置番地を算出して処理ST44に復帰し、以後同様の処理を繰り返す。
【0241】
処理ST53で当該処理対象グループのすべての配置が完了したと判定された場合には、処理ST55で出力テーブル上に配置された処理対象グループのPCRをPCR_SUMに加算する。そして、処理ST56に進行して同一のPCRを有する未配置のコネクショングループが他にも存在するか否かが判定される。このようなコネクショングループが他にも存在する場合には、処理ST43に復帰して以後処理対象のグループに対して同様の処理を行う。また、このようなコネクショングループが存在しない場合には、処理ST57に進んで全コネクショングループの処理が終了したか否かを判定する。処理が終了していないコネクショングループが存在する場合には、処理ST42に復帰して処理を継続する。
【0242】
以上のように、この実施の形態6によれば、PCR_SUMが出力テーブルの全出力帯域値の半分以下である間において、処理対象のコネクションを理想配置番地に配置できない場合には、理想配置番地を中心としたCDV値以内の範囲で奇数番地(または偶数番地)に優先的に配置するように構成したので、出力テーブル上でコネクショングループのより均等な配置が実現されて、ATMセルの衝突や輻輳が防止されるから、許容CDV値に対してより多くのコネクション数を確保することができるという効果が得られる。
【0243】
また、奇数番地(または偶数番地)を優先的に検索する場合に、理想配置番地を中心とした許容CDV値以内の前方および後方の奇数番地(または偶数番地)を検索するように構成したので、許容CDV値内の範囲の空番地を効率的に利用できるから、許容CDV値に対してより多くのコネクション数を確保することができるとともに、ATMセルの衝突が頻繁に生じる場合でも後方のみの検索のように出力帯域が小さくなることがないという効果が得られる。
【0244】
さらに、PCR_SUMが出力テーブルの全出力帯域値の半分となる時点を基準として、奇数番地における検索から偶数番地における検索へと切り替えることとしたので、空番地の検索を容易に行うことができ、出力テーブルの作成を効率化することができるという効果を奏する。さらに、広帯域な出力テーブルを備える構成としたことについては、実施の形態5と同様の効果が得られる。
【0245】
なお、図72の処理ST101においては、PCR_SUMが全出力帯域値の半分以下であれば、処理ST102で奇数番地を検索することとしたが、偶数番地を検索することとしてもよく、同様の効果が得られる。
【0246】
実施の形態7.
実施の形態7によるシェーピング方法を実現するための、シェーピング回路およびルーティングスイッチ等からなる装置構成、並びにシェーピングに使用される広帯域の出力テーブルは、図68および図69に示されたものと同じであるので、同一符号を用いて、その詳細な説明をここでは省略する。
【0247】
次に動作について説明する。
図73は、この発明の実施の形態7によるシェーピング方法を示すフローチャートである。図73において図71と同一符号はシェーピング方法において同一の処理を示すのでその説明を省略する。実施の形態7は、実施の形態6と比較すると、処理ST44が省略されている点が相違する。
【0248】
すなわち、理想配置番地が算出されても、当該理想配置番地への配置が可能であるか否かの判定を行うことなしに、配置番地検索処理1を実施する。したがって、1つのコネクショングループについて、付与された複数の配置番地には、すべて優先的に奇数番地または偶数番地が与えられることになる。なお、他の動作については実施の形態6と同様であるので、その説明を省略する。
【0249】
以上のように、実施の形態7によれば、実施の形態6による効果とおおよそ同じ効果を得ることができる。相違点としては、PCR_SUMが出力テーブルの全出力帯域値の半分以下である間において、理想配置番地が空番地であるか否かに拘らず、処理対象のコネクショングループが広帯域な出力テーブル上で奇数番地(または偶数番地)にすべて優先的に配置されるので、出力テーブル上で非常に均等な配置が実現されるから、許容CDV値に対してさらに多くのコネクション数を確保することができるという効果が得られる。
【0250】
実施の形態8.
実施の形態8によるシェーピング方法を実現するための、シェーピング回路およびルーティングスイッチ等からなる装置構成、並びにシェーピングに使用される広帯域の出力テーブルは、図68および図69に示されたものと同じであるので、同一符号を用いて、その詳細な説明をここでは省略する。
【0251】
次に動作について説明する。
図74は、この発明の実施の形態8によるシェーピング方法を示すフローチャートである。図74において、図71と同一符号はシェーピング方法において同一の処理を示すので、その説明を省略する。実施の形態8は、実施の形態6と比較すると、処理ST46の配置番地検索処理1を配置番地検索処理2に置き換えた点で相違する。
【0252】
図75は、配置番地検索処理2の処理内容を示すフローチャートである。なお、この実施の形態では説明を簡単にするために、許容CDV値を7として説明する。配置番地検索処理2においては、まず処理ST151で、PCR_SUMが出力テーブルの全出力帯域値(この実施の形態8では1.2Gbps)の半分以下であるか否かを判定する。半分以下であれば、処理ST152でループカウンタ用変数iの初期値として1をセットする。そして、処理ST153でPCR_SUMが{(出力帯域)/(許容CDV値+1)}*i以下であるか否かを判定する。この実施の形態においては、出力帯域は1.2Gbpsであり、許容CDV値が7であるので、上記の式は150Mbps*iとして与えられる。
【0253】
処理ST153において、PCR_SUMが150Mbps*i以上である場合には、処理ST154でiを1増分し、その後処理ST155でiが許容値以下であるか否かを判定する。この許容値としては、PCM_SUMの値が全出力帯域値の半分である状況に対応する例えば(許容CDV値+1)/2として算出される値が用いられ、本実施の形態ではこの許容値として4が用いられる。処理ST155でiが許容値以下である場合には、処理ST153に復帰して処理を継続する。処理ST155でiが許容値以上である場合には、処理ST151に復帰して処理を継続する。
【0254】
また、処理ST153でPCR_SUMが150Mbps*i以下である場合には、処理ST156へ進行する。処理ST156では、iの値に基づき理想配置番地近傍において出力テーブル上の番地を8(許容CDV値+1)(所定数)で割った場合に、特定の剰余を有する奇数番地の検索を行う。
【0255】
例えば、iの値に基づいて次のような検索手順を設けるのが可能である。
1)i=1の場合:番地を8で割った際の余りが5となる番地を検索
2)i=2の場合:番地を8で割った際の余りが1,5となる番地を検索
3)i=3の場合:番地を8で割った際の余りが1,5,7となる番地を検索
4)i=4の場合:番地を8で割った際の余りが1,3,5,7となる番地を検索
以上のように、iの値に応じて、理想配置番地の近傍で制限的に空番地の検索を行う。
【0256】
上記のiの値に基づく検索が終了すると、処理ST157で配置可能か否かの判定を行う。配置可能な場合には、処理ST158で“配置可能”として配置番地検索処理2を終了する。配置不可の場合には、処理ST154へ進行して処理を継続する。
【0257】
処理ST151でPCR_SUMの値が出力テーブルの全出力帯域値の半分より大きい場合には、処理ST159へ進行して、理想配置番地近傍の許容CDV値内の範囲で偶数番地の空番地を検索する。そして、処理ST160で配置可能か否かを判定して、配置可能であれば処理ST158へ進行して“配置可能”として配置番地検索処理2を終了する。
【0258】
また、配置不可であれば、処理ST161へ進行して、理想配置番地近傍の許容CDV値内の範囲で偶数番地または奇数番地に拘らず空番地を検索する。そして、処理ST162で配置可能か否かを判定して、配置可能であれば、処理ST158へ進行して“配置可能”として配置番地検索処理2を終了し、配置不可であれば、処理ST163へ進行して“配置不可”として配置番地検索処理2を終了する。
【0259】
以上のように、この実施の形態8によれば、実施の形態6による効果とおおよそ同じ効果を得ることができる。相違点としては、PCR_SUM値から導かれる出力テーブルの占有率に基づいて、所定数で除した際の剰余が特定の値を有する特定の番地に対してコネクショングループが配置されるように構成したので、出力テーブル上でのコネクショングループの配置が出力テーブルの占有率に応じて適宜制御されて均等に配置されるから、ATMセルの衝突や輻輳が防止され許容CDV値に対してより多くのコネクション数を確保することができるという効果が得られる。
【0260】
なお、図75の処理ST151においては、PCR_SUMが全出力帯域値の半分以下であれば、処理ST156で奇数番地を検索することとしたが、偶数番地を検索することとしてもよく、同様の効果が得られる。
【0261】
実施の形態9.
実施の形態9によるシェーピング方法を実現するための、シェーピング回路およびルーティングスイッチ等からなる装置構成、並びにシェーピングに使用される広帯域の出力テーブルは、図68および図69に示されたものと同じであるので、同一符号を用いて、その詳細な説明をここでは省略する。
【0262】
次に動作について説明する。
図76は、この発明の実施の形態9によるシェーピング方法を示すフローチャートである。図76において、図74と同一符号はシェーピング方法において同一の処理を示すので、その説明を省略する。実施の形態9は、実施の形態8と比較すると、処理ST44が省略されている点が相違する。
【0263】
すなわち、理想配置番地が算出されると、当該理想配置番地への配置が可能であるか否かの判定を行うことなしに、配置番地検索処理2を実施する。したがって、1つのコネクショングループについて、付与された複数の配置番地には、すべて優先的に奇数番地または偶数番地が与えられることになる。なお、他の動作については実施の形態8と同様であるので、その説明を省略する。
【0264】
以上のように、この実施の形態9によれば、実施の形態8による効果とおおよそ同じ効果を得ることができる。相違点としては、理想配置番地が空番地であるか否かに拘らず、広帯域な出力テーブル上で処理対象のグループが奇数番地(または偶数番地)に優先的に配置され、かつPCR_SUM値から導かれる出力テーブルの占有率に基づいて、剰余が特定の値を有する特定の番地に配置されるので、出力テーブル上で非常に均等な配置が実現されるから、許容CDV値に対してさらに多くのコネクション数を確保することができるという効果が得られる。
【0265】
なお、処理ST156における空番地検索においては、奇数番地のなかでの優先順位を剰余が5,1,7,3となる番地の順としたが、これは奇数番地への配置でも配置済みとなる番地の間隔をできる限り広げようとの意図を持って選定されたものであるが、このような順序に限定されるものではなく、他の有効な順序の選定によっても同様の効果を得ることができる。
【0266】
【発明の効果】
以上のように、この発明によれば、理想位置算出処理が、整数間隔算出処理と、実数間隔算出処理と、バイアス付加処理と、間隔混合法変化処理と、群内理想位置均等分散処理と、群内開始位置均等分散処理と、行列座標記憶処理と、開始位置ランダム分散処理と、共通化均等配分処理と、隣接配置禁止処理とを備え、代替位置探索処理が、パターン照合処理と、配置割合依存パターン照合処理と、近傍ランダム探索処理と、全体ランダム探索処理と、全体連続ランダム探索処理とを備えることにより、配置処理時間が短く、理想配置位置に配置できない場合には適切な代替位置を選択し、全体的に均等に分散配置を行うことができるという効果がある。
【0267】
この発明によれば、バイアス付加処理における小数バイアス付加処理と、間隔混合法変化処理におけるバイアス変化処理とバイアス値変化パターン記憶処理を備えることにより、整数化の結果にバリエーションを持たせることができ、理想配置位置に配置できない場合に、再配置の可能性を高めることができるという効果がある。
【0268】
この発明によれば、実数間隔算出処理において、32ビット以下の固定小数点変数を用いて、第1の剰余回答と第2の剰余回答を求めることにより、少ないビット数で、整数だけで処理することにより、配置処理時間を短くすることができるという効果がある。
【0269】
この発明によれば、理想位置算出処理における開始位置ランダム分散処理、ならびに代替位置探索処理における近傍ランダム探索処理、全体ランダム探索処理および全体連続ランダム探索処理において、乱数初期化処理と、周期毎の変数を一次関数で更新する処理と、乱数発生周期制御処理と、周期選択処理と、乱数関数呼出し処理とを備えることにより、理想配置位置に配置できない場合に、再配置の可能性を高めることができるという効果がある。
【0270】
この発明によれば、代替位置探索処理におけるパターン照合処理において、最適配置位置パターン作成処理と、最適配置位置パターン記憶処理と、最適配置位置パターン参照処理とを備えることにより、全体的に均等に配置することができるという効果がある。
【0271】
この発明によれば、代替位置探索処理におけるパターン照合処理および近傍ランダム探索処理において、指標計算処理と、狭まり・借り更新処理と、借り積算処理とを備えることにより、全体的に均等に配置することができるという効果がある。
【0272】
この発明によれば、配置済みの帯域合計値が判定値よりも小さい間では、処理対象のグループを理想配置位置に配置できない場合には、理想配置位置を中心としたCDV値以内の範囲で奇数アドレス(または偶数アドレス)に優先的に配置するように構成したので、母体テーブル上でグループの均等な配置が実現されてATMセルの衝突や輻輳が防止され、許容CDV値に対してより多くのグループ数を確保することができるという効果がある。
【0273】
この発明によれば、配置済みの帯域合計値が判定値よりも小さい間では、理想配置位置が空アドレスであるか否かに拘らず、処理対象のグループが広帯域な母体テーブル上で奇数アドレス(または偶数アドレス)にすべて優先的に配置されるように構成したので、母体テーブル上で非常に均等な配置が実現されるから、許容CDV値に対してさらに多くのグループ数を確保することができるという効果がある。
【0274】
この発明によれば、帯域合計値に対して比較される判定値が母体テーブルの全出力帯域の半分の値として与えられるように構成したので、大部分の奇数アドレスに対する配置が完了した後に、偶数アドレスの検索へと切り替えられるから、空アドレスの検索を容易に行うことができ、母体テーブルの作成を効率化することができるという効果がある。
【0275】
この発明によれば、処理対象のグループを許容CDV値内の範囲の奇数アドレスまたは偶数アドレスに優先的に配置する際に、所定数で除した剰余が特定の数値となるアドレスに処理対象のグループを配置するように構成したので、母体テーブル上でのグループの配置がより制御されてグループが均等に配置されるから、ATMセルの衝突や輻輳が防止されて許容CDV値に対してより多くのグループ数を確保することができるという効果がある。
【図面の簡単な説明】
【図1】 この発明の実施の形態1によるGIDテーブルバンドを示す図である。
【図2】 この発明の実施の形態1によるGIDテーブルリングを示す図である。
【図3】 この発明の実施の形態1による用語を説明する図である。
【図4】 この発明の実施の形態1による帯域割当概念図である。
【図5】 この発明の実施の形態1による入力パターン例を示す図である。
【図6】 この発明の実施の形態1による優先度を説明する図である。
【図7】 この発明の実施の形態1によるグループの階層を示す図である。
【図8】 この発明の実施の形態1によるGID配置処理を示すフローチャートである。
【図9】 この発明の実施の形態1による初期設定を示すフローチャートである。
【図10】 この発明の実施の形態1による同一帯域グループ群配置処理を示すフローチャートである。
【図11】 この発明の実施の形態1によるグループ配置処理を示すフローチャートである。
【図12】 この発明の実施の形態1による個別グループ要素配置処理を示すフローチャートである。
【図13】 この発明の実施の形態1による関数cnt_mix_clc_intを示すフローチャートである。
【図14】 この発明の実施の形態1による計算方式によるCDVと借りの比較を示す図である。
【図15】 この発明の実施の形態1による関数cnt_mix_realを示すフローチャートである。
【図16】 この発明の実施の形態1による整数化法の違いによる差異を示す図である。
【図17】 この発明の実施の形態1による整数化と丸めバイアスを説明する図である。
【図18】 この発明の実施の形態1による行列座標の概念を示す図である。
【図19】 この発明の実施の形態1による行列座標の例を示す図である。
【図20】 この発明の実施の形態1による行列座標の例を示す図である。
【図21】 この発明の実施の形態1によるGIDから行列座標を求める処理を説明する図である。
【図22】 この発明の実施の形態1による関数cnt_matrix_coordinate_setを示すフローチャートである。
【図23】 この発明の実施の形態1による一個のグループの配置を説明する図である。
【図24】 この発明の実施の形態1による同一帯域の二個のグループの配置を説明する図である。
【図25】 この発明の実施の形態1による同一帯域二グループ配置の行列座標を示す図である。
【図26】 この発明の実施の形態1による関数cnt_set_step_infを示すフローチャートである。
【図27】 この発明の実施の形態1による関数cnt_set_size_infを示すフローチャートである。
【図28】 この発明の実施の形態1によるステップとサイズを説明する図である。
【図29】 この発明の実施の形態1によるサイズ情報保持テーブルの例を示す図である。
【図30】 この発明の実施の形態1によるサイズの配置例を示す図である。
【図31】 この発明の実施の形態1による配置開始ステップの均等分散を説明する図である。
【図32】 この発明の実施の形態1による関数cnt_set_start_offsetを示すフローチャートである。
【図33】 この発明の実施の形態1による関数cnt_set_clc_gidを示すフローチャートである。
【図34】 この発明の実施の形態1による関数cnt_chk_gid_availableを示すフローチャートである。
【図35】 この発明の実施の形態1による理想位置に配置できないときの処置を示す図である。
【図36】 この発明の実施の形態1による理想位置と周辺を説明する図である。
【図37】 この発明の実施の形態1によるロムテーブルとパターン照合の仕組みを説明する図である。
【図38】 この発明の実施の形態1による関数cnt_chk_cdv_pat_valueを示すフローチャートである。
【図39】 この発明の実施の形態1による関数cnt_chk_cdv_pat_R1357を示すフローチャートである。
【図40】 この発明の実施の形態1による関数cnt_chk_start_rand_allを示すフローチャートである。
【図41】 この発明の実施の形態1による関数cnt_cnk_cdv_randを示すフローチャートである。
【図42】 この発明の実施の形態1によるCDV計算アルゴリズムを示すフローチャートである。
【図43】 この発明の実施の形態1によるCDV計算の仕組みを説明する図である。
【図44】 この発明の実施の形態1による許容CDV値の増加を説明する図である。
【図45】 この発明の実施の形態1によるcnt_set_allow_cdvを示すフローチャートである。
【図46】 この発明の実施の形態1による乱数テーブル保持内容を示す図である。
【図47】 この発明の実施の形態1による関数cnt_randを示すフローチャートである。
【図48】 この発明の実施の形態1による関数cnt_srandを示すフローチャートである。
【図49】 この発明の実施の形態1による乱数とCの組込み乱数の比較を示す図である。
【図50】 この発明の実施の形態1による乱数を11980回呼び出した際にちょうど一回発生した数を示す図である。
【図51】 この発明の実施の形態1による関数cnt_log2を示すフローチャートである。
【図52】 この発明の実施の形態2によるパラメータ規定を示す図である。
【図53】 この発明の実施の形態2による掛算先行の場合の倍精度による配置位置計算法を示すフローチャートである。
【図54】 この発明の実施の形態2による割算先行の場合の倍精度による配置位置計算法を示すフローチャートである。
【図55】 この発明の実施の形態3による固定小数点表示による計算を説明する図である。
【図56】 この発明の実施の形態3による掛算先行の場合の固定小数点表示による配置位置計算法を示すフローチャートである。
【図57】 この発明の実施の形態3による掛算先行の場合の固定小数点計算の必要ビット数を説明する図である。
【図58】 この発明の実施の形態3による割算先行で整数使用の場合の固定小数点表示による配置位置計算法を示すフローチャートである。
【図59】 この発明の実施の形態3による割算先行で実数使用の場合の固定小数点表示による配置位置計算法を示すフローチャートである。
【図60】 この発明の実施の形態4によるres_res法を示すフローチャートである。
【図61】 この発明の実施の形態4によるパラメータを説明する図である。
【図62】 この発明の実施の形態4による各変数の値の最大値/上限値と帯域の関係を示す図である。
【図63】 この発明の実施の形態4によるres_res法を示すフローチャートである。
【図64】 この発明の実施の形態4による丸め誤差の最大値とround_bias_intの関係を示す図である。
【図65】 この発明の実施の形態4による丸め誤差を加算した場合のres_ans_sの最大値を示す図である。
【図66】 この発明の実施の形態4による評価指標と結果を示す図である。
【図67】 この発明の実施の形態4によるdoubleとres_res法のanswerが異なる場合の数を示す図である。
【図68】 この発明の実施の形態5によるシェーピング方法を実現する構成を示す概略図である。
【図69】 この発明の実施の形態5による出力テーブルの一例を示す図である。
【図70】 この発明の実施の形態5によるシェーピング方法を示すフローチャートである。
【図71】 この発明の実施の形態6によるシェーピング方法を示すフローチャートである。
【図72】 この発明の実施の形態6による配置番地検索処理1の処理内容を示すフローチャートである。
【図73】 この発明の実施の形態7によるシェーピング方法を示すフローチャートである。
【図74】 この発明の実施の形態8によるシェーピング方法を示すフローチャートである。
【図75】 この発明の実施の形態8による配置番地検索処理2の処理内容を示すフローチャートである。
【図76】 この発明の実施の形態9によるシェーピング方法を示すフローチャートである。
【図77】 従来のシェーピング方法を説明する図である。
【図78】 従来のシェーピング方法のGID配置手順を示すフローチャートである。
【符号の説明】
1 CPU、2 シェーピング回路、3 スイッチ部、4 入力インタフェース部、5 出力インタフェース部、10 出力テーブル(グループ識別子配置テーブル)、11 単位テーブル(スロット)。
Claims (10)
- 一個または複数個のグループの、グループ毎に定められた個数の要素を、アドレスを有する複数個のスロットから構成される母体テーブルに分散配置するシェーピング方法において、
上記グループ毎の理想配置スロット位置(以下、スロット位置を位置と称す)を算出する理想位置算出処理と、
算出した上記理想配置位置にグループ要素を、帯域が同一の上記グループをまとめて、帯域が大きく、理想位置からのずれの許容度を示す優先度が高い上記グループ順に配置するグループ要素配置処理と、
上記理想配置位置に配置できない場合に代替のスロットを探索する代替位置探索処理とを備え、
上記理想位置算出処理が、
定められた個数の上記グループを上記母体テーブルへ均等配置する際の、二種類の整数配置間隔を求める整数間隔算出処理と、
定められた個数のグループを上記母体テーブルへ均等配置する際の上記理想配置位置を、実数計算により求めて整数化する実数間隔算出処理と、
上記実数間隔算出処理において、実数計算により求めた値を整数化する際に、バイアスを加算してから整数化演算処理を行うバイアス付加処理と、
上記二種類の整数配置間隔の選択順番を変化させる間隔混合法変化処理と、
同一帯域グループ内の上記グループ毎の理想配置位置を、上記整数配置間隔内に均等分散する群内理想位置均等分散処理と、
上記同一帯域グループの上記グループ毎の配置開始位置を、上記母体テーブルに均等分散する群内開始位置均等分散処理と、
上記実数間隔算出処理および上記群内理想位置均等分散処理により算出した理想配置位置と、上記群内開始位置均等分散処理により算出した配分開始位置を行列座標にして記憶する行列座標記憶処理と、
帯域の異なる上記グループの配置開始位置を、上記母体テーブル内にランダム分散する開始位置ランダム分散処理と、
同一帯域グループ内のグループ要素の均等配分を、上記整数間隔算出処理および上記実数間隔算出処理を用いて行う共通化均等配分処理と、
同一グループの要素の隣接スロットへの配置を禁止する隣接配置禁止処理とを備え、
上記代替位置探索処理が、
上記理想配置位置の周辺のスロット配置状況を観察し、あらかじめ記憶させておいた最適配置位置パターンと照合し、最適配置位置を求めるパターン照合処理と、
上記母体テーブル内の配置済スロットの割合に依存して、上記最適配置位置パターンを変化させる配置割合依存パターン照合処理と、
上記理想配置位置の近傍スロットをランダムに探索する近傍ランダム探索処理と、
上記グループの配置開始位置を上記母体テーブル内でランダムに探索する全体ランダム探索処理と、
同一帯域グループ群の配置開始位置基準点を、上記母体テーブル内で、所定の連続スロットの空をランダムに探索する全体連続ランダム探索処理とを
備えたことを特徴とするシェーピング方法。 - 理想位置算出処理におけるバイアス付加処理において、付加するバイアス値をゼロ以上1未満とする小数バイアス付加処理と、
上記理想位置算出処理における間隔混合法変化処理において、上記小数バイアス付加処理でバイアス値を変化させ、グループ要素の再設定を行うバイアス変化処理と、
上記バイアス変化処理において、変化させるバイアス値の順番をあらかじめ定めて、ゼロ以上1未満の値をとるバイアス値に、バイアス値の種類の総数を乗じることによって整数値として、この整数値の数列とバイアス値の種類総数を記憶させておくバイアス値変化パターン記憶処理とを
備えたことを特徴とする請求項1記載のシェーピング方法。 - 理想位置算出処理における実数間隔算出処理において、32ビット以下の整数による固定小数点変数を用いて、
母数を除数で除算し、第1の商と第1の剰余を求める第1の処理と、
上記第1の剰余を所定のビット数だけ左シフトする(所定のビット数回だけ2を乗ずる)第2の処理と、
上記左シフトされた第1の剰余を上記除数で除算し、第2の商と第2の剰余を求める第3の処理と、
上記第2の商に、1以上で上記除数以下の第1の整数を乗算し、第1の変数を求める第4の処理と、
上記第2の剰余に上記第1の整数を乗算し、上記除数で除算し、第2の変数を求める第5の処理と、
上記第1の変数と上記第2の変数を加算し、第1の剰余分回答を求める第6の処理と、
上記第1の剰余分回答を、上記所定のビット数だけ右シフトし(所定のビット数回だけ2で除算し)、第2の剰余分回答を求める第7の処理と、
上記第1の商に上記第1の整数を乗算し、商分回答を求める第8の処理と、
上記第2の剰余分回答と上記商分回答を加算することにより、回答を求める第9の処理と、
上記第1の整数を、1以上から上記除数以下の範囲で変化させ、上記第4の処理から上記第9の処理を繰り返すループ処理とを
備えたことを特徴とする請求項1記載のシェーピング方法。 - 理想位置算出処理における開始位置ランダム分散処理、ならびに代替位置探索処理における近傍ランダム探索処理、全体ランダム探索処理および全体連続ランダム探索処理において、
2のべき乗値で表される乱数の周期を引数とし、周期毎に異なる変数を設け、周期毎の変数を初期化する乱数初期化処理と、
周期毎の変数を一次関数で更新する処理と、
一周期間の乱数発生時にゼロと最大目的地の間の各整数を1回または2回ランダムに発生させる乱数発生周期制御処理と、
上記最大目的地を越えない最小の2のべき乗の周期を選択する周期選択処理と、
上記選択した2のべき乗の周期の乱数関数を呼出す乱数関数呼出し処理とを
備えたことを特徴とする請求項1記載のシェーピング方法。 - 代替位置探索処理におけるパターン照合処理において、
あらかじめ行っておく最適配置位置パターン作成処理と、
あらかじめ行っておく最適配置位置パターン記憶処理と、
パターン照合時に行う最適配置位置パターン参照処理とを備え、
上記最適配置位置パターン作成処理が、
同程度に適した空位置があるときは全てを配置候補とする処理と、
新規配置により、配置済の連続が発生しない空位置がある場合には、上記空位置を配置候補とする処理と、
配置済の連続が発生しない空位置がない場合には、配置済の連続数が最小となる位置を配置候補とする処理とを備え、
上記最適配置位置パターン記憶処理において記憶するパターンが、
理想配置位置周辺のスロットの配置状況を、配置済スロットを1、空スロットを0として1と0の連続数列で表し、これを二進数列とみなして十進数に換算した配置状況パターンと、
最適配置位置パターンにおける配置候補数と、
最適配置位置パターンにおける配置候補位置を、理想配置位置との相対位置で表して羅列した配置候補位置とを備え、
上記最適配置位置パターン参照処理が、
現在の理想配置位置周辺のスロットの配置状況を調査して配置状況パターンを作成する処理と、
上記最適配置位置パターン記憶処理において記憶されたパターンを参照する処理と、
上記最適配置位置パターン記憶処理において記憶された配置候補数が複数あるときは、乱数により配置候補位置の一つを選択する処理とを
備えたことを特徴とする請求項1記載のシェーピング方法。 - 代替位置探索処理におけるパターン照合処理および近傍ランダム探索処理において、
理想位置に配置できない場合に実際に配置された代替位置が、理想位置より母体テーブルにおいて右側(スロットアドレスの大きい側)に配置された場合のスロット数のずれ(代替位置と理想位置のアドレスの差)を表す変数である借りを、算出した理想配置位置アドレスに加算し、代替位置アドレスを減算して指標を求める指標計算処理と、
上記指標が正またはゼロの場合には、代替位置が、理想位置より母体テーブルにおいて左側(スロットアドレスの小さい側)に配置された場合のスロット数のずれ(代替位置と理想位置のアドレスの差)を表す狭まりを指標とし、かつ新規借りをゼロとし、上記指標が負の場合には上記狭まりをゼロとし、上記新規借りを上記指標の絶対値とする狭まり・借り更新処理と、
上記新規借りをこれまでの借りの積算値に加算する借り積算処理とを
備えたことを特徴とする請求項1記載のシェーピング方法。 - 一個または複数個のコネクションの、コネクション毎に定められた出力帯域に基づいて伝送される固定長セルの送出間隔を調整するシェーピング方法において、
コネクション、または幾つかのコネクションの集合として構成されるコネクショングループ(以下、まとめてグループと称す)に対して要求される帯域値の大きな順にグループを並び替える処理と、
帯域値順に、処理対象のグループに対して固定長セルを送出する際の理想送出間隔を算出する処理と、
それぞれがアドレスを有する複数のスロットから構成されて固定長セルの出力順を規定する母体テーブル上に、処理対象のグループについて配置開始位置を含めた全ての配置位置について理想配置位置を順次決定する処理と、
上記理想配置位置に処理対象のグループを配置できるか否かを判定する処理と、
配置可能である場合には、上記理想配置位置に処理対象のグループを配置する処理と、
配置不可である場合には、配置済みの帯域合計値が判定値よりも小さい時には上記理想配置位置を中心とした許容CDV値内の範囲の奇数アドレス(または偶数アドレス)に優先的に処理対象のグループを配置し、配置済みの帯域合計値が判定値よりも大きい時には許容CDV値内の範囲の任意のアドレスに処理対象のグループを配置する処理とを
備えたことを特徴とするシェーピング方法。 - 一個または複数個のコネクションの、コネクション毎に定められた出力帯域に基づいて伝送される固定長セルの送出間隔を調整するシェーピング方法において、
コネクション、または幾つかのコネクションの集合として構成されるコネクショングループ(以下、まとめてグループと称す)に対して要求される帯域値の大きな順にグループを並び替える処理と、
帯域値順に、処理対象のグループに対して固定長セルを送出する際の理想送出間隔を算出する処理と、
それぞれがアドレスを有する複数のスロットから構成されて固定長セルの出力順を規定する出力テーブル上に、処理対象のグループについて配置開始位置を含めた全ての配置位置について理想配置位置を順次決定する処理と、
配置済みの帯域合計値が判定値よりも小さい場合には、理想配置位置を中心とした許容CDV値内の範囲の奇数アドレス(または偶数アドレス)に優先的に処理対象のグループを配置し、配置済みの帯域合計値が判定値よりも大きい場合には、理想配置位置を中心とした許容CDV値内の範囲の任意のアドレスに処理対象のグループを配置する処理とを
備えたことを特徴とするシェーピング方法。 - 帯域合計値に対して比較される判定値が、母体テーブルの全出力帯域の半分の値として与えられることを特徴とする請求項7または請求項8記載のシェーピング方法。
- 処理対象のグループを許容CDV値内の範囲の奇数アドレス(または偶数アドレス)に優先的に配置する際に、所定数で除した剰余が特定の数値となるアドレスに処理対象のグループを配置することを特徴とする請求項7または請求項8記載のシェーピング方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP22875699A JP3691297B2 (ja) | 1999-08-12 | 1999-08-12 | シェーピング方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP22875699A JP3691297B2 (ja) | 1999-08-12 | 1999-08-12 | シェーピング方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2001053747A JP2001053747A (ja) | 2001-02-23 |
JP3691297B2 true JP3691297B2 (ja) | 2005-09-07 |
Family
ID=16881345
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP22875699A Expired - Fee Related JP3691297B2 (ja) | 1999-08-12 | 1999-08-12 | シェーピング方法 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP3691297B2 (ja) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
FI20045222A0 (fi) * | 2004-06-15 | 2004-06-15 | Nokia Corp | Verkkolaitteet ja liikenteenmuokkausmenetelmät |
JP5304496B2 (ja) * | 2009-07-09 | 2013-10-02 | 株式会社デンソー | 通信ノード |
-
1999
- 1999-08-12 JP JP22875699A patent/JP3691297B2/ja not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
JP2001053747A (ja) | 2001-02-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110287245B (zh) | 用于分布式etl任务调度执行的方法及系统 | |
Chazelle | The soft heap: an approximate priority queue with optimal error rate | |
US20030048805A1 (en) | Dynamic bandwidth allocation circuit, dynamic bandwidth allocation method, dynamic bandwidth allocation program and recording medium | |
WO1997042737A1 (en) | Asynchronous transfer mode cell processing system with multiple cell source multiplexing | |
US20010018731A1 (en) | Memory management device and memory management method thereof | |
JPH1023040A (ja) | 可変ビットレートスケジューラ | |
Böckenhauer et al. | Online algorithms with advice: The tape model | |
KR101283524B1 (ko) | 조정을 실행하기 위한 방법 및 장치 | |
US6976021B2 (en) | Method, system, and computer program product for managing a re-usable resource with linked list groups | |
US6181678B1 (en) | Binary-tree data element sorting device and ATM spacer comprising such a device | |
WO1997042736A1 (en) | Asynchronous transfer mode cell processing system with load multiple instruction and memory write-back | |
JP3691297B2 (ja) | シェーピング方法 | |
CN109977373B (zh) | 标识号分配方法、标识号回收方法及装置 | |
Halldórsson et al. | Online independent sets | |
JPH09179743A (ja) | エレメントをソートする方法および装置 | |
US9619151B2 (en) | Region management apparatus, region management method, and program | |
US6442136B1 (en) | Traffic shaping device for ATM communication network | |
US5794025A (en) | Method and device for performing modulo-based arithmetic operations in an asynchronous transfer mode cell processing system | |
CN113626432A (zh) | 一种支持任意Key值的自适应基数树的改进方法 | |
JP3435244B2 (ja) | 通信制御装置 | |
JP3863421B2 (ja) | データ転送組み合わせ決定方法および組み合わせ決定回路 | |
CN112256420A (zh) | 任务分配方法、装置及电子设备 | |
Böckenhauer et al. | Online algorithms with advice | |
CN111813540B (zh) | 一种基于图划分的tcam的分配方法 | |
WO1997042577A1 (en) | Asynchronous transfer mode cell processing system with cell buffer space gathering |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20041025 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20041109 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20050106 |
|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20050517 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20050615 |
|
R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20080624 Year of fee payment: 3 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20090624 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20100624 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20100624 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110624 Year of fee payment: 6 |
|
LAPS | Cancellation because of no payment of annual fees |