"数をカウントするカウント処理部を複数備える並列カウント処理装置であって、前記カウント処理部がカウントする数の第1の限界値の範囲と、前記並列カウント処理装置のカウントする数の第2の限界値の範囲と、当該カウント処理部がカウントした数値とを記憶している第1の記憶部と、各前記カウント処理部に設定された前記第1の限界値の範囲の上限値の合計を、前記第2の限界値の範囲の上限値から減算した数値を残数として記憶している第2の記憶部と、前記カウントした数値と前記第1の限界値の範囲とを比較し、当該カウントした数値が前記第1の限界値の範囲に入ると判定した場合、当該カウントした数値を前記第1の記憶部に記憶し、当該カウントした数値が前記第1の限界値の範囲に入らないと判定した場合、前記第1の限界値の範囲から外れた分の差分値を前記第2の記憶部の前記残数から減算した数値を新たな前記第2の記憶部の前記残数として記憶し、前記新たな前記第2の記憶部の前記残数と前記第2の限界値の範囲とを比較し、当該新たな前記第2の記憶部の前記残数が前記第2の限界値の範囲に入ると判定した場合、前記差分値を前記第1の限界値の範囲の上限値に加算して前記第1の記憶部の前記第1の限界値の範囲を更新し、当該新たな前記第2の記憶部の前記残数が前記第2の限界値の範囲に入らないと判定した場合、当該新たな前記第2の記憶部の前記残数に前記差分値を加算して前記第2の記憶部の前記残数を書き換えて更新する前記カウント処理部とを備えることを特徴とする並列カウント処理装置。前記カウント処理部は、前記第1の限界値の範囲の上限値から前記カウントした数値を減算した減算値と前記残数とを比較し、前記減算値が前記残数より大きいと判定した場合、前記第1の限界値の範囲の上限値から前記減算値に対する所定の割合の値を減算して前記第1の限界値の範囲を更新し、前記第2の記憶部の前記残数に前記減算値に対する所定の割合の値を加算して前記第2の記憶部の前記残数を更新することを特徴とする請求項1に記載の並列カウント処理装置。ユーザの使用する装置とネットワークを介して通信可能に接続され、前記装置間の通信接続を制御する通信装置であって、前記カウント処理部によってカウントされる前記数として、通信に用いるセッション数をカウントする請求項1または請求項2に記載の前記並列カウント処理装置を備えることを特徴とする通信装置。ユーザの使用する端末とネットワークを介して通信可能に接続され、サービス提供用の情報を蓄積している通信装置であって、前記カウント処理部によってカウントされる前記数として、前記端末から前記サービス提供用の情報をダウンロードした回数をカウントする請求項1または請求項2に記載の前記並列カウント処理装置を備えることを特徴とする通信装置。数をカウントするカウント処理部を複数備える並列カウント処理装置において用いられる並列カウント処理方法であって、前記並列カウント処理装置は、前記カウント処理部がカウントする数の第1の限界値の範囲と、前記並列カウント処理装置のカウントする数の第2の限界値の範囲と、当該カウント処理部がカウントした数値とを記憶している第1の記憶部と、各前記カウント処理部に設定された前記第1の限界値の範囲の上限値の合計を、前記第2の限界値の範囲の上限値から減算した数値を残数として記憶している第2の記憶部と、複数の前記カウント処理部と、を備え、前記カウント処理部は、前記カウントした数値と前記第1の限界値の範囲とを比較し、当該カウントした数値が前記第1の限界値の範囲に入ると判定した場合、当該カウントした数値を前記第1の記憶部に記憶し、当該カウントした数値が前記第1の限界値の範囲に入らないと判定した場合、前記第1の限界値の範囲から外れた分の差分値を前記第2の記憶部の前記残数から減算した数値を新たな前記第2の記憶部の前記残数として記憶し、前記新たな前記第2の記憶部の前記残数と前記第2の限界値の範囲とを比較し、当該新たな前記第2の記憶部の前記残数が前記第2の限界値の範囲に入ると判定した場合、前記差分値を前記第1の限界値の範囲の上限値に加算して前記第1の記憶部の前記第1の限界値の範囲を更新し、当該新たな前記第2の記憶部の前記残数が前記第2の限界値の範囲に入らないと判定した場合、当該新たな前記第2の記憶部の前記残数に前記差分値を加算して前記第2の記憶部の前記残数を書き換えて更新することを特徴とする並列カウント処理方法。請求項5に記載の並列カウント処理方法を、コンピュータである前記並列カウント処理装置に実行させるためのプログラム。前記サーバ群では同時接続数やダウンロード回数等の数をカウントする場合を例示したが、このカウント機能を前記したサーバにマルチコアプロセッサを備えて実現し、各コアが並列してカウントを実行した場合、サーバ群全体のカウント処理の速度が向上すると想定される。しかしながら、MESIプロトコルは、マルチコアプロセッサのコア数並列に処理するスレッドの数の増加に伴って、キャッシュコヒーレンスの回数が増加するため、そのキャッシュコヒーレンスの処理に費やされる時間が増加し、マルチコアプロセッサのスループットの低下をまねく虞がある。前記虞と同様に、サーバ群においても、サーバ数の増加に伴って、共通にアクセスされる合計数の一貫性を保つ処理キャッシュコヒーレンス処理に相当の回数が増加するため、その処理に費やされる時間が増加し、サーバ群全体のスループットの低下をまねく虞もある。そこで、本発明は、数をカウントするカウント処理の並列処理数の増加に応じて、スループットのスケーラビリティを確保することを課題とする。本発明は、数をカウントするカウント処理部を複数備える並列カウント処理装置であって、前記カウント処理部がカウントする数の第1の限界値の範囲と、前記並列カウント処理装置のカウントする数の第2の限界値の範囲と、当該カウント処理部がカウントした数値とを記憶している第1の記憶部と、各前記カウント処理部に設定された前記第1の限界値の範囲の上限値の合計を、前記第2の限界値の範囲の上限値から減算した数値を残数として記憶している第2の記憶部と、前記カウントした数値と前記第1の限界値の範囲とを比較し、当該カウントした数値が前記第1の限界値の範囲に入ると判定した場合、当該カウントした数値を前記第1の記憶部に記憶し、当該カウントした数値が前記第1の限界値の範囲に入らないと判定した場合、前記第1の限界値の範囲から外れた分の差分値を前記第2の記憶部の前記残数から減算した数値を新たな前記第2の記憶部の前記残数として記憶し、前記新たな前記第2の記憶部の前記残数と前記第2の限界値の範囲とを比較し、当該新たな前記第2の記憶部の前記残数が前記第2の限界値の範囲に入ると判定した場合、前記差分値を前記第1の限界値の範囲の上限値に加算して前記第1の記憶部の前記第1の限界値の範囲を更新し、当該新たな前記第2の記憶部の前記残数が前記第2の限界値の範囲に入らないと判定した場合、当該新たな前記第2の記憶部の前記残数に前記差分値を加算して前記第2の記憶部の前記残数を書き換えて更新する前記カウント処理部とを備えることを特徴とする。また、本発明は、数をカウントするカウント処理部を複数備える並列カウント処理装置において用いられる並列カウント処理方法であって、前記並列カウント処理装置が、前記カウント処理部がカウントする数の第1の限界値の範囲と、前記並列カウント処理装置のカウントする数の第2の限界値の範囲と、当該カウント処理部がカウントした数値とを記憶している第1の記憶部と、各前記カウント処理部に設定された前記第1の限界値の範囲の上限値の合計を、前記第2の限界値の範囲の上限値から減算した数値を残数として記憶している第2の記憶部と、複数の前記カウント処理部と、を備え、前記カウント処理部が、前記カウントした数値と前記第1の限界値の範囲とを比較し、当該カウントした数値が前記第1の限界値の範囲に入ると判定した場合、当該カウントした数値を前記第1の記憶部に記憶し、当該カウントした数値が前記第1の限界値の範囲に入らないと判定した場合、前記第1の限界値の範囲から外れた分の差分値を前記第2の記憶部の前記残数から減算した数値を新たな前記第2の記憶部の前記残数として記憶し、前記新たな前記第2の記憶部の前記残数と前記第2の限界値の範囲とを比較し、当該新たな前記第2の記憶部の前記残数が前記第2の限界値の範囲に入ると判定した場合、前記差分値を前記第1の限界値の範囲の上限値に加算して前記第1の記憶部の前記第1の限界値の範囲を更新し、当該新たな前記第2の記憶部の前記残数が前記第2の限界値の範囲に入らないと判定した場合、当該新たな前記第2の記憶部の前記残数に前記差分値を加算して前記第2の記憶部の前記残数を書き換えて更新することを特徴とする。このような構成によれば、並列カウント処理装置は、各カウント処理部のカウント数が第1の記憶部に記憶されている第1の限界値の範囲内であれば、第2の記憶部の残数が更新されないため、すなわち、キャッシュコヒーレンスのための処理が不要となるため、並列に処理するスレッドの数を増加させても、スループットのスケーラビリティを確保することが可能となる。また、本発明は、前記カウント処理部が、前記第1の限界値の範囲の上限値から前記カウントした数値を減算した減算値と前記残数とを比較し、前記減算値が前記残数より大きいと判定した場合、前記第1の限界値の範囲の上限値から前記減算値に対する所定の割合の値を減算して前記第1の限界値の範囲を更新し、前記第2の記憶部の前記残数に前記減算値に対する所定の割合の値を加算して前記第2の記憶部の前記残数を更新することを特徴とする。このような構成によれば、カウント処理部は、第1の記憶部に記憶している第1の限界値の範囲が実際のカウント数より大き過ぎるか否かを判定し、ローカルに持つ第1の限界値の範囲を設定変更することができる。言い換えると、カウント処理部は、第1の限界値の範囲が実際のカウント数より大き過ぎると判定した場合、第2の記憶部の残数を増加させ、他のカウント処理部が、より大きな第1の限界値の範囲に変更することが可能なようにすることができる。つまり、他のカウント処理部は、より大きく変更した第1の限界値の範囲内であれば、第2の記憶部の残数を更新する必要がないため、並列に処理するスレッドの数を増加させても、スループットのスケーラビリティを確保することが可能となる。また、本発明は、ユーザの使用する装置とネットワークを介して通信可能に接続され、前記装置間の通信接続を制御する通信装置が、前記カウント処理部によってカウントされる前記数として、通信に用いるセッション数をカウントする前記並列カウント処理装置を備えることを特徴とする。このような構成によれば、例えば、通信装置が通信接続の制御を実行するSIPSessionInitiationProtocolサーバ等である場合には、前記並列カウント処理装置を備えているので、セッション数のカウントにおいて、並列に処理するスレッドの数を増加させても、スループットのスケーラビリティを確保することが可能となる。また、本発明は、ユーザの使用する端末とネットワークを介して通信可能に接続され、サービス提供用の情報を蓄積している通信装置が、前記カウント処理部によってカウントされる前記数として、前記端末から前記サービス提供用の情報をダウンロードした回数をカウントする前記並列カウント処理装置を備えることを特徴とする。このような構成によれば、例えば、通信装置がサービス提供用の情報を蓄積しているサーバ等である場合には、前記並列カウント処理装置を備えているので、ダウンロード数のカウントにおいて、並列に処理するスレッドの数を増加させても、スループットのスケーラビリティを確保することが可能となる。また、本発明は、前記並列カウント処理方法を、コンピュータである前記並列カウント処理装置に実行させるためのプログラムとした。このようなプログラムをインストールされたコンピュータは、このプログラムに基づいた機能を実現することができる。本発明によれば、数をカウントするカウント処理の並列処理数の増加に応じて、スループットのスケーラビリティを確保することができる。本発明を実施するための形態以降、実施形態と称す。の比較例として、同じキャッシュラインにアクセスする並列カウント処理装置マルチコアプロセッサについて説明する。次に、第1実施形態として、スループットのスケーラビリティを確保可能な並列カウント処理装置マルチコアプロセッサについて説明し、第2実施形態として、第1実施形態の並列カウント処理装置マルチコアプロセッサを通信装置に適用したケースについて説明し、第3実施形態として、複数のサーバによって構成されるサーバ群における並列カウント処理について説明する。以下に、比較例および各実施形態について、適宜図面を参照しながら詳細に説明する。カウント処理はじめに、数をカウントするカウント処理について説明する。本発明のカウント処理では、インクリメント処理またはデクリメント処理が定義でき、更に、交換法則および結合法則が成り立つものとする。まず、インクリメント処理とは、これ以上砕くことのできない最小の演算処理を指すものとする。具体的には、ある空間において、原子的な値シンボルoが定義でき、その空間を満たす値が、すべて下記式の関数sのように表現できる場合をインクリメント処理と呼ぶことにする。ただし、下記式に示した関数sは、1のインクリメントの場合を示している。なお、関数sは、例えば、3の倍数しか出現しない空間であれば3のインクリメントを表すものであっても良い。o≡0so≡1sso=s2o≡2ssso=sNo≡Nこの場合、便宜的に関数sの再帰回数をそのまま、整数値として表現しても一般性は失われない。また、マグニチュードのような対数空間ではsx=Axと表しても良い。また、デクリメント処理は、下記式を満たすような関数s-1で表すことができる。ssso=sNo≡Ns-1N=s-1sNo=sN-1o≡N-1前記関数sとして、2項演算fx,yが定義できるとき、fについて交換結合法則が成り立つとは、下記式のように、fをどのように入れ換えても、またどのような順番で演算を行っても結果が同じとなることを意味している。ffx,y,z=fx,fy,zfx,y=fy,x例えば、fx,y=syxは、上記式を満足し、加減算の空間だけでなく、乗除算の1次元空間等も本発明の処理対象としても良い。比較例の並列カウント処理装置ここで、比較例の並列カウント処理装置マルチコアプロセッサの機能例について、図1を用いて説明する。次に、比較例の並列カウント処理装置において、図2aでは処理シーケンス例について説明し、図2bでは処理フロー例について説明する。比較例の並列カウント処理装置は、マルチコアプロセッサであり、図1に示すように論理的に表現した場合、複数のスレッドを並列に処理する並列スレッド処理部と、並列スレッド処理部からアクセスされる共有カウント記憶部とで構成される。図1の並列カウント処理装置は、複数のスレッド[0]~[M-1]を並列に実行する。便宜的に、数をカウントするスレッドを実行しているコアをカウント処理部と称することにする。また、共有カウント記憶部は、L2Level2キャッシュにおいて、メモリ上の所定のアドレスで指定されたキャッシュラインを表している。図1の並列カウント処理装置は、カウント処理部のいずれかがカウント数を変更するたびに、共有カウント記憶部に記憶している累積カウント数カウント処理部によってカウントされた数の合計数を書き込み更新する。そして、並列カウント処理装置は、累積カウント数の更新のたびに、キャッシュコヒーレンスをとる必要がある。そのため、カウント処理部の数言い換えると、並列処理するスレッドを実行するコアの数を増加した場合、並列処理数の増加に応じて、カウント処理部間でキャッシュコヒーレンスをとる回数が増加し、キャッシュコヒーレンスに費やす処理時間が増大して、スループットのスケーラビリティを確保することが困難になる。次に、図1の並列カウント処理装置における動作例について、図2を用いて説明する適宜、図1参照。なお、図2では、並列カウント処理装置の累積カウント数の上限値が30のケースを例示している。まず、図1の並列カウント処理装置における処理シーケンス例について、図2aを用いて説明する適宜、図1参照。各スレッド[0]~[M-1]は、累積カウント数30を限界値として、30未満であれば、1の増加をカウントする。そのため、各スレッド[0]~[M-1]は、共有カウント記憶部同じキャッシュラインに記憶されている累積カウント数をループで30以下か確認し続ける。そして、数のカウントを開始してからある時間経過後に、スレッド[0]が1の増加をカウントし、共有カウント記憶部の累積カウント数を10に更新する。この際、スレッド[0]は、他のスレッド[1]~[M-1]とキャッシュコヒーレンスを一箇所ずつとる。そのため、スレッドの数カウント処理部の数が増加すると、キャッシュコヒーレンスに費やされる時間が増大する。次に、スレッド[M-1]は、キャッシュコヒーレンスの後、1の増加をカウントし、共有カウント記憶部の累積カウント数を11に更新する。この際、スレッド[M-1]は、他のスレッド[0]~[M-2]とキャッシュコヒーレンスを一箇所ずつとる。以降、同様にして、各スレッドがカウントアップしていく。なお、共有カウント記憶部への書き込み更新は、atomicな処理変更中の状態があたかも存在しないように見せる処理であり、キャッシュラインに早く書き込んだもの以外は、MESIプロコトル等によって破棄される。図2bは、図2aの処理シーケンス例を、処理フロー形式で表したものである適宜、図1参照。ステップS201では、カウント処理部は、共有カウント記憶部から累積カウント数Vを読み出し、カウント数の変化分xを、Vに加算し、仮の累積カウント数v’を算出する。ただし、変化分xは、正の場合には増加数を表し、負の場合には減少数を表す。ステップS202では、カウント処理部は、仮の累積カウント数v’が累積カウント数の限界値の範囲0以上、T未満に入るか否かを判定する。ただし、Tは、並列カウント処理装置の累積カウント数の上限値を表す。仮の累積カウント数v’が累積カウント数の限界値の範囲0以上、T未満に入ると判定した場合ステップS202でYes、ステップS203では、カウント処理部は、共有カウント記憶部に記憶されている累積カウント数Vを仮の累積カウント数v’で置き換え更新をする。なお、図2b中で、破線の四角で表示しているステップは、キャッシュコヒーレンスをともなう処理であることを表す。そして、ステップS204では、並列カウント処理装置を備えたシステム不図示は、カウント範囲内の場合の処理Aを実行する。そして、処理は、ステップS201へ戻る。なお、処理Aは、例えば、並列カウント処理装置がダウンロードサイトに備えられている場合には、そのダウンロードサイトがダウンロードを受け付ける処理を表す。また、ステップS202において、仮の累積カウント数v’が累積カウント数の限界値の範囲0以上、T未満に入らないと判定した場合ステップS202でNo、ステップS205では、並列カウント処理装置を備えたシステム不図示は、カウント範囲外の場合の処理Bを実行する。そして、処理は、ステップS201へ戻る。なお、処理Bは、例えば、並列カウント処理装置がダウンロードサイトに備えられている場合には、そのダウンロードサイトがダウンロードを受け付けないことを表す。以上説明したように、比較例では、カウント処理部におけるカウント数が変化するたびに、キャッシュコヒーレンスの処理が発生するため、カウント処理の並列処理数の増加に応じて、スループットのスケーラビリティを確保することが困難である。第1実施形態そこで、第1実施形態では、カウント処理の並列処理数の増加に応じて、スループットのスケーラビリティを確保可能な並列カウント処理装置マルチコアプロセッサの構成例について、図3を用いて説明する。図3に示す並列カウント処理装置300は、構成を論理的に表現した場合、並列スレッド処理部310および共有カウント記憶部320で表される。並列スレッド処理部310は、複数のカウント処理部311と、カウント処理部311ごとに設けられるローカルカウント記憶部312請求項に記載の第1の記憶部とで論理的に形成される。並列カウント処理装置300は、マルチコアプロセッサであり、複数のスレッド[0]~[M-1]を並列に実行する。便宜的に、数をカウントするスレッドを実行しているコアをカウント処理部311と称する。また、共有カウント記憶部320は、L2キャッシュのメモリ上の所定のアドレスで指定されたキャッシュラインを表している。ローカルカウント記憶部312は、コア[0]~[N-1]ごとに設けられ、L2キャッシュのメモリ上の所定のアドレス共有カウント記憶部320とは異なるアドレスで指定されたキャッシュラインを表している。ここで、並列カウント処理装置300がカウントする累積カウント数Vの限界値の範囲を下限値0~上限値Tとするとき、それぞれのコア[i]のローカルカウント記憶部312に対して、カウント数の限界値の範囲下限値0~上限値tiを配分する。具体的には、カウント処理部311ごとのカウント数の限界値の範囲の上限値以降、単に、上限値と称すこともある。をtiで表すと、コア数がN個の場合、上限値はt0,、tN-1となる。なお、上限値tiの合計値は、初期値として、T以下となるように設定される。例えば、任意のiに対して、ti=T/2Nのように、上限値tiの合計値の初期値は、T未満であっても構わない。そして、カウント処理部311は、カウント数が上限値ti未満の場合おいては、スレッドの処理を実行しているコアに対応するローカルカウント記憶部312を用いて、カウントを実行する。そして、カウント処理部312は、カウントした数をローカルカウント記憶部312に記憶する。また、共有カウント記憶部320請求項に記載の第2の記憶部は、次式1で示される残数rを記憶している。なお、残数rは、各カウント処理部311から共通にアクセス可能な共有変数である。r=T-Σtiただし、0≦i≦N-1式1そして、カウント処理部311は、カウント数がローカルカウント記憶部312に記憶している限界値の範囲の上限値ti未満の場合には、共有カウント記憶部320の残数rを更新する必要がない。なお、カウント処理部311は、カウント数がローカルカウント記憶部312に記憶している限界値の範囲の上限値tiを超える場合には、共有カウント記憶部320の残数rを更新することになる。ただし、共有カウント記憶部320の残数rを更新する場合には、キャッシュコヒーレンスをとる必要がある。つまり、図3に示す並列カウント処理装置300の構成は、カウントした数がローカルカウント記憶部312に記憶している限界値の範囲の上限値ti未満の場合には、カウント処理の並列処理数の増加に応じて、スループットのスケーラビリティを確保することが可能である。次に、第1実施形態の並列カウント処理装置300マルチコアプロセッサの処理シーケンス例について、図4を用いて説明する適宜、図3参照。なお、図4は、複数のスレッド[0]~[2]、すなわち、3個のカウント処理部311によって並列にカウントするケースを示している。また、各カウント処理部311のカウント数の上限値tiが5であって、並列カウント処理装置300の累積カウント数の上限値Tが30の場合を表している。このとき、残数rは、式1を用いて、15と算出される。各スレッド[0]~[2]は、カウントした数v’が31=4までは、ローカルカウント記憶部312を用いてカウントする。したがって、このカウント数v’=4までは、カウント数の上限値ti=5未満であるので、キャッシュコヒーレンスが必要とされない。次に、スレッド[0]が、カウント数v’=31の後、1の増加のカウントを実行する。具体的には、カウント数v’は41=5となる。カウント数v’=5では、カウント数の限界値の範囲0以上、ti=5未満に入らないと判断されて、ローカルカウント記憶部312に記憶している限界値の範囲の上限値tiを増加する処理が開始される。まず、スレッド[0]は、共有カウント記憶部320に記憶している残数rから必要とする分を減ずることが可能かを判定する。ただし、残数rの減算には、atomicな処理を用いる。これにより、他のスレッドが、次の判定処理ステップS509の前に残数rを減じてしまっても安全側に判定が行われるようにしている。言い換えると、並列カウント処理装置300が残数rを実際よりも大きいと誤認して、本来の並列カウント処理装置300の累積カウント数の上限値Tを超えるようなカウントアップが発生しないようにすることができる。スレッド[0]は、カウント数v’=31の後、カウント数v’を1増加するとともに、残数rを1減算する演算処理を実行する。すなわち、残数rは、r=r-1=15-1=14となる。次に、スレッド[0]は、残数r=14が、0以上でかつ累積カウント数の上限値T未満の範囲に入るか否かを判定する。スレッド[0]は、残数r=14が0以上でかつ累積カウント数の上限値T未満の範囲に入ると判定した場合、ローカルカウント記憶部312に記憶している限界値の範囲の上限値tiを1増加するように更新する。次に、スレッド[1]は、前記したスレッド[0]の処理の場合と同様に、カウント数v’=31の後、カウント数v’を1増加するとともに、共有カウント記憶部320に記憶されている残数rから1を減算する演算処理を実行して残数r=13とする。スレッド[1]は、残数r=13が0以上でかつ累積カウント数の上限値T未満の範囲に入ると判定した場合、ローカルカウント記憶部312に記憶している限界値の範囲の上限値tiを1増加するように更新する。前記したように、共有カウント記憶部320の残数rを更新するときには、キャッシュコヒーレンスが必要とされる。しかし、残数rが変更されない間は、キャッシュコヒーレンスが必要とされないため、カウント処理の並列処理数の増加に応じて、スループットのスケーラビリティを確保することが可能となる。そして、残数rが0未満になったときに、並列カウント処理装置300は、並列カウント処理装置300のカウント数の上限値Tに到達していると判定する。次に、第1実施形態の並列カウント処理装置300における処理フロー例について、図5を用いて説明する適宜、図3参照。なお、図5に示す処理フロー例の中で、実線の矩形で表されたステップは、キャッシュコヒーレンスを必要としない処理を表す。また、破線の矩形で表されたステップは、キャッシュコヒーレンスを必要とする処理を表す。また、図5で用いられる変数のうち、vi、v’i、およびtiは、カウント処理部iにおいて用いられる変数であり、viはカウント済みの数値、v’iは仮のカウント数を表し、tiはカウント処理部iに設定されるカウント数の限界値の範囲請求項に記載の第1の限界値の範囲の上限値を表す。ただし、図5では、v’i≧0である。rは共有カウント記憶部320に記憶されている残数前記式1参照を表し、Tは並列カウント処理装置300の累積カウント数の限定値の範囲請求項に記載の第2の限界値の範囲の上限値を表す。また、変数xは単位時間当たりのカウント数の変化分を表しており、正の場合は増加数を表し、負の場合は減少数を表すものとする。ステップS500では、viとtiとの初期値が設定される。すなわち、カウント処理部311は、vi=0およびti=t0を設定する。ただし、t0は、並列カウント処理装置300の累積カウント数の上限値Tとコアの数Nとに基づいて予め決められた値である。例えば、t0=T/2Nとしても良い。ステップS501では、カウント処理部311は、現在のカウント数viに変化分xを加算し、加算した値をv’iとする。ステップS502では、カウント処理部311は、v’iがカウント数の限界値の範囲0以上ti未満に入るか否かを判定する。v’iがカウント数の限界値の範囲に入ると判定した場合ステップS502でYes、ステップS503では、カウント処理部311は、ti-v’iが残数rより大きいか否かを判定する。ここで、残数rは、共有変数であり、共有カウント記憶部320に記憶されている値である。ti-v’iが残数r以下であると判定した場合ステップS503でNo、ステップS506では、カウント処理部311は、viをv’iで置き換える。ステップS507では、カウント処理部311は、カウント範囲内の場合の処理Aを実行する。そして、処理は、ステップS501へ戻る。なお、処理Aは、例えば、並列カウント処理装置300がダウンロードサイトに備えられている場合には、そのダウンロードサイトがダウンロードを受け付ける処理を表す。また、ステップS503において、ti-v’iが残数rより大きいと判定した場合ステップS503でYes、ステップS504では、カウント処理部311は、tiを{ti-ti-v’i/2}で置き換える。ステップS505では、カウント処理部311は、共有カウント記憶部320の残数rを{rti-v’i/2}で書き換え更新する。そして、処理はステップS506へ進む。前記したステップ503の処理は、ti-v’iが残数rより大きい場合には、他のカウント処理部311においてカウント可能となるように、そのカウント処理部311が保持しているカウント数の限界値の範囲の上限値tiを開放減少するためのものである。次に、ステップS502において、v’iがカウント数の限界値の範囲に入らないと判定した場合ステップS502でNo、ステップS508では、カウント処理部311は、共有カウント記憶部320の残数rをr-v’i-ti1と書き換え更新する。このステップS508の処理は、atomicな処理で行われ、残数rから必要とするv’i-ti1分を減ずることが可能かを確認するとともに、他のカウント処理部311によって同時に残数rが更新されて、キャッシュコヒーレンスがとれなくならないようにするためのものである。ステップS509では、カウント処理部311は、残数rが累積カウント数の限界値の範囲0以上T未満に入るか否かを判定する。ただし、Tは、予めローカルカウント記憶部312に記憶されているものとする。残数rが累積カウント数の限界値の範囲に入ると判断した場合ステップS509でYes、ステップS510では、カウント処理部311は、tiをtiv’i-ti1と書き換える。そして、処理はステップS506へ進む。また、ステップS509において、残数rが累積カウント数の限界値の範囲に入らないと判断した場合ステップS509でNo、ステップS511では、カウント処理部311は、共有カウント記憶部320の残数rをrv’i-ti1と書き換え更新する。すなわち、カウント処理部311は、残数rを、ステップS508の処理前の数値に戻す処理を行う。ステップS512では、カウント処理部311は、カウント範囲外の場合の処理Bを実行する。そして、処理は、ステップS501へ戻る。なお、処理Bは、例えば、並列カウント処理装置300がダウンロードサイトに備えられている場合には、そのダウンロードサイトがダウンロードを受け付けない処理を表す。ここで、図5の処理フロー例について、いくつかの変形例について以下に説明する。ステップS504およびステップS505では、ti-v’i/2を用いているが、これに限られず、ti-v’iに対する所定の割合の値を用いることとしても良い。また、ステップS507の処理およびステップS512の処理は、カウント処理部311が行うものとして説明したが、並列スレッド処理部310または並列カウント処理装置300が実行しても構わない。具体的には、ステップS507では、カウント処理部311がステップS506の処理終了の情報を並列スレッド処理部310または並列カウント処理装置300に送信して、並列スレッド処理部310または並列カウント処理装置300がステップS507の処理を実行する。また、ステップS512では、カウント処理部311がステップS510の処理終了の情報を並列スレッド処理部310または並列カウント処理装置300に送信して、並列スレッド処理部310または並列カウント処理装置300がステップS512の処理を実行する。また、図5では、v’i≧0として説明したが、v’i≦0の場合には、vi、v’i、ti、r、およびTについて、正負の符号を反転させた上で、図5と同じ処理フロー例を実行すれば良い。以上説明したように、第1実施形態の並列カウント処理装置300は、マルチコアプロセッサであり、例えば、1つのCPUCentralProcessingUnitに多数のコアを設けたメニーコアプロセッサと呼ばれるダイに、コア数を数十~数百有するプロセッサが該当する。そして、各カウント処理部311は、ローカルカウント記憶部312に記憶しているカウント数の限界値の範囲内であれば、共有カウント記憶部320の残数rを更新する必要がないため、すなわち、キャッシュコヒーレンスの処理を不要とするため、並列に処理するスレッドの数を増加させても、スループットのスケーラビリティを確保することが可能となる。第2実施形態次に、第2実施形態では、第1実施形態の並列カウント処理装置マルチコアプロセッサを通信装置に適用したケースについて、図6を用いて説明する。図6は、第1実施形態の並列カウント処理装置300を備える通信装置600と、ユーザが使用する端末650とが、ネットワーク640を介して通信可能に接続されている構成を示している。なお、図6では、通信装置600は、1台しか記載していないが、2台以上であっても構わない。また、端末650は、2台しか記載していないが、3台以上であっても構わない。通信装置600は、例えば、動画共有サイトやダウンロードサイト等として動作するサーバである。この場合、通信装置600は、同時接続数やダウンロード回数等に上限を設定し、通信サービス等の情報提供を行う機能を備える。また、通信装置600は、例えば、SIPサーバであっても良い。この場合、通信装置600は、端末650間の通信接続を制御し、通信に用いるセッション数に上限を設定する機能を備える。端末650は、例えば、PCPersonalComputerであり、通信装置600にネットワーク640を介してアクセスする機能を備える。図6に示すように、通信装置600は、少なくとも、情報受信部610、振分処理部620、並列カウント処理装置300、および情報送信部630を備える。通信装置600は、図示しないCPUおよびメインメモリによって構成される処理部不図示とアプリケーションプログラム等を記憶する記憶部不図示とで構成される。処理部は、記憶部に記憶されているアプリケーションプログラムをメインメモリに展開して、振分処理部620および並列カウント処理装置300を具現化する。また、処理部は、情報受信部610、振分処理部620、並列カウント処理装置300、および情報送信部630の間のデータの送受信等の制御を行う。情報受信部610は、端末650から送信された情報を受信し、受信した情報を振分処理部620に受け渡す。振分処理部620は、受信した情報の処理を担当するカウント処理部311を決定し、当該カウント処理部311に、受信した情報を受け渡す。担当するカウント処理部311の決定は、例えば、受信した情報の一部をハッシュ関数等に適用する処理に基づいて行われる。並列カウント処理装置300は、図3に示した構成と同様であるので、その詳細を省略する。情報送信部630は、情報受信部610が受信した情報に対応する応答情報を端末650に送信する。通信装置600における処理シーケンス例について、図7を用いて説明する。図7において、並列スレッド処理部310は、マルチスレッドプログラムの実行を開始する。その際、M本のスレッドを立ち上げるコアの個数Nが確定される。そして、ステップS701では、並列スレッド処理部310は、共有カウント記憶部320とローカルカウント記憶部312との整合性をとるための初期設定を実行する。ステップS702では、並列スレッド処理部310は、各カウント処理部311のカウント数の限界値の範囲0以上、ti未満を設定する。ステップS703では、情報受信部610は、端末650から情報qを受信する。ステップS704では、情報受信部610は、情報qを振分処理部620に受け渡す。ステップS705では、振分処理部620は、情報qの所定の箇所のデータに基づいて、担当するスレッドを決定する。具体的には、振分処理部620は、情報qの所定の箇所のデータをハッシュ関数等に適用して、担当するスレッドを決定する。ステップS706では、カウント処理部311は、カウント数が限界値の範囲内0以上、ti未満の処理では、ローカルカウント記憶部312を用いてカウント処理を実行する。または、ステップS707のように、カウント処理部311は、カウント数が限界値の範囲外となる場合には、共有カウント記憶部320に記憶されている残数rの更新処理を実行し、キャッシュコヒーレンスの必要な処理を行う。そして、ステップS708では、カウント処理部311は、残数rが通信装置600の累積カウント数の限界値の範囲0以上T未満内に入ると判定した場合、所定の処理を実行し、応答データを情報送信部630に受け渡す。所定の処理とは、例えば、受信した情報qに対応する応答データを生成することである。また、ステップS708において、カウント処理部311は、残数rが通信装置600の累積カウント数の限界値の範囲0以上T未満内に入らないと判定した場合、受信した情報qを受け付けられない旨の応答データを生成し、情報送信部630に受け渡す。ステップS709では、情報送信部630は、カウント処理部311から受け取った応答データを、応答情報としてネットワーク640を介して端末650に送信する。以上説明したように、第2実施形態の通信装置600は、第1実施形態の並列カウント処理装置300を備えている。通信装置600がセッションを用いて通信を管理する装置である場合には、カウントする数は、センション数接続回線数となる。また、通信装置600が通信サービス等の情報提供を実行する装置である場合には、カウントする数は、端末650によってダウンロードされた回数となる。そして、各カウント処理部311は、ローカルカウント記憶部312に記憶しているカウント数の限界値の範囲内であれば、共有カウント記憶部320の残数rを更新する必要がなく、キャッシュコヒーレンスのための処理を不要とする。そのため、通信装置600の並列カウント処理装置300は、並列に処理するスレッドの数を増加させても、スループットのスケーラビリティを確保することが可能となる。第3実施形態次に、第3実施形態では、複数のサーバによって構成されるクラスタ構成のサーバ群における並列カウント処理について、図8を用いて説明する。図8に示すように、サーバ群800は、複数のサーバ810と1台のサーバ810aとによって構成される。なお、サーバ810とサーバ810aとの違いは、サーバ810aがサーバ共有カウント記憶部320bを備えていることである。サーバ810は、図6に示した通信装置600と同様の構成を備えているが、図8では、情報受信部610、振分処理部620、および情報送信部630の記載を省略している。なお、サーバカウント記憶部320a320は、図6の共有カウント記憶部320の名称を変更しただけであり、サーバ810に割り当てられた累積カウント数の残数r1を記憶している。また、サーバ810aが備えるサーバ共有カウント記憶部320b320は、サーバ群800全体に割り当てられた累積カウント数の残数r2を記憶しており、複数のサーバ810からコヒーレンスを必要とする残数r2の書き換え更新の対象となる。まず、サーバ810のカウント処理部311は、ローカルカウント記憶部312に記憶されているカウント数の限界値の範囲内では、キャッシュコヒーレンスをともなわないカウント処理を実行する。そして、カウント処理部311は、ローカルカウント記憶部312に記憶されているカウント数の限界値の範囲外では、キャッシュコヒーレンスをともなう、サーバカウント記憶部320aの残数r1の更新図8中の破線矢印を実行しつつカウント処理を実行する。すなわち、サーバ810内では、ローカルカウント記憶部312が請求項に記載の第1の記憶部であり、サーバカウント記憶部320aが請求項に記載の第2の記憶部となる。次に、カウント処理部311は、サーバカウント記憶部320aの残数r1が0未満になった場合、サーバ810aのサーバ共有カウント記憶部320b320の残数r2を更新しつつ図8の一点鎖線、コヒーレンスを必要とするカウント処理を実行する。なお、図8では、1台のサーバ810aがサーバ共有カウント記憶部320bを備えるものとしたが、サーバ810のそれぞれが、サーバ810間で共通にアクセスされるサーバ共有カウント記憶部320bを備えるようにしても構わない。以上、第3実施形態のサーバ群800は、第1実施形態の並列カウント処理装置300図3参照と対比したとき、サーバ810が並列スレッド処理部310図3参照に相当し、サーバ共有カウント記憶部320b320が共有カウント記憶部320図3参照に相当する。すなわち、サーバ群800全体としては、ローカルカウント記憶部312およびサーバカウント記憶部320aが請求項に記載の第1の記憶部に対応し、サーバ共有カウント記憶部320bが請求項に記載の第2の記憶部に対応する。ただし、サーバカウント記憶部320aが請求項に記載の第1の記憶部に対応するという意味は、サーバ810のカウント数の限界値の範囲内では、サーバ共有カウント記憶部320bの残数r2を更新しない、すなわち、サーバ810間のコヒーレンスを不要とするということである。以上、第1実施形態で説明した並列カウント処理装置300では、各カウント処理部311は、ローカルカウント記憶部312に記憶されているカウント数の限界値の範囲内であれば、共有カウント記憶部320の残数rを更新する必要がないため、すなわち、キャッシュコヒーレンスのための処理を不要とするため、並列に処理するスレッドの数を増加させても、スループットのスケーラビリティを確保することが可能となる。第2実施形態では、第1実施形態で説明した並列カウント処理装置300を備える通信装置600について説明した。すなわち、通信装置600においては、ローカルカウント記憶部312に記憶されている限界値の範囲内であれば、並列に処理するスレッドの数を増加させても、スループットのスケーラビリティを確保することが可能となる。また、第3実施形態では、サーバ群800を構成する複数のサーバ810が第1実施形態の並列カウント処理装置300を備えるようにした。さらに、サーバ810aは、サーバ群800全体の残数r2を記憶しているサーバ共有カウント記憶部320bを備えた。そして、サーバ群800全体の構成は、第1実施形態の並列カウント処理装置300における並列カウント処理部310と共有カウント記憶部320との構成と類似するようにした。そのため、サーバ群800は、ローカルカウント記憶部312に記憶されている限界値の範囲内であれば、並列に処理するスレッドの数を増加させても、スループットのスケーラビリティを確保することが可能となる。"