(57)【特許請求の範囲】
【請求項１】
外部から受信したＳＩＰの受信信号を処理する信号処理装置において、
複数データを並列的に処理するＳＩＭＤ型の第１のプロセッサと、
上記第１のプロセッサで実行される処理以外の処理を実行する第２のプロセッサと、
受信信号を蓄積する蓄積手段と、
上記蓄積手段が蓄積した受信信号の数が所定数に達した場合、又は、所定の期間が経過した場合に、上記蓄積手段が蓄積した受信信号を処理する信号処理スレッドを複数起動し、それぞれの信号処理スレッドに、上記蓄積手段が蓄積した受信信号を割り当て、それぞれの信号処理スレッドを構成する各工程のサブスレッドのうち、一部又は全部の工程のサブスレッドについて、複数の信号処理スレッド間で上記第１のプロセッサを用いて並列的に処理させるスレッド制御手段とを有し、
上記信号処理スレッドを構成するサブスレッドには、
受信信号からテキスト形式の受信信号テキストデータを得る受信工程のサブスレッドと、
受信信号について一連の処理の実行を制御する実行制御工程のサブスレッドと、
上記受信工程のサブスレッドが得た受信信号テキストデータに対して字句解析処理および構文解析処理を実行した結果を後段のサブスレッドで処理可能な受信信号データとして得る分析工程のサブスレッドと、
上記分析工程のサブスレッドで得られた受信信号データに応じたＳＩＰのサービス処理を実行して当該サービス処理に伴って送信する送信信号データを得る処理工程のサブスレッドと、
上記処理工程のサブスレッドで得られた送信信号データをテキスト形式とする信号組立処理を実行して送信信号テキストデータを得る組立工程のサブスレッドと、
上記組立工程のサブスレッドで得られた送信信号テキストデータを送信処理する送信工程のサブスレッドが含まれており、
上記スレッド制御手段は、上記信号処理スレッドを構成するサブスレッドのうち、上記分析工程のサブスレッド、及び上記組立工程のサブスレッドについては上記第１のプロセッサで実行させ、それ以外のサブスレッドについては上記第２のプロセッサで実行させること
を特徴とする信号処理装置。
【請求項２】
上記スレッド制御手段は、上記第１のプロセッサを用いて実行する分析工程のサブスレッド及び組立工程のサブスレッドについては複数一斉に起動し、上記第２のプロセッサを用いて実行するサブスレッドについては当該サブスレッドの前段のサブスレッドの処理が終了次第起動することを特徴とする請求項１に記載の信号処理装置。
【請求項３】
上記分析工程のサブスレッドにより行われる字句解析処理では、受信信号テキストデータの先頭から１文字ずつ入力し、１文字毎に入力された１文字をインデックスとして次の状態と出力内容を決定可能な字句解析処理テーブルを用いて、次の状態と出力を決定することを特徴とする請求項１又は２に記載の信号処理装置。
【請求項４】
上記スレッド制御手段は、処理対象の受信信号テキストデータのサイズに応じた順序で上記分析工程のサブスレッドを割当てることを特徴とする請求項３に記載の信号処理装置。
【請求項５】
上記分析工程のサブスレッドにより行われる構文解析処理では、字句解析処理結果の先頭から字句を１つずつ入力し、入力される１つの字句をインデックスとしてスタックに入力又は出力する値を決定可能な構文解析処理テーブルを用いて、スタックに入力又は出力する値を決定することを特徴とする請求項１〜４のいずれかに記載の信号処理装置。
【請求項６】
上記スレッド制御手段は、同一種別の受信信号に係る受信信号テキストデータを処理する上記分析工程のサブスレッドを複数同時に起動する起動処理、同一のＳＩＰサーバから受信した受信信号に係る受信信号テキストデータを処理する上記分析工程のサブスレッドを複数同時に起動する起動処理、又は、ＳＩＰ端末群から受信した同一種別の受信信号に係る受信信号テキストデータを処理する上記分析工程のサブスレッドを複数同時に起動する起動処理のいずれかの起動処理を行うことを特徴とする請求項１〜５のいずれかに記載の信号処理装置。
【請求項７】
上記スレッド制御手段は、同一種別の信号に係る送信信号データを処理する上記組立工程のサブスレッドを複数同時に起動する起動処理、同一のＳＩＰサーバに送信する同一種別の信号に係る送信信号データを処理する上記組立工程のサブスレッドを複数同時に起動する起動処理、ＳＩＰ端末群へ送信する同一種別の信号に係る送信信号データを処理する上記組立工程のサブスレッドを複数同時に起動する起動処理、又は、同一のサービス処理に係る送信信号データを処理する上記組立工程のサブスレッドを複数同時に起動する起動処理のいずれかの起動処理を行うことを特徴とする請求項１〜６のいずれかに記載の信号処理装置。
【請求項８】
外部から受信したＳＩＰの受信信号を処理する信号処理装置に搭載された、複数データを並列的に処理するＭＩＭＤ型の第１のプロセッサと上記第１のプロセッサで実行される処理以外の処理を実行する第２のプロセッサとを備えるコンピュータを、
受信信号を蓄積する蓄積手段と、
上記蓄積手段が蓄積した受信信号の数が所定数に達した場合、又は、所定の期間が経過した場合に、上記蓄積手段が蓄積した受信信号を処理する信号処理スレッドを複数起動し、それぞれの信号処理スレッドに、上記蓄積手段が蓄積した受信信号を割り当て、それぞれの信号処理スレッドを構成する各工程のサブスレッドのうち、一部又は全部の工程のサブスレッドについて、複数の信号処理スレッド間で上記第１のプロセッサを用いて並列的に処理させるスレッド制御手段として機能させ、
上記信号処理スレッドを構成するサブスレッドには、
受信信号からテキスト形式の受信信号テキストデータを得る受信工程のサブスレッドと、
受信信号について一連の処理の実行を制御する実行制御工程のサブスレッドと、
上記受信工程のサブスレッドが得た受信信号テキストデータに対して字句解析処理および構文解析処理を実行した結果を後段のサブスレッドで処理可能な受信信号データとして得る分析工程のサブスレッドと、
上記分析工程のサブスレッドで得られた受信信号データに応じたＳＩＰのサービス処理を実行して当該サービス処理に伴って送信する送信信号データを得る処理工程のサブスレッドと、
上記処理工程のサブスレッドで得られた送信信号データをテキスト形式とする信号組立処理を実行して送信信号テキストデータを得る組立工程のサブスレッドと、
上記組立工程のサブスレッドで得られた送信信号テキストデータを送信処理する送信工程のサブスレッドが含まれており、
上記スレッド制御手段は、上記信号処理スレッドを構成するサブスレッドのうち、上記分析工程のサブスレッド、及び組立工程のサブスレッドについては上記第１のプロセッサで実行させ、それ以外のサブスレッドについては上記第２のプロセッサで実行させること
を特徴とする信号処理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、信号処理装置及びプログラムに関し、例えば、ＳＩＰ（Ｓｅｓｓｉｏｎ  Ｉｎｉｔｉａｔｉｏｎ  Ｐｒｏｔｏｃｏｌ）信号の処理に適用し得る。
【背景技術】
【０００２】
従来、ＳＩＰ信号を処理する信号処理装置（ＳＩＰサーバ）としては、特許文献１のＳＩＰサーバがある。
【０００３】
特許文献１に記載のＳＩＰサーバ等、従来のＳＩＰサーバでは、一般的に、図５に示すように、同時に複数のＳＩＰ端末とＳＩＰ信号を送受信する場合と、ＳＩＰサーバ間で複数のＳＩＰ信号を同時に送受信する場合がある。
【０００４】
このため、従来のＳＩＰサーバのプログラムでは、複数のＳＩＰ信号を処理するスレッドを起動して、同時に複数のＳＩＰ信号の送受信を処理できる構造になっているのが一般的である。
【０００５】
従来のＳＩＰサーバのプログラムは、例えば、ひとつの受信スレッドと、複数の実行スレッドで構成され、各スレッドが並列に動作するように構成されている。
【０００６】
受信スレッドがひとつの信号を受信して実行スレッドを起動するのに要する時間は、ひとつの実行スレッドが動作する時間に比較すると無視できる程度の時間しかかからない。
【０００７】
このため、複数の信号を続けて受信すると、複数の実行スレッドが起動された状態となり、起動された複数スレッドが、各受信信号に対する処理を並列に実行していく。
【０００８】
ただし、ひとつのＣＰＵが物理的に並列に実行できるスレッド数は、通常１桁程度の数であり、あまり大きな数ではない。
【０００９】
従って、同時起動するスレッド数を増加させていくと、個々のスレッドの処理がどんどん遅くなっていくことになり、一定時間内に処理できる実行スレッド数には上限がある。
【００１０】
従来、それに対する解決策としては、例えば、ＳＩＰサーバ上である数以上の実行スレッドを起動しないように制限する場合もある。
【先行技術文献】
【特許文献】
【００１１】
【特許文献１】特開２００９−１２４５７２号公報
【発明の概要】
【発明が解決しようとする課題】
【００１２】
しかしながら、ＳＩＰサーバ等の信号処理装置では、サービスを提供する上で本質的な処理である、受信信号に応じた処理を行うサービス処理よりも、受信信号の内容の分析処理（字句解析、構文解析等）や、送信信号の組み立て処理の方の方がより時間を要する場合がある。
【００１３】
また、上述の分析処理や組み立て処理は、途中で入出力等のためのブロックが発生せず、ＣＰＵを使用し続けるＣＰＵバウンドの処理になっている。それにより、ＳＩＰサーバ等の信号処理装置の処理能力は、上述の分析処理や組み立て処理がボトルネックとなり、処理能力向上が難しい構造になっている。
【００１４】
そのため、受信した信号を効率的に処理することができる信号処理装置及びプログラムが望まれている。
【課題を解決するための手段】
【００１５】
第１の本発明は、外部から受信したＳＩＰの受信信号を処理する信号処理装置において、（１）複数データを並列的に処理するＳＩＭＤ型の第１のプロセッサと、（２）上記第１のプロセッサで実行される処理以外の処理を実行する第２のプロセッサと、（３）受信信号を蓄積する蓄積手段と、（４）上記蓄積手段が蓄積した受信信号の数が所定数に達した場合、又は、所定の期間が経過した場合に、上記蓄積手段が蓄積した受信信号を処理する信号処理スレッドを複数起動し、それぞれの信号処理スレッドに、上記蓄積手段が蓄積した受信信号を割り当て、それぞれの信号処理スレッドを構成する各工程のサブスレッドのうち、一部又は全部の工程のサブスレッドについて、複数の信号処理スレッド間で上記第１のプロセッサを用いて並列的に処理させるスレッド制御手段とを有し、（５）上記信号処理スレッドを構成するサブスレッドには、（５−１）受信信号からテキスト形式の受信信号テキストデータを得る受信工程のサブスレッドと、（５−２）受信信号について一連の処理の実行を制御する実行制御工程のサブスレッドと、（５−３）上記受信工程のサブスレッドが得た受信信号テキストデータに対して字句解析処理および構文解析処理を実行した結果を後段のサブスレッドで処理可能な受信信号データとして得る分析工程のサブスレッドと、（５−４）上記分析工程のサブスレッドで得られた受信信号データに応じたＳＩＰのサービス処理を実行して当該サービス処理に伴って送信する送信信号データを得る処理工程のサブスレッドと、（５−５）上記処理工程のサブスレッドで得られた送信信号データをテキスト形式とする信号組立処理を実行して送信信号テキストデータを得る組立工程のサブスレッドと、（５−６）上記組立工程のサブスレッドで得られた送信信号テキストデータを送信処理する送信工程のサブスレッドが含まれており、（６）上記スレッド制御手段は、上記信号処理スレッドを構成するサブスレッドのうち、上記分析工程のサブスレッド、及び上記組立工程のサブスレッドについては上記第１のプロセッサで実行させ、それ以外のサブスレッドについては上記第２のプロセッサで実行させることを特徴とする。
【００１６】
第２の本発明の信号処理プログラムは、（１）外部から受信したＳＩＰの受信信号を処理する信号処理装置に搭載された、複数データを並列的に処理するＭＩＭＤ型の第１のプロセッサと上記第１のプロセッサで実行される処理以外の処理を実行する第２のプロセッサとを備えるコンピュータを、（２）受信信号を蓄積する蓄積手段と、（３）上記蓄積手段が蓄積した受信信号の数が所定数に達した場合、又は、所定の期間が経過した場合に、上記蓄積手段が蓄積した受信信号を処理する信号処理スレッドを複数起動し、それぞれの信号処理スレッドに、上記蓄積手段が蓄積した受信信号を割り当て、それぞれの信号処理スレッドを構成する各工程のサブスレッドのうち、一部又は全部の工程のサブスレッドについて、複数の信号処理スレッド間で上記第１のプロセッサを用いて並列的に処理させるスレッド制御手段として機能させ、（４）上記信号処理スレッドを構成するサブスレッドには、（５−１）受信信号からテキスト形式の受信信号テキストデータを得る受信工程のサブスレッドと、（５−２）受信信号について一連の処理の実行を制御する実行制御工程のサブスレッドと、（５−３）上記受信工程のサブスレッドが得た受信信号テキストデータに対して字句解析処理および構文解析処理を実行した結果を後段のサブスレッドで処理可能な受信信号データとして得る分析工程のサブスレッドと、（５−４）上記分析工程のサブスレッドで得られた受信信号データに応じたＳＩＰのサービス処理を実行して当該サービス処理に伴って送信する送信信号データを得る処理工程のサブスレッドと、（５−５）上記処理工程のサブスレッドで得られた送信信号データをテキスト形式とする信号組立処理を実行して送信信号テキストデータを得る組立工程のサブスレッドと、（５−６）上記組立工程のサブスレッドで得られた送信信号テキストデータを送信処理する送信工程のサブスレッドが含まれており、（６）上記スレッド制御手段は、上記信号処理スレッドを構成するサブスレッドのうち、上記分析工程のサブスレッド、及び組立工程のサブスレッドについては上記第１のプロセッサで実行させ、それ以外のサブスレッドについては上記第２のプロセッサで実行させることを特徴とする。
【発明の効果】
【００１７】
本発明によれば、信号処理装置において、受信した信号を効率的に処理することができる。
【図面の簡単な説明】
【００１８】
【図１】実施形態に係るＳＩＰサーバの機能的構成について示したブロック図である。
【図２】実施形態に係るＳＩＰサーバにおける信号受信処理について示したフローチャートである。
【図３】実施形態に係るＳＩＰサーバにおける実行制御処理について示したフローチャート（１）である。
【図４】実施形態に係るＳＩＰサーバにおける実行制御処理について示したフローチャート（２）である。
【図５】従来のＳＩＰサーバ及びＳＩＰ端末間の接続構成について示したブロック図である。
【発明を実施するための形態】
【００１９】
（Ａ）主たる実施形態
以下、本発明による信号処理装置及びプログラムの一実施形態を、図面を参照しながら詳述する。この実施形態では、本発明の信号処理装置をＳＩＰサーバに適用した例について説明している。
【００２０】
（Ａ−１）実施形態の構成
図１は、この実施形態のＳＩＰサーバ１の機能的構成について示したブロック図である。
【００２１】
ＳＩＰサーバ１は、送信元（他のＳＩＰサーバやＳＩＰ端末等）から受信信号ＳＲを受信し、受信信号ＳＲの内容に基づいて所定の処理を行い、処理に応じた送信信号ＳＳを、その処理に応じた送信先（他のＳＩＰサーバやＳＩＰ端末等）へ送信するものである。なお、送信信号ＳＳの送信は、受信信号ＳＲの処理内容から必要に応じて行われるものであり、処理内容によっては送信されない場合がある。ＳＩＰサーバ１としては、例えば、ＳＩＰ端末間の呼制御等のシグナリングを行う装置が挙げられる。
【００２２】
ＳＩＰサーバ１は、例えば、ＧＰＵ（Ｇｒａｐｈｉｃｓ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）のようなＳＩＭＤ（Ｓｉｎｇｌｅ  Ｉｎｓｔｒｕｃｔｉｏｎ  Ｍｕｌｔｉｐｌｅ  Ｄａｔａ）型のプロセッサと、通常のＣＰＵとを備える情報処理装置に、実施形態の信号処理プログラムをインストールすることにより構築するようにしてもよく、その場合でも、その機能的構成については、図１のように示すことができる。
【００２３】
ＳＩＭＤ型のプロセッサでは、１回の命令に対して同時に複数のデータを処理することで、通常のＣＰＵに比較して、高い演算性能を持つ。ＳＩＰサーバ１では、このＳＩＭＤ型プロセッサを用いることにより、受信したＳＩＰ信号の処理（特に、受信信号ＳＲの分析処理や、送信信号ＳＳの組立処理）を効率的に行う構成となっている。
【００２４】
ＳＩＭＤ型プロセッサは、もともとは、スーパーコンピュータを実現するために利用されていた手法であるが、最近では、ＰＣ等に搭載して、３Ｄグラフィック表示を行うためのＧＰＵにも応用されている。ＳＩＭＤ型プロセッサが同時に処理できるスレッド数は、ＣＰＵより２桁以上も大きな数であるため、ＳＩＭＤ型プロセッサに適用しやすい処理であれば、ＣＰＵより格段に高い性能で処理することが可能である。ただし、ＳＩＭＤ型プロセッサを用いて処理能力を向上できるのは、一回の命令で同時に複数のデータを処理できる場合であるため、同一の処理をなるべく同時に実行するようにしなければならない。
【００２５】
図１では、ＧＰＵのようなＳＩＭＤ型のプロセッサを用いてＳＩＰサーバの処理能力を向上させるための、ＳＩＰサーバ１における信号処理プログラム（スレッド）の構造が示されている。なお、ＳＩＰサーバ１を構成する上述の情報処理装置としては、例えば、既存のＧＰＵを搭載したＰＣを適用することができる。
【００２６】
図１に示すように、ＳＩＰサーバ１は、ひとつの受信スレッド１０、複数の実行スレッド２０、複数の分析スレッド３０（３０−１、３０−２）、複数の処理スレッド４０（４０−１、４０−２）、複数の組立スレッド５０（５０−１、５０−２）、及び、複数の送信スレッド６０（６０−１、６０−２）を有し、それぞれのスレッドが並列的に動作する。
【００２７】
図１では、実行スレッド２０は一つ、分析スレッド３０、処理スレッド４０、組立スレッド５０、及び、送信スレッド６０はそれぞれ２つずつの構成として記載しているが、これらのスレッドを同時に起動する数は限定されないものである。
【００２８】
これらのスレッドの内、通常のＣＰＵで実行するスレッドは、受信スレッド１０、実行スレッド２０、処理スレッド４０、及び、送信スレッド６０であり、ＳＩＭＤ型プロセッサで実行するスレッドは、分析スレッド３０と組立スレッド５０であるものとする。
【００２９】
受信スレッド１０は、ＳＩＰサーバ１の外部（他のＳＩＰサーバやＳＩＰ端末）から受信信号ＳＲを受信するスレッドである。受信スレッド１０の中では、信号受信処理１１が動作する。
【００３０】
信号受信処理１１は、他のＳＩＰ端末やＳＩＰサーバ等から受信信号ＳＲを受信する度に、受信信号ＳＲをテキスト形式に変換した受信信号テキストＤ１を、対応するメモリ領域（以下、「エリア」という）に出力していき、所定数の受信信号ＳＲを受信したあと、実行スレッド２０を起動する。
【００３１】
図１では、例として、受信スレッド１０が、２つの受信信号ＳＲ−１、ＳＲ−２を受信し、受信信号ＳＲ−１、ＳＲ−２をテキスト変換したものを、それぞれ、受信信号テキストＤ１−１、Ｄ１−２として示している。
【００３２】
実行スレッド２０は、受信した複数の信号の各々について、一連の処理の実行を制御するスレッドである。実行スレッド２０の中では、実行制御処理２１が動作する。
【００３３】
実行制御処理２１は、複数の信号を一括して処理するため、分析スレッド３０、処理スレッド４０、組立スレッド５０、及び、送信スレッド６０を、受信した受信信号ＳＲの個数分だけ起動して割り当てるスレッド制御を行う。
【００３４】
このとき、ひとつの受信信号ＳＲに対しては、分析スレッド３０、処理スレッド４０、組立スレッド５０、及び、送信スレッド６０が、ひとつずつ順番に起動されるものとする。
【００３５】
分析スレッド３０−１、３０−２では、それぞれ、字句解析処理３１−１、３１−２と、構文解析処理３２−１、３２−２とが順番に実行される。
【００３６】
字句解析処理３１−１、３１−２では、それぞれ受信信号テキストＤ１−１、Ｄ１−２のエリアから、テキスト形式の受信信号を入力し、それを文字列、数値、ＩＰアドレス、ＦＱＤＮ等の字句の並びに変換し、その結果を、字句解析結果Ｄ２−１、Ｄ２−２のエリアに出力する。
【００３７】
構文解析処理３２−１、３２−２は、字句解析結果Ｄ２−１、Ｄ２−２のエリアから受信信号に対する字句の並びを入力し、メソッドやパラメータ等の受信信号の情報を取り出し、内部形式の受信信号として、受信信号データＤ３−１、Ｄ３−２のエリアに出力する。
【００３８】
処理スレッド４０−１、４０−２では、それぞれサービス処理４１−１、４１−２が実行される。
【００３９】
サービス処理４１−１、４１−２は、受信信号データＤ３−１、Ｄ３−２のエリアから内部形式の受信信号を入力して、その信号に応じた処理を実行する。サービス処理４１−１、４１−２は、この処理を実行中に信号を送信する場合には、内部形式の送信信号の情報を、送信信号データＤ４−１、Ｄ４−２のエリアに出力する。
【００４０】
組立スレッド５０−１、５０−２では、それぞれ、信号組立処理５１−１、５１−２が実行される。
【００４１】
信号組立処理５１−１、５１−２は、送信信号データＤ４−１、Ｄ４−２のエリアから内部形式の送信信号の情報を入力して、それをテキスト形式に変換し、テキスト形式の送信信号を、送信信号テキストＤ５−１、Ｄ５−２のエリアに出力する。
【００４２】
送信スレッド６０−１、６０−２では、それぞれ、信号送信処理６１−１、６１−２が実行される。
【００４３】
信号送信処理６１−１、６１−２は、送信信号テキストＤ５−１、Ｄ５−２のエリアからテキスト形式の送信信号を入力し、ＳＩＰサーバの外部（他のＳＩＰサーバやＳＩＰ端末等）へ送信信号ＳＳ−１、ＳＳ−２を送信する。
【００４４】
なお、分析スレッド３０、処理スレッド４０、組立スレッド５０、送信スレッド６０のそれぞれのスレッド内の処理内容については、既存のＳＩＰサーバと同様の処理内容を適用することができるため、詳しい説明は省略する。
【００４５】
また、ＳＩＰサーバ１において、同時に実行されるスレッド数の上限は、上限値Ｎであるものとする。Ｎは任意の数であり、例えば、ＳＩＰサーバ１に搭載されるプロセッサ（通常のＣＰＵ及びＭＩＭＤ型プロセッサ）の規模に応じて定めるようにしても良い。
【００４６】
（Ａ−２）実施形態の動作
次に、以上のような構成を有する、この実施形態のＳＩＰサーバ１の動作を説明する。
【００４７】
まず、受信スレッド１０（信号受信処理１１）の動作について説明する。
【００４８】
図２は、受信スレッド１０（信号受信処理１１）の動作について示したフローチャートである。
【００４９】
信号受信処理１１は、最初に、起動中の実行スレッドの数を収集し（Ｓ１０１）、実行スレッド数が上限値Ｎ以上か否かを判定する（Ｓ１０２）。
【００５０】
そして、信号受信処理１１は、上述のステップＳ１０２の判定において実行スレッド数が上限値Ｎ以上の場合、実行スレッドの終了を待つために、少し時間をおいて（所定の時間待機）から（Ｓ１０３）、上述のステップＳ１０１の処理に戻る。
【００５１】
一方、上述のステップＳ１０２の判定において、実行スレッド数が上限値Ｎ未満の場合、信号受信処理１１は、受信信号テキストＤ１のエリアをＭ個確保し（Ｓ１０４）、受信信号ＳＲを受信する（Ｓ１０５）。なお、Ｍは任意の数であり、例えば、ＳＩＰサーバ１に搭載されるプロセッサ（通常のＣＰＵ及びＭＩＭＤ型プロセッサ）の規模や、受信信号ＳＲが到来するタイミングの分布状況に応じて定めるようにしても良い。
【００５２】
このとき、上述のステップＳ１０５では、最初の受信信号ＳＲが受信されるまで処理をブロック（待機）し、最初の受信信号ＳＲを受信すると、Ｍ個の受信信号テキストＤ１のエリアの１番目に、最初に受信した受信信号ＳＲを出力し（Ｓ１０６）、開始時刻ＴＳに現在の時間を設定する（Ｓ１０７）。
【００５３】
次に、受信信号テキストＤ１のエリアへの受信信号ＳＲの出力数がＭ未満、かつ、現在の時刻と開始時間ＴＳの差が上限値ＴＭ（任意の時間）未満か否かを判定する（Ｓ１０８）。
【００５４】
そして、上述のステップＳ１０８の判定において、受信信号テキストＤ１のエリアへの受信信号ＳＲの出力数がＭ未満、かつ、現在の時刻と開始時刻ＴＳの差が上限値ＴＭ未満の場合、信号受信処理１１は、次の受信信号ＳＲを受信するまで待機する（Ｓ１０９）。
【００５５】
上述のステップＳ１０９では、一定時間経過しても、次の受信信号ＳＲが到来しなかった場合にタイムアウトする設定とし、上述のステップＳ１０９の後で、タイムアウトか、信号受信かを判定する（Ｓ１１０）。
【００５６】
上述のステップＳ１１０の判定において、タイムアウトとなった場合は、上述のステップＳ１０８に戻る。
【００５７】
上述のステップＳ１１０の判定において、新たに受信信号ＳＲを受信した場合は、Ｍ個の受信信号テキストＤ１のエリアのうち、２番目以降に受信信号ＳＲを順番に出力し（Ｓ１１１）、上述のステップＳ１０８に戻る。
【００５８】
一方、上述のステップＳ１０８の判定において、受信信号テキストＤ１のエリアへの受信信号ＳＲの出力数がＭ以上、または、現在の時刻と開始時刻ＴＳの差が上限値ＴＭ以上の場合、実行スレッドを起動し（Ｓ１１２）、ステップＳ１０１に戻る。
【００５９】
このように、図２の処理では、信号受信処理１１は、信号をＭ個受信するか、最初の信号受信から時間ＴＭだけ経過すると、実行スレッドを起動し、かつ、ＳＩＰサーバ１上の実行スレッドを最大Ｎ個までしか起動しないように制限している。
【００６０】
次に、実行スレッド２０（実行制御処理２１）の処理について説明する。
【００６１】
図３、図４は、実行スレッド２０（実行制御処理２１）の処理について示したフローチャートである。
【００６２】
なお、図３、図４の処理では、変数として、後述する「処理スレッド起動数ｓ１」及び「送信スレッド起動数ｓ２」を用いるものとする。
【００６３】
実行制御処理２１は、最初に、処理スレッド起動数ｓ１に０を設定し（Ｓ２０１）、Ｍ個分の分析スレッド３０を起動する（Ｓ２０２）。
【００６４】
この結果、１〜Ｍの中のｉ番目の分析スレッド３０は、それぞれ、ｉ番目の受信信号テキストＤ１のエリアからデータ入力し、結果をｉ番目の受信信号データＤ３のエリアに出力する。
【００６５】
実行制御処理２１は、上述のステップＳ２０２の処理後、起動中の分析スレッド３０の数を収集し（Ｓ２０３）、起動中の分析スレッド３０の数が０より大きいか、０かを判定する（Ｓ２０４）。
【００６６】
上述のステップＳ２０４の判定で、起動中の分析スレッド３０の数が０より大きい場合、（Ｍ−分析スレッド３０の数−処理スレッド起動数ｓ１）の値を求め、その個数分の処理スレッド４０を起動する（Ｓ２０５）。
【００６７】
その後、処理スレッド起動数ｓ１に（Ｍ−分析スレッド３０の数）の値を設定し（Ｓ２０６）、実行中の分析スレッド３０の終了を待つために、少し時間をおいて（所定の時間待機）から（Ｓ２０７）、上述のステップＳ２０３の処理に戻る。
【００６８】
上述のステップＳ２０４で、起動中の分析スレッド３０の数が０の場合、（Ｍ−処理スレッド起動数ｓ１）の値を求め、その個数分の処理スレッド４０を起動する（Ｓ２０８）。
【００６９】
上述のステップＳ２０５、または、上述のステップＳ２０８では、１〜Ｍの中のｉ番目の分析スレッド３０が終了し、かつ、ｉ番目の処理スレッド４０が起動されていない場合に、ｉ番目の処理スレッド４０を起動するようにする。この結果、１〜Ｍの中のｉ番目の処理スレッド４０は、それぞれ、ｉ番目の受信信号データＤ３のエリアからデータ入力し、結果をｉ番目の送信信号データＤ４のエリアに出力することになる。
【００７０】
実行制御処理２１は、上述のステップＳ２０８の処理後、起動中の処理スレッド４０の数を収集し（Ｓ２０９）、起動中の処理スレッド４０の数が０より大きいか、０かを判定する（Ｓ２１０）。
【００７１】
そして、上述のステップＳ２１０の判定で、起動中の処理スレッドの数が０より大きい場合、処理スレッドの終了を待つために、少し時間をおいて（所定の時間待機）から（Ｓ２１１）、上述のステップＳ２０９の処理に戻る。
【００７２】
上述のステップＳ２１０の判定で、起動中の処理スレッドの数が０の場合、送信スレッド起動数ｓ２に０を設定し（Ｓ２１２）、Ｍ個分の組立スレッド５０を起動する（Ｓ２１３）。
【００７３】
この結果、１〜Ｍの中のｉ番目の組立スレッドは、それぞれ、ｉ番目の送信信号データＤ４のエリアから入力し、結果をｉ番目の送信信号テキストＤ５のエリアに出力する。
【００７４】
実行制御処理２１は、上述のステップＳ２１３の処理後、起動中の組立スレッドの数を収集し（Ｓ２１４）、起動中の組立スレッドの数が０より大きいか、０かを判定する（Ｓ２１５）。
【００７５】
上述のステップＳ２１５の判定で、起動中の組立スレッドの数が０より大きい場合、（Ｍ−組立スレッド５０の数−送信スレッド起動数ｓ２）の値を求め、その個数分の送信スレッド６０を起動する（Ｓ２１６）。
【００７６】
その後、送信スレッド起動数ｓ２に（Ｍ−組立スレッド５０の数）の値を設定し（Ｓ２１７）、組立スレッド５０の終了を待つために、少し時間をおいて（所定の時間待機）から（Ｓ２１８）、上述のステップＳ２１４の処理に戻る。
【００７７】
一方、上述のステップＳＳ２１５の判定で、起動中の組立スレッド５０の数が０の場合、（Ｍ−送信スレッド起動数ｓ２）の値を求め、その個数分の送信スレッド６０を起動する（Ｓ２１９）。
【００７８】
上述のステップＳＳ２１６、または、上述のステップＳ２１９の処理では、１〜Ｍの中のｉ番目の組立スレッド５０が終了し、かつ、ｉ番目の送信スレッド６０が起動されていない場合に、ｉ番目の送信スレッド６０を起動するようにする。この結果、１〜Ｍの中のｉ番目の送信スレッドは、それぞれ、ｉ番目の送信信号テキストＤ５のエリアからデータ入力し、対応する送信信号ＳＳを生成して送信する。
【００７９】
実行制御処理２１は、上述のステップＳ２１９の処理の後、起動中の送信スレッド６０の数を収集し（Ｓ２２０）、起動中の送信スレッド６０の数が０より大きいか、０かを判定する（Ｓ２２１）。
【００８０】
上述のステップＳ２２１の判定で、起動中の送信スレッドの数が０より大きい場合、送信スレッド６０の終了を待つために、少し時間をおいて（所定の時間待機）から（Ｓ２２２）、上述のステップＳ２２０の処理に戻る。
【００８１】
一方、上述のステップＳ２２１の判定で、起動中の送信スレッドの数が０の場合、実行制御処理２１は終了となる。
【００８２】
実行制御処理２１は、上述の図３、図４に示すように、最初にＭ個の分析スレッド３０を起動し、いずれかの、分析スレッド３０の終了を待つ。そして、いずれかの分析スレッド３０が終了すると、それに対応する処理スレッド４０を順に起動していき、Ｍ個まで処理スレッド４０を起動した後は、すべての処理スレッド４０の終了を待つ。さらに、Ｍ個の処理スレッド４０が全て終了すると、Ｍ個の組立スレッド５０を起動し、いずれかの組立スレッド５０の終了を待つ。そして、いずれかの組立スレッド５０が終了すると、それに対応する送信スレッド６０を順に起動していき、Ｍ個まで送信スレッド６０を起動した後は、すべての送信スレッド６０の終了を待つ。そして、Ｍ個の送信スレッド６０が、全て終了すると、実行制御処理２１も終了となる。
【００８３】
（Ａ−３）実施形態の効果
この実施形態によれば、以下のような効果を奏することができる。
【００８４】
実行制御処理２１は、上述の図３、図４に示すように、ＳＩＭＤ型プロセッサに対して、実行する分析スレッド３０と組立スレッド５０を、Ｍ個同時に起動している。これにより、ＳＩＭＤ型プロセッサで、複数の信号に対する同一の字句解析処理３１、同一の構文解析処理３２、同一の信号組立処理５１が並列に実施される。ＳＩＭＤ型プロセッサでは、ＣＰＵより並列に実行できるスレッド数が格段に多いため、Ｍ個の信号分の処理をＣＰＵより短時間で処理できる。
【００８５】
また、ＣＰＵバウンドである字句解析処理３１、構文解析処理３２、信号組立処理５１を、ＳＩＭＤ型プロセッサで実行することで、ＣＰＵ自体の負荷も軽減される。これにより、ＣＰＵ側で実行される、実行スレッド２０、処理スレッド４０、及び、送信スレッド６０も、同時に実行できる数を増加できる。その結果、受信した信号に対する処理をより短時間でより並列に実行できるようになるため、ＳＩＰサーバ１の処理能力を向上することができる。
【００８６】
さらに、ＳＩＰサーバ１に搭載するＳＩＭＤ型プロセッサとしては、既存のＰＣにおけるＧＰＵを用いることができるので、安価に構築することができる。
【００８７】
（Ａ−４）実施形態の変形例
ＳＩＭＤ型プロセッサでは、１回の命令で複数のデータを並列的に処理するが、通常、同じ命令を同時に実行するスレッド数が決められている。
【００８８】
同時に実行されるスレッドは、処理の中の同じ命令を順に実行していくことが基本である。
【００８９】
ただし、処理の中に分岐があり、かつ、同時に実行されるスレッドの中に、異なる方向に分岐するスレッドが混在した場合、分岐の両方分を実行するだけの実行時間がかかる。
【００９０】
このように、同時に実行されるスレッド内で分岐の混在が発生すると、１スレッドの処理時間が長くなるため、同時に実行されるスレッド内で分岐が混在しにくくすることが、ＳＩＭＤ型プロセッサの処理能力を引き出すポイントとなる。
【００９１】
そのため、上記の実施形態のＳＩＰサーバ１において、ＳＩＭＤ型プロセッサで実行する字句解析処理３１、構文解析処理３２、及び、信号組立処理５１について、同時に実行されるスレッド内での分岐を減らす変形実施例について、以下に述べる。
【００９２】
（Ａ−４−１）字句解析処理に関する変形実施例
ＳＩＰ信号の字句解析を効率良く実行するために、解析対象の文字を入力とする有限オートマトンとして処理を実現する手法がよく使われる。
【００９３】
この手法を用いる場合、字句解析処理３１の処理は、受信信号テキストＤ１の先頭から１文字ずつ入力し、１文字毎に次の状態と字句解析結果Ｄ２を出力する有限オートマトンとして実現される。
【００９４】
字句解析処理において、入力された１文字に対して、次の状態と出力を決める処理を条件分岐でプログラムしてしまうと、ＳＩＭＤ型プロセッサで実行する場合に、処理時間が長くなってしまう場合がある。
【００９５】
このため、分析スレッド３０（字句解析処理３１）では、入力された１文字をインデックスとしてテーブルを引き、次の状態と出力をテーブルの値から決めるような処理にする（以下、「方法１Ａ」という）と、処理中に分岐を減らすことができ、ＳＩＭＤ型プロセッサで効率良く実行できる。
【００９６】
また、字句解析のために有限オートマトンの状態遷移を繰り返す回数は、入力となる受信信号のサイズに依存する。同時に実行されるスレッドの中に、受信信号のサイズが異なるものが混在した場合、その中でサイズが最も長い受信信号を処理するだけの時間を要する。そこで、分析スレッド３０（字句解析処理３１）について、受信信号のサイズ順にスレッドを割り当てる（以下、「方法１Ｂ」という）ことで、同時に実行されるスレッド内での受信信号サイズのばらつきを減らし、スレッド全体での処理時間を短縮できる。すなわち、分析スレッド３０（字句解析処理３１）について、受信信号のサイズに応じて、同時にＳＩＭＤ型プロセッサを用いて処理するスレッドのグループを割り当てることにより、同時に実行されるスレッド内で、分岐の混在する可能性を減らすことができる。
【００９７】
（Ａ−４−２）構文解析処理に関する変形実施例
ＳＩＰ信号の構文解析では、構文解析を効率良く実行するために、解析対象の字句を入力とするシフト還元構文解析というアルゴリズムがよく使われる。
【００９８】
この手法を用いる場合、構文解析処理３２の処理は、字句解析結果Ｄ２の先頭から字句を１つずつ入力し、１つの字句毎にスタックに入れるシフト処理、または、スタックから取り出す還元処理を実行するようにしても良い。そして、還元処理を実行した時に、字句に対する構文上の扱いが決まり、受信信号データＤ３を出力する。
【００９９】
分析スレッド３０（構文解析処理３２）において、入力された１つの字句に対するシフト処理または還元処理の際にスタックに入出力する値を決定する処理を条件分岐でプログラムしてしまうと、ＳＩＭＤ型プロセッサで実行する場合に、処理時間が長くなってしまう。このため、分析スレッド３０（構文解析処理３２）では、入力された１つの字句をインデックスとしてテーブルを引き、スタックに入出力する値をテーブルの値から決めるような処理にする（以下、「方法２Ａ」という）と、処理中に分岐を減らすことができ、ＳＩＭＤ型プロセッサで効率良く実行できる。
【０１００】
しかし、分析スレッド３０（構文解析処理３２）で、シフト処理を行うか還元処理を行うかを判定して処理を分岐する動作は避けられないため、まったく分岐をなくすことはできない。ただし、還元処理に比べて、シフトの処理は単純であり、処理時間の大部分は還元処理に要するので、シフト処理と還元処理の分岐が発生しても、ＳＩＭＤ型プロセッサで実行する場合でも、大きな処理効率の低下にはならない。
【０１０１】
分析スレッド３０（構文解析処理３２）の処理の中に分岐が存在しても、同時に実行するスレッドの中で分岐が混在しなければ、処理の低下は発生しないため、分岐の混在の可能性を減らす方法として、以下に述べる方法がある。
【０１０２】
ＳＩＰ信号の場合、受信した信号の先頭の字句によって、信号の種別が決まるが、同一種別の信号同士であれば、異なる種別の信号より、構文のばらつきが少ないことが期待できる。そこで、分析スレッド３０（構文解析処理３２）について、同時に実行されるスレッドには、同一種別の信号のみを対象とするように、対象となるデータとスレッドを割り当てる（以下、「方法２Ｂ」という）ようにしても良い。
【０１０３】
また、同一の送信元（ＳＩＰサーバやＳＩＰ端末）から受信した、同一種別の信号については、構文のばらつきが少ないことが期待できる。そこで、分析スレッド３０（字句解析処理３１）について、同時に実行されるスレッドには、同一のＳＩＰサーバから受信した同一種別の信号のみを対象とするように、対象となるデータとスレッドを割り当てる（以下、「方法２Ｃ」という）ようにしてもよい。また、同様に、同時に実行されるスレッドには、ＳＩＰ端末群から受信した同一種別の信号のみを対象とするように、対象となるデータとスレッドを割り当てる（以下、「方法２Ｄ」という）ようにしてもよい。
【０１０４】
（Ａ−４−３）信号組立処理に関する変形実施例
信号組立処理５１は、送信信号データＤ４に設定されている信号種別やパラメータの個数に応じて、信号の組み立て方に対応する構文を変える必要があり、本質的に分岐を減らすことは困難である。
【０１０５】
ただし、分岐の混在の可能性を減らす方法としては、以下に述べる方法がある。
【０１０６】
同一種別の信号同士であれば、異なる種別の信号より、構文のばらつきが少ないことが期待できる。そこで、組立スレッド５０（信号組立処理５１）について、同時に実行されるスレッドには、同一種別の信号のみを対象とするように、対象となるデータとスレッドの割り当てを決める（以下、「方法３Ａ」という）ようにしても良い。
【０１０７】
また、同一の送信先（ＳＩＰサーバや、ＳＩＰ端末）へ送信する同一種別の信号については、構文のばらつきが少ないことが期待できる。そこで、同時に実行されるスレッドには、同一サーバに送信する同一種別の信号のみを対象とするように、対象となるデータとスレッドの割り当てを決める（以下、「方法３Ｂ」という）ようにしても良い。また、同様に、同時に実行されるスレッドには、ＳＩＰ端末群へ送信する同一種別の信号のみを対象とするように、対象となるデータとスレッドの割り当てを決める（以下、「方法３Ｃ」という）ようにしても良い。
【０１０８】
さらに、サービス処理４１において、同一のサービスで出力する同一種別の信号同士であれば、異なるサービスで出力する信号より、構文のばらつきが少ないことが期待できる。そこで、同時に実行されるスレッドには、同一のサービスで出力する同一種別の信号のみを対象とするように、対象となるデータとスレッドの割り当てを決める（以下、「方法３Ｄ」という）ようにしても良い。
【０１０９】
（Ａ−４−４）字句解析処理３１では、上述の方法１Ａによって処理から分岐そのものを減らすことができ、さらに、上述の方法１Ｂによって、分岐の混在する可能性を減らすことができる。
【０１１０】
構文解析処理３２では、上述の方法２Ａによって処理から分岐そのものを減らすことができ、さらに、上述の方法２Ｂ、方法２Ｃ、方法２Ｄによって、分岐の混在する可能性を減らすことができる。
【０１１１】
また、信号組立処理５１では、上述の方法３Ａ、方法３Ｂ、方法３Ｃ、方法３Ｄによって、分岐の混在する可能性を減らすことができる。
【０１１２】
これらの方法により、ＳＩＰサーバ１では、同時に実行されるスレッド内で分岐の混在の発生を減らし、ＳＩＭＤ型プロセッサでの処理効率を向上することができる。
【０１１３】
ただし、上述の方法１Ａ、方法２Ａについては、ＳＩＭＤ型プロセッサでの処理性能改善目的ではないが、プログラムの単純化目的として用いている。
【０１１４】
また、上述の方法１Ａ、１Ｂ、２Ａ〜２Ｄ、３Ａ〜３Ｄは、全部ＳＩＰサーバ１に適用するようにしても良いし、一部だけを適用するようにしても良い。
【０１１５】
（Ｂ）他の実施形態
本発明は、上記の実施形態に限定されるものではなく、以下に例示するような変形実施形態も挙げることができる。
【０１１６】
（Ｂ−１）上記の実施形態では、字句解析処理３１、構文解析処理３２、および、信号組立処理５１をＳＩＭＤ型プロセッサで処理する場合を例として説明したが、サービス処理４１の処理内容が単純で済む場合等には、サービス処理４１もＳＩＭＤ型プロセッサで処理するようにしても良い。
【０１１７】
また、上記の実施形態では、字句解析処理３１、構文解析処理３２、信号組立処理５１について、ＳＩＭＤ型プロセッサで処理する例について説明したが、一部の処理をＣＰＵ側で行うようにしても良い。
【０１１８】
（Ｂ−２）上記の実施形態では、本発明の信号処理装置を、ＳＩＰサーバに適用した例について説明したが、その他のプロトコルの信号を処理する装置について適用するようにしても良い。例えば、Ｈ．２４８等ＳＩＰ以外を用いた通信システムにおいて、信号処理（例えば、呼制御信号処理）を行う装置に適用するようにしても良い。また、その他にも信号の内容がテキストベースとなっているプロトコルの処理を行う信号処理装置に適用するようにしても良い。その場合、上述の図１に示す各スレッドにおいて行われる処理のそれぞれについて、当該信号処理装置における処理内容に置き換えられることになる。
【０１１９】
（Ｂ−３）信号を処理する以外にも、同時に多数のテキストを字句解析、または、構文解析する必要がある処理スレッド（例えば、プログラム言語のコンパイルや自然言語の翻訳等を行うスレッド）を実行する装置について、上述のＳＩＰサーバ１における分析スレッド３０、処理スレッド４０、組立スレッド５０と同様に、ＳＩＭＤ型プロセッサに割り当てるようにしても良い。
【０１２０】
（Ｂ−４）上記の実施形態では、ＳＩＰサーバ１において、並列的にデータ処理を行うプロセッサとしてＳＩＭＤ型のプロセッサを適用する例について説明したが、ＭＩＭＤ(Ｍｕｌｔｉｐｌｅ  Ｉｎｓｔｒｕｃｔｉｏｎ  ｓｔｒｅａｍ，Ｍｕｌｔｉｐｌｅ  Ｄａｔａ  ｓｔｒｅａｍ)型プロセッサ等、その他の並列処理を行うプロセッサを適用するようにしても良い。
【符号の説明】
【０１２１】
１…ＳＩＰサーバ、ＳＲ、ＳＲ−１、ＳＲ−２…受信信号、１０…受信スレッド、１１…信号受信処理、２０…実行スレッド、２１…実行制御処理、Ｄ１、Ｄ１−１、Ｄ１−２…受信信号テキスト、３０、３０−１、３０−２…分析スレッド、３１、３１−１、３１−２…字句解析処理、Ｄ２、Ｄ２−１、Ｄ２−２…字句解析結果、３２、３２−１、３２−２…構文解析処理、Ｄ３、Ｄ３−１、Ｄ３−２…受信信号データ、４０、４０−１、４０−２…処理スレッド、４１、４１−１、４１−２…サービス処理、Ｄ４、Ｄ４−１、Ｄ４−２…送信信号データ、５０、５０−１、５０−２…組立スレッド、５１、５１−１、５１−２…信号組立処理、Ｄ４、Ｄ４−１、Ｄ４−２…送信信号テキスト、６０、６０−１、６０−２…送信スレッド、６１、６１−１、６１−２…信号送信処理、ＳＳ、ＳＳ−１、ＳＳ−２…送信信号。
【図１】
0005477810.tif 000002
【図２】
0005477810.tif 000003
【図３】
0005477810.tif 000004
【図４】
0005477810.tif 000005
【図５】
0005477810.tif 000006