(57)【特許請求の範囲】
【請求項１】
相互接続される複数の処理ノード（701、702）の複数のローカル・メモリ・パーティション（401、402、403、404）にわたって分散された入力データをソートするソート方法（1100）であって、
前記複数の処理ノード（701、702）の上に第1の複数のプロセスを展開することにより、前記分散された入力データを処理ノード（701、702）ごとに局所的にソートして、前記複数の処理ノード（701、702）の前記複数のローカル・メモリ・パーティション（401、402、403、404）に複数のソートされたリストを生成するステップ（1101）と、
前記複数の処理ノード（701、702）の前記複数のローカル・メモリ・パーティションにレンジ・ブロック（703、704、713、714）のシーケンスを生成するステップ（1102）であって、各レンジ・ブロックは、そのレンジ・ブロックの範囲に入るデータ値を格納するように構成される、レンジ・ブロックのシーケンスを生成するステップ（1102）と、
前記複数の処理ノード（701、702）の上に第2の複数のプロセスを展開することにより、前記複数のソートされたリストを前記レンジ・ブロック（703、704、713、714）の前記シーケンスにコピーするステップ（1103）であって、各レンジ・ブロック（703、704、713、714）は、データ値がそのレンジ・ブロックの範囲に入る前記複数のソートされたリストの複数の要素を、相互接続される前記複数の処理ノード（701、702）の間で受信する、前記レンジ・ブロック（703、704、713、714）の前記シーケンスにコピーするステップ（1103）と、
前記第2の複数のプロセスを使用することにより、前記レンジ・ブロック（703、704、713、714）の前記複数の要素を処理ノード（701、702）ごとに局所的にソートして、前記レンジ・ブロック（703、704、713、714）に複数のソートされた要素を生成するステップ（1104）と、
それらのレンジ・ブロックの範囲を参照して前記レンジ・ブロック（703、704、713、714）の前記シーケンスから前記複数のソートされた要素を順次的に読みだして、ソートされた入力データを取得するステップ（1105）と、を含む、
ソート方法（1100）。
【請求項２】
前記相互接続される複数の処理ノード（701、702）の前記複数のローカル・メモリ・パーティション（401、402、403、404）は、非均一アクセス・メモリとして構成される、請求項１に記載のソート方法（1100）。
【請求項３】
第1の複数のプロセスの数は、複数のローカル・メモリ・パーティション（401、402、403、404）の数と等しい、請求項１又は２に記載のソート方法（1100）。
【請求項４】
前記第1の複数のプロセスは、複数の互いに素なソートされたリストを生成する、請求項１乃至３のいずれか１項に記載のソート方法（1100）。
【請求項５】
前記分散された入力データを処理ノード（701、702）ごとに局所的にソートすることは、前記処理ノード（701、702）についてシリアルな方法で実行されるソート処理及び前記処理ノード（701、702）について並列的に実行されるソート処理のうちの一方に基づく、請求項１乃至４のいずれか１項に記載のソート方法（1100）。
【請求項６】
第2の複数のプロセスの数は、レンジ・ブロック（703、704、713、714）の数と等しい、請求項１乃至５のいずれか１項に記載のソート方法（1100）。
【請求項７】
各レンジ・ブロック（703、704、713、714）は異なる範囲を有する、請求項１乃至６のいずれか１項に記載のソート方法（1100）。
【請求項８】
各レンジ・ブロック（703、704、713、714）は、第1の複数のプロセスの数に対応する複数のソートされたリストの数を含む複数のソートされたリストを受信する、請求項１乃至７のいずれか１項に記載のソート方法（1100）。
【請求項９】
一方の処理ノード（701、702）の上で実行されている前記第2の複数のプロセスのうちの1つの第2のプロセスは、前記複数のソートされたリストを前記レンジ・ブロック（703、704、713、714）の前記シーケンスにコピーする際に、前記一方の処理ノード（701）のローカル・メモリから及び他方の処理ノード（702）のローカル・メモリから順次的に読みだす、請求項１乃至８のいずれか１項に記載のソート方法（1100）。
【請求項１０】
前記一方の処理ノード（701）の上で実行されている前記1つの第2のプロセスは、前記複数のソートされたリストを前記レンジ・ブロック（703、704、713、714）の前記シーケンスにコピーする際に、前記一方の処理ノード（701）のローカル・メモリにのみ書き込む、請求項９に記載のソート方法（1100）。
【請求項１１】
レンジ・ブロック（703、704、713、714）の前記シーケンスからの前記複数のソートされた要素の順次的な読み出しは、ハードウェア・プリフェッチングを利用することにより実行される、請求項１乃至１０のいずれか１項に記載のソート方法（1100）。
【請求項１２】
前記第2の複数のプロセスは、単一命令複数データ・ハードウェア・ブロックの上で実行されているベクトル化処理を含むベクトル化処理を使用し、前記第2の複数のプロセスは、前記複数のソートされたリストの値と前記レンジ・ブロック（703、704、713、714）の範囲とを比較し、前記複数のソートされたリストをレンジ・ブロック（703、704、713、714）の前記シーケンスにコピーする、請求項１乃至１１のいずれか１項に記載のソート方法（1100）。
【請求項１３】
前記複数の処理ノード（701、702）は、複数のソケット間接続によって相互接続され、
一方の処理ノード（701）のローカル・メモリは、別の処理ノード（702）に対するリモート・メモリになっている、請求項１乃至１２のいずれか１項に記載のソート方法（1100）。
【請求項１４】
処理システム（100）であって、
相互接続される複数の処理ノード（701、702）を含み、前記複数の処理ノード（701、702）の各々は、ローカル・メモリ（107、117）及び処理ユニット（109、119）を含み、入力データが、前記複数の処理ノード（701、702）の複数の前記ローカル・メモリ（107、117）にわたって分散され、前記処理ユニット（109、119）は、
前記複数の処理ノード（701、702）の上に第1の複数のプロセスを展開することにより、分散された前記入力データを処理ノード（701、702）ごとに局所的にソートして、前記複数の処理ノード（701、702）の複数のローカル・メモリ・パーティション（401、402、403、404）に複数のソートされたリストを生成し（1101）、
前記複数の処理ノード（701、702）の前記複数のローカル・メモリ・パーティションにレンジ・ブロック（703、704、713、714）のシーケンスを生成し（1102）、各レンジ・ブロックは、そのレンジ・ブロックの範囲に入るデータ値を格納するように構成され、
前記複数の処理ノード（701、702）の上に第2の複数のプロセスを展開することにより、前記複数のソートされたリストを前記レンジ・ブロック（703、704、713、714）の前記シーケンスにコピーし（1103）、各レンジ・ブロック（703、704、713、714）は、データ値がそのレンジ・ブロックの範囲に入る前記複数のソートされたリストの複数の要素を、相互接続される前記複数の処理ノード（701、702）の間で受信し、
前記第2の複数のプロセスを使用することにより、前記レンジ・ブロック（703、704、713、714）の前記複数の要素を処理ノード（701、702）ごとに局所的にソートして、前記レンジ・ブロック（703、704、713、714）に複数のソートされた要素を生成し（1104）、
それらのレンジ・ブロックの範囲を参照して前記レンジ・ブロック（703、704、713、714）の前記シーケンスから前記複数のソートされた要素を順次的に読みだして、ソートされた入力データを取得する（1105）、
ように構成される、処理システム（100）。
【請求項１５】
プログラム・コードを含むコンピュータ・プログラムであって、前記プログラム・コードは、コンピュータで実行されると、相互接続される複数の処理ノード（701、702）の複数のローカル・メモリ・パーティションにわたって分散された入力データを前記コンピュータにソートさせ、前記プログラム・コードは、
前記複数の処理ノード（701、702）の上に第1の複数のプロセスを展開することにより、前記分散された入力データを処理ノード（701、702）ごとに局所的にソートして、前記複数の処理ノード（701、702）の前記複数のローカル・メモリ・パーティション（401、402、403、404）に複数のソートされたリストを生成する（1101）命令と、
前記複数の処理ノード（701、702）の前記複数のローカル・メモリ・パーティションにレンジ・ブロック（703、704、713、714）のシーケンスを生成する（1102）命令であって、各レンジ・ブロックは、そのレンジ・ブロックの範囲に入るデータ値を格納するように構成される、レンジ・ブロックのシーケンスを生成する（1102）命令と、
前記複数の処理ノード（701、702）の上に第2の複数のプロセスを展開することにより、前記複数のソートされたリストを前記レンジ・ブロック（703、704、713、714）の前記シーケンスにコピーする（1103）命令であって、各レンジ・ブロック（703、704、713、714）は、データ値がそのレンジ・ブロックの範囲に入る前記複数のソートされたリストの複数の要素を、相互接続される前記複数の処理ノード（701、702）の間で受信する、前記レンジ・ブロック（703、704、713、714）の前記シーケンスにコピーする命令（1103）と、
前記第2の複数のプロセスを使用することにより、前記レンジ・ブロック（703、704、713、714）の前記複数の要素を処理ノード（701、702）ごとに局所的にソートして、前記レンジ・ブロック（703、704、713、714）に複数のソートされた要素を生成する（1104）命令と、
それらのレンジ・ブロックの範囲を参照して前記レンジ・ブロック（703、704、713、714）の前記シーケンスから前記複数のソートされた要素を順次的に読みだして、ソートされた入力データを取得する（1105）命令と、を含む、
コンピュータ・プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、複数の相互接続されている処理ノードを含む処理システム及びソート方法に関し、複数の相互接続されている処理ノードは、それらの複数の処理ノードにわたって分散されている入力データをソートする。本開示は、さらに、非対称メモリによって特徴づけられるコンピュータ・ハードウェア及びそのような非対称メモリのための並列ソート方法に関する。
【背景技術】
【０００２】
プロセッサ101、103、及びコア109、119等の各実行ユニットのための非対称メモリによって特徴づけられる現代のコンピュータ・ハードウェア100については、図1に示されるように、すべてのメモリ位置は、（ノード0  101に関しては）ローカル・メモリ107及びリモート・メモリ117に分割される。図1に図示されているように、ローカル・メモリ107に対するアクセス108は、物理的なアクセス・パス102の長さの差により、リモート・メモリ117に対するアクセスと比較してより速い。非対称メモリに起因する問題は、メモリの非対称性にとらわれない計算方法においては、ローカル・メモリ及びリモート・メモリの最適化された使用により達成されることが可能な実行コストと比較して、実行コストがより大きくなるということである。
【０００３】
ソートは、コンピューティングの多くの方法において使用される基本的な動作のうちの1つであると考えられている。例えば、データベース・システムにおいて並列クエリ方法により生成される複数のクエリ結果をソートする間に、非対称メモリにおいてソートすることが必要となるのは明らかである。SQL（Structured  Query  Language,  構造化照会言語）の”ORDER  BY”句及び”GROUP  BY”句は、そのようなソートを必要とする。ソート・マージ結合等のいくつかの結合方法は、ソートを必要とする。システムの複数のコアを利用して、ソートを並列化し、パフォーマンスを改善する多くのアルゴリズムが存在する。しかしながら、これらのアルゴリズムのいずれもが、メモリ・アーキテクチャの非対称性を考慮に入れていない。現状では、複数のソート・アルゴリズムにおいて、データはランダムに分割され、複数の異なるスレッドが、上記のランダムに分割されたデータに影響を与えるのを可能にされている。このことは、リモート・アクセス及びソケット相互接続の過剰な使用につながり、したがって、システム・スループットを大幅に制限する可能性がある。
【０００４】
現代のプロセッサ200は、図2に示されているように、マルチ・コア201、202、203、204、主メモリ205、及び複数のレベルのメモリ・キャッシュ206、207、208を使用する。例えば、US  6,427,148  B1、US  5,852,826  A、及びUS  7,536,432  B2に示されている現状のソート・アルゴリズムは、データの局所性及びキャッシュ・コンシャスネスの問題を取り扱っていない。そのことは、頻繁なキャッシュ・ミス及び不十分な実行につながる。プロセッサは、SIMD（single-instruction,  multiple-data,  単一命令複数データ）ハードウェアを装備しており、SIMDハードウェアは、いわゆるベクトル化処理を実行すること、すなわち、ごく近接する一連のデータに同一の演算を実行することを可能とする。現状のソート方法は、SIMD用には最適化されていない。
【発明の概要】
【０００５】
本発明の目的は、改良されたソート技術を提供することである。
【０００６】
上記の目的は、独立請求項の特徴によって達成される。さらなる実装の形態は、従属請求項、発明の詳細な説明及び図面から明らかである。
【０００７】
以下で説明される発明は、非対称メモリ・アクセスの待ち時間の差を利用して、高度にメモリ・アクセスが集中するソート・アルゴリズムにおいてメモリ・アクセスのコストを有意に低減することにより、改良されたソート・アルゴリズムを提供することが可能であるという知見に基づいている。
【０００８】
本発明を詳細に説明するために、以下の用語、略語、及び表記法が用いられる:
DBMS:  データベース管理システム
SQL:    構造化照会言語
CPU:    中央処理ユニット
SIMD:  単一命令複数データ
NUMA:  非均一メモリ・アクセス
【０００９】
データベース管理システム（database  management  system,  DBMS）は、特に、ユーザ、他のアプリケーション、及びデータベース自体と相互作用をして、データを保存し及び分析するアプリケーション用に設計されている。汎用データベース管理システム（database  management  system,  DBMS）は、複数のデータベースの定義、構築、クエリ実行、更新、及び管理を可能にするように設計されるソフトウェア・システムである。複数の異なるDBMSは、単一のアプリケーションが1つよりも多くのデータベースと連携するのを可能にするSQL及びオープン・データベース・コネクティビティ（ODBC）又はＪａｖａデータベース・コネクティビティ（JDBC）等の規格を使用して相互運用することが可能である。
【００１０】
SQL（Structured  Query  Language,  構造化照会言語）は、関係データベース管理システム（relational  database  management  system,  RDBMS）の保持されているデータを管理するように設計されている専用プログラミング言語である。
【００１１】
本来的に関係代数及びタプル関係演算に基づいて、SQLは、データ定義言語及びデータ操作言語からなる。SQLの範囲は、データ挿入、クエリ、更新及び削除、スキーマの生成及び修正、並びにデータ・アクセス制御を含む。
【００１２】
単一命令複数データ（single-instruction,  multiple-data,  SIMD）は、コンピュータ・アーキテクチャの分類における並列のコンピュータのクラスである。SIMDは、複数の処理要素を使用するコンピュータを記述し、それらの複数の処理要素は、複数のデータ・ポイント上で同一の演算を同時に実行する。したがって、そのようなマシンは、例えば、アレイ・プロセッサ又はグラフィックス・プロセッシング・ユニット（GPU）といったデータ・レベル並列処理を利用する。
【００１３】
第1の態様によれば、本発明は、相互接続される複数の処理ノードの複数のローカル・メモリ・パーティションにわたって分散された入力データをソートするソート方法に関し、上記のソート方法は、前記複数の処理ノードの上に第1の複数のプロセスを展開することにより、前記分散された入力データを処理ノードごとに局所的にソートして、前記複数の処理ノードの前記複数のローカル・メモリ・パーティションに複数のソートされたリストを生成するステップと、前記複数の処理ノードの前記複数のローカル・メモリ・パーティションにレンジ・ブロックのシーケンスを生成するステップであって、各レンジ・ブロックは、そのレンジ・ブロックの範囲に入るデータ値を格納するように構成される、レンジ・ブロックのシーケンスを生成するステップと、前記複数の処理ノードの上に第2の複数のプロセスを展開することにより、前記複数のソートされたリストを前記レンジ・ブロックの前記シーケンスにコピーするステップであって、各レンジ・ブロックは、データ値がそのレンジ・ブロックの範囲に入る前記複数のソートされたリストの複数の要素を受信する、前記レンジ・ブロックの前記シーケンスにコピーするステップと、前記第2の複数のプロセスを使用することにより、前記レンジ・ブロックの前記複数の要素を処理ノードごとに局所的にソートして、前記レンジ・ブロックに複数のソートされた要素を生成するステップと、それらのレンジ・ブロックの範囲を参照して前記レンジ・ブロックの前記シーケンスから前記複数のソートされた要素を順次的に読みだして、ソートされた入力データを取得するステップとを含む。
【００１４】
上記のソート・アルゴリズムの効率は、局所的なデータ・アクセスを大幅に使用し、それによってリモート・アクセスのペナルティを回避することによって改善される。複数の処理ノードの複数のローカル・メモリ・パーティションの上にレンジ・ブロックのシーケンスを生成すると、ランダム・アクセスではなく、データへの順次的なアクセスを使用することが可能となり、アクセスの局所性及びキャッシュの効率を改善する。特に、リモート・アクセスの場合には、順次的なアクセスを使用すると、リモート・アクセスのペナルティを相殺するプリフェッチングを利用することが可能となる。計算の際に近接するデータ項目のベクトルを使用すると、SIDMを利用することが可能となる。
【００１５】
第1の態様に従ったソート方法の第1の可能な実装形態において、前記相互接続される複数の処理ノードの前記複数のローカル・メモリ・パーティションは、非対称メモリとして構成される。
【００１６】
ランダム・アクセスの代わりにデータへの順次的なアクセスを使用すると、非対称メモリ上でのアクセスの局所性及びキャッシュの効率を改善する。
【００１７】
第1の態様に従った、したがって、又は第1の態様の第1の実装形態に従ったソート方法の第2の可能な実装形態において、第1の複数のプロセスの数は、複数のローカル・メモリ・パーティションの数と等しい。
【００１８】
第1の複数のプロセスの数が複数のローカル・メモリ・パーティションの数と等しい場合には、各ローカル・メモリ・パーティションは、それぞれの第1のプロセスによって並列に処理されることが可能となり、それによって処理速度を増加させる。
【００１９】
第1の態様に従った、したがって、又は第1の態様の先行する実装形態のいずれかに従ったソート方法の第3の可能な実装形態において、前記第1の複数のプロセスは、複数の互いに素なソートされたリストを生成する。
【００２０】
第1の複数のプロセスが複数の互いに素なソートされたリストを生成する場合には、他方のリストにアクセスすることなく、一方のリストにおける局所的なソートを実行することができる。
【００２１】
第1の態様に従った、したがって、又は第1の態様の先行する実装形態のいずれかに従ったソート方法の第4の可能な実装形態において、分散された入力データを処理ノードごとに局所的にソートすることは、シリアル・ソート手順及び並列ソート手順の一方に基づく。
【００２２】
ソートするステップでの局所的なメモリ・アクセスのみの使用は、ソケット間通信のオーバーヘッドを減少させ、したがって、計算の複雑さを減少させ、そして、ソート方法のパフォーマンスを改善する。
【００２３】
第1の態様に従った、したがって、又は第1の態様の先行する実装形態のいずれかに従ったソート方法の第5の可能な実装形態において、第2の複数のプロセスの数は、レンジ・ブロックの数と等しい。
【００２４】
第2の複数の処理の数がレンジ・ブロックの数と等しい場合には、各レンジ・ブロックは、それぞれの第2のプロセスによって並列に処理されることが可能となり、それによって処理速度を増加させる。
【００２５】
第1の態様に従った、したがって、又は第1の態様の先行する実装形態のいずれかに従ったソート方法の第6の可能な実装形態において、各レンジ・ブロックは異なる範囲を有する。
【００２６】
各レンジ・ブロックが異なる範囲を有する場合には、各メモリ・パーティションは、異なるデータについて動作することが可能であり、それによって処理速度を増加させる並列処理を可能とする。
【００２７】
第1の態様に従った、したがって、又は第1の態様の先行する実装形態のいずれかに従ったソート方法の第7の可能な実装形態において、各レンジ・ブロックは、複数のソートされたリスト、特に、第1の複数のプロセスの数に対応する複数のソートされたリストの数を受信する。
【００２８】
複数の異なる処理ノードからの同様の範囲内のデータを一方の処理ノードに集中させることが可能であり、方法の計算上の効率を改善する。
【００２９】
第1の態様に従った、したがって、又は第1の態様の先行する実装形態のいずれかに従ったソート方法の第8の実装形態において、一方の処理ノードの上で実行されている前記第2の複数のプロセスのうちの1つの第2のプロセスは、前記複数のソートされたリストを前記レンジ・ブロックの前記シーケンスにコピーする際に、前記一方の処理ノードのローカル・メモリから及び他方の処理ノードのローカル・メモリから順次的に読みだす。
【００３０】
前記複数のソートされたリストを前記レンジ・ブロックの前記シーケンスにコピーするステップでの順次的なリモート・メモリ・アクセスの使用は、リモート・アクセスのペナルティを減少させる。
【００３１】
第1の態様の第8の実装形態に従ったソート方法の第9の可能な実装形態において、前記一方の処理ノードの上で実行されている前記1つの第2のプロセスは、前記複数のソートされたリストを前記レンジ・ブロックの前記シーケンスにコピーする際に、前記一方の処理ノードのローカル・メモリにのみ書き込む。
【００３２】
このようにして、前記1つの第2のプロセスは、メモリに書き込む際にソケット間接続応答を待つ必要はない。
【００３３】
第1の態様に従った、したがって、又は第1の態様の先行する実装形態のいずれかに従ったソート方法の第10の可能な実装形態において、レンジ・ブロックの前記シーケンスからの前記複数のソートされた要素の順次的な読み出しは、ハードウェア・プリフェッチングを利用することにより実行される。
【００３４】
ハードウェア・プリフェッチングを利用すると、処理速度が増加する。
【００３５】
第1の態様に従った、したがって、又は第1の態様の先行する実装形態のいずれかに従ったソート方法の第11の可能な実装形態において、前記第2の複数のプロセスは、ベクトル化処理、特に、単一命令複数データ・ハードウェア・ブロックの上で実行されているベクトル化処理を使用し、前記第2の複数のプロセスは、前記複数のソートされたリストの値と前記レンジ・ブロックの範囲とを比較し、前記複数のソートされたリストをレンジ・ブロックの前記シーケンスにコピーする。
【００３６】
前記複数の要素を処理ノードごとに局所的にソートして前記レンジ・ブロックに複数のソートされた要素を生成するステップの間でのSIMD等のベクトル化処理の使用は、ソートのパフォーマンスを改善する。コピーする間のSIMD等のベクトル化処理の使用は、全メモリ帯域幅を利用することを可能にする。
【００３７】
第1の態様に従った、したがって、又は第1の態様の先行する実装形態のいずれかに従ったソート方法の第12の可能な実装形態において、前記複数の処理ノードは、複数のソケット間接続によって相互接続され、一方の処理ノードのローカル・メモリは、別の処理ノードに対するリモート・メモリになっている。
【００３８】
上記の方法は、標準的なハードウェア・アーキテクチャで実装されてもよく、そのハードウェア・アーキテクチャは非対称メモリを使用してもよく、非対称メモリは複数のソケット間接続によって相互接続されていてもよい。上記の方法は、マルチ・コア・プロセッサ・プラットフォーム及び多数コア・プロセッサ・プラットフォームに適用されてもよい。
【００３９】
第2の態様によれば、本発明は、処理システムに関し、その処理システムは、相互接続される複数の処理ノードを含み、前記複数の処理ノードの各々は、ローカル・メモリ及び処理ユニットを含み、入力データが、前記複数の処理ノードの複数の前記ローカル・メモリにわたって分散され、前記処理ユニットは、分散された前記入力データを処理ノードごとに局所的にソートして、前記複数の処理ノードの複数のローカル・メモリに複数のソートされたリストを生成し、前記複数の処理ノードの前記複数のローカル・メモリにレンジ・ブロックのシーケンスを生成し、各レンジ・ブロックは、そのレンジ・ブロックの範囲に入るデータ値を格納するように構成され、前記複数のソートされたリストを前記レンジ・ブロックの前記シーケンスにコピーし、各レンジ・ブロックは、データ値がそのレンジ・ブロックの範囲に入る前記複数のソートされたリストの複数の要素を受信し、前記レンジ・ブロックの前記複数の要素を処理ノードごとに局所的にソートして、前記レンジ・ブロックに複数のソートされた要素を生成し、それらのレンジ・ブロックの範囲を参照して前記レンジ・ブロックの前記シーケンスから前記複数のソートされた要素を順次的に読みだして、ソートされた入力データを取得する、ように構成される。
【００４０】
分散された入力データをソートする上記の新たな処理システムは、ランダムに分散された値の大規模なセットをソートすることが可能であり、それによってハードウェア・リソースの利用効率を最大化する。
【００４１】
第3の態様によれば、本発明は、読み取り可能な記憶媒体を含むコンピュータ・プログラム製品に関し、読み取り可能な記憶媒体は、コンピュータによる使用のためにプログラム・コードを格納し、前記プログラム・コードは、相互接続される複数の処理ノードの複数のローカル・メモリ・パーティションにわたって分散された入力データをソートし、前記プログラム・コードは、前記複数の処理ノードの上で実行されている第1の複数のプロセスを使用することにより、前記分散された入力データを処理ノードごとに局所的にソートして、前記複数の処理ノードの前記複数のローカル・メモリ・パーティションに複数のソートされたリストを生成する命令と、前記複数の処理ノードの前記複数のローカル・メモリ・パーティションにレンジ・ブロックのシーケンスを生成する命令であって、各レンジ・ブロックは、そのレンジ・ブロックの範囲に入るデータ値を格納するように構成される、レンジ・ブロックのシーケンスを生成する命令と、第2の複数のプロセスを使用することにより、前記複数のソートされたリストを前記レンジ・ブロックの前記シーケンスにコピーする命令であって、各レンジ・ブロックは、データ値がそのレンジ・ブロックの範囲に入る前記複数のソートされたリストの複数の要素を受信する、前記レンジ・ブロックの前記シーケンスにコピーする命令と、前記第2の複数のプロセスを使用することにより、前記レンジ・ブロックの前記複数の要素を処理ノードごとに局所的にソートして、前記レンジ・ブロックに複数のソートされた要素を生成する命令と、それらのレンジ・ブロックの範囲を参照して前記レンジ・ブロックの前記シーケンスから前記複数のソートされた要素を順次的に読みだして、ソートされた入力データを取得する命令とを含む。
【００４２】
上記のコンピュータ・プログラムは、柔軟に設計することが可能であり、それによって要件の更新の達成が容易になる。上記のコンピュータ・プログラム製品は、マルチ・コア処理システム及び多数コア処理システムで実行されてもよい。
【００４３】
したがって、本発明の複数の態様は、以下でさらに説明されるように、改良されたソート技術を提供する。
【図面の簡単な説明】
【００４４】
本発明のさらなる実施形態は、以下の図面を参照して説明される。
【００４５】
【図１】ある1つの実装形態に従った現代のコンピュータ・ハードウェア100を図示する概略図である。
【図２】ある1つの実装形態に従った現代のプロセッサ200を図示する概略図である。
【図３】ある1つの実装形態に従った一例としてのソート方法300を示す概略図である。
【図４】ある1つの実装形態に従い図3に示されるソート方法300の一例としての区分化動作301を図示する概略図である。
【図５】ある1つの実装形態に従い図3に図示されるソート方法300の一例としての局所的な区分ソート動作302を示す概略図である。
【図６】ある1つの実装形態に従い図3に図示されるソート方法300の抽出及びソート動作303の中の一例としてのスレッド展開動作303aを図示する概略図である。
【図７】ある1つの実装形態に従い図3に図示されるソート方法300の一例としての抽出し及びソートする動作303を図示する概略図である。
【図８】ある1つの実装形態に従い図3に図示されるソート方法300の一例としての局所的な範囲ソート動作304を図示する概略図である。
【図９】ある1つの実装形態に従い図3に図示されるソート方法300の一例としてのマージ動作305を図示する概略図である。
【図１０】区分化されたデータにわたる並列クエリ処理を使用して、データベース管理システムにおいてクエリ結果をソートする一例としての方法1000を図示する概略図である。
【図１１】ある1つの実装形態に従った一例としてのソート方法1100を図示する概略図である。
【発明を実施するための形態】
【００４６】
以下の詳細な説明において、複数の添付の図面が参照され、それらの複数の添付の図面は、以下の詳細な説明の一部を構成し、以下の詳細な説明では、実例として複数の特定の態様が示され、それらの複数の特定の態様の中の開示を実用化することができる。複数の他の態様を利用することが可能であり、構造的な変更及び論理的な変更が、本開示の範囲から逸脱することなく為され得るということを理解すべきである。したがって、以下の詳細な説明は、限定的な意義に解釈されるべきではなく、本開示の範囲は、添付の特許請求の範囲によって規定される。
【００４７】
本明細書で説明されるデバイス及び方法は、分散された入力データをソートすること、ローカル・メモリの区分化、及び相互接続される複数の処理ノードに基づいていてもよい。説明される方法と関連して記載される解説は、その方法を実行するように構成される対応するデバイス又は対応するシステムにも当てはまり、逆もまた同様であるということを理解すべきである。例えば、ある特定の方法ステップが説明される場合に、その説明される方法ステップを実行するユニットが明示的には記載されておらず、或いは図面に図示されていないときであっても、対応するデバイスは、そのようなユニットを含んでいてもよい。さらに、本明細書で説明されるさまざまな一例としての態様に関する特徴は、特に示される場合を除き、互いに組み合わせられてもよいということを理解すべきである。
【００４８】
本明細書で説明される方法及びデバイスは、非対称メモリ及び、特に、SQLを使用するDBMS等のデータベース管理システムを含むハードウェア・アーキテクチャの中で実装されてもよい。説明されるデバイス及びシステムは、集積回路及び/又は受動回路を含んでもよく、さまざまな技術に従って製造されてもよい。例えば、回路は、論理集積回路、アナログ集積回路、混合信号集積回路、光回路、メモリ回路、及び/又は受動集積回路として設計されてもよい。
【００４９】
図3は、ある1つの実装形態に従った図1及び図2を参照して上記で説明されたハードウェア・システム100及び200等の相互接続されている複数の処理ノード101及び103の複数のローカル・メモリ・パーティション107及び117にわたって分散される入力データをソートする一例としてのソート方法300を図示する概略図を示している。
【００５０】
ソート方法300は、多数のメモリ・パーティションを調達する非対称メモリにわたって分散された入力データを区分化するステップ301を含んでいてもよい。ソート方法300は、例えば、いずれかの既知の局所的なソート方法を使用することにより、上記の複数のメモリ・パーティションを局所的にソートするステップ302を含んでいてもよい。ソート動作302は、各メモリ・パーティションについて実行されてもよい。ソート方法300は、局所的なソート・ステップ302の結果を抽出し、複数の範囲、すなわち、特定の範囲に入るデータを格納するように構成されている複数のメモリ区分にコピーする、抽出し及びコピーするステップ303を含んでいてもよい。上記の抽出し及びコピーする動作303は、各メモリ・パーティションについて実行されてもよい。ソート方法300は、例えば、いずれかの既知の局所的なソート方法を使用することにより、各範囲を局所的にソートするステップ304を含んでいてもよい。ソートする動作304は、各範囲について実行されてもよい。ソート方法300は、複数のソートされた範囲をマージするステップ305を含んでいてもよい。複数の異なるソートするステップ又はソートする動作は、図4乃至9を参照して以下でさらに説明される。
【００５１】
本開示において説明される方法300は、5ステップ以内に、ランダムに分散された値の大規模なセットをソートすることが可能であり、したがって、ハードウェア・リソースの利用効率を最大化することが可能であってもよい。上記の方法300は、非対称メモリ・アクセスの待ち時間の差を利用して、ソート等の高度にメモリ・アクセスが集中するアルゴリズムにおいてメモリ・アクセスのコストを有意に低減する。
【００５２】
図4は、ある1つの実装形態に従い図3に図示されるソート方法300の一例としての区分化動作301を図示する概略図を示している。
【００５３】
入力データは、非対称メモリ400にわたって区分化される。入力データは、非対称メモリ400の複数のメモリ・バンク401、402、403、404にわたって分散される。並列クエリ処理方法等の最も並列的なデータ処理方法は区分化されたデータを生成するため、上記の区分化するステップ301は任意に選択されるものであってもよい。
【００５４】
図5は、ある1つの実装形態に従い図3に図示されるソート方法300の一例としての局所的なパーティション・ソート動作302を図示する概略図を示している。
【００５５】
複数のスレッドが展開され、データを局所的にソートする。第1のメモリ・バンク401上のデータ“1,5,3,2,6,4,7”が、第1のメモリ・バンク401上で局所的にソートされ、ソートされたデータ“1,2,3,4,5,6,7”を提供する。第2のメモリ・バンク402上のデータ“5,3,2,4,7,6,1”が、第2のメモリ・バンク402上で局所的にソートされ、ソートされたデータ“1,2,3,4,5,6,7”を提供する。第3のメモリ・バンク403上のデータ“1,2,3,4,5,6,7”が、第3のメモリ・バンク403上で局所的にソートされ、ソートされたデータ“1,2,3,4,5,6,7”を提供する。第4のメモリ・バンク404上のデータ“7,6,5,4,3,2,1”が、第4のメモリ・バンク404上で局所的にソートされ、ソートされたデータ“1,2,3,4,5,6,7”を提供する。
【００５６】
スレッドの数は、パーティションの数と等しくてもよい（4つのパーティション401、402、403、404が図5に示されているが、別の数であってもよい）。すべてのスレッドは、複数の互いに素なソートされたリストを生成してもよく、これらの複数の互いに素なソートされたリストは、以下で説明されるようにマージされてもよく、それにより最終のソートされた出力を得る。ソートする動作302のためにシリアル又は並列のいずれかのソート方法を使用してもよい。ローカル・アクセスが十分に利用される。
【００５７】
図6は、ある実装形態に従い図3に図示されるソート方法300の抽出し及びソートする動作303の中の一例としてのスレッド展開動作303aを図示する概略図を示している。
【００５８】
データ・サンプルに基づいて、範囲のセット600が生成され、範囲のセット600は、複数の異なるスレッドの間でソートされたデータを分散するのに使用されてもよい。上記の範囲は、入力データのサブセットであってもよく、入力データは、図6の例では、例えば、1から7まで及ぶ与えられた値の範囲の複数の値を含んでもよい。上記の範囲は、（概ね）同じサイズとなるように計算されてもよい。上記のことは、ソートする段階で実行されるサンプリングを使用して得られる値の分布ヒストグラムを使用して達成されてもよい。上記の範囲は、すべてのパーティション401、402、403、404からのデータに基づいて計算されてもよい。図6においては、4つの範囲が生成され、第1の範囲はデータ値1及び2を含み、第2の範囲はデータ値3及び4を含み、第3の範囲はデータ値5及び6を含み、第4の範囲はデータ値7を含む。
【００５９】
スレッドの数は、例えば、図6によれば4であるが、いずれかの他の数であってもよく、範囲の数と同じであってもよい。第1のスレッド“スレッド1”は第1の範囲と関連しており、第2のスレッド“スレッド2”は第2の範囲と関連しており、第3のスレッド“スレッド3”は第3の範囲と関連しており、第4のスレッド“スレッド4”は第4の範囲と関連している。
【００６０】
範囲の数に基づいて、メモリの同じ数のレンジ・ブロックが複数の異なるメモリ・バンクの中に生成されてもよい。各々のメモリ・バンクの中のレンジ・ブロックの数は、利用可能であるすべてのコアを利用するために同じになっていてもよい。
【００６１】
図7は、ある実装形態に従い図3に図示されるソート方法300の一例としての抽出し及びコピーする動作303を図示する概略図を示している。
【００６２】
値に基づいて、複数のソートされたリスト401、402、403、404からのデータを新たに生成されたレンジ・ブロック703、704、713、714にコピーするために、複数のスレッドが展開されてもよい。結果として、各々のレンジ・ブロック703、704、713、714は、1つの与えられた値の範囲の中に複数のソートされたリストを有することとなる。図7の例では、メモリ・バンク0（701）の中の第1のレンジ・ブロック703は、データ値1及び2を含んでおり、メモリ・バンク0（701）の中の第2のレンジ・ブロック704は、データ値3及び4を含んでおり、メモリ・バンク1（702）の中の第3のレンジ・ブロック713は、データ値5及び6を含んでおり、メモリ・バンク1（702）の中の第4のレンジ・ブロック714は、データ値7を含んでいる。スレッドは、ローカル・メモリに対してのみ書き込んでもよく、ローカル・メモリ及びリモート・メモリの双方から順次的に読み出してもよい。値の比較を実行する間に、スレッドは、隣接するシリアル・データを使用してもよい。SIMDの利点を利用することが可能である。
【００６３】
図8は、ある実装形態に従い図3に図示されるソート方法300の一例としての局所的な範囲ソート動作304を図示する概略図を示している。
【００６４】
（レンジ・ブロックごとに1つの）同じスレッドは、図6及び図7を参照して上記で説明されたように利用されてもよく、コピーされたデータのインプレースのソートを実行してもよい。メモリ・バンク0の中の第1のレンジ・ブロック703は、ノード0（701）に実装されてもよく、例えば、スレッド1を使用することにより、"12121212"から"11112222"にデータをソートしてもよい。メモリ・バンク0の中の第2のレンジ・ブロック704は、ノード0（701）に実装されてもよく、例えば、スレッド2を使用することにより、"34343434"から"33334444"にデータをソートしてもよい。メモリ・バンク1の中の第3のレンジ・ブロック713は、ノード1（702）に実装されてもよく、例えば、スレッド3を使用することにより、"56565656"から"55556666"にデータをソートしてもよい。メモリ・バンク1の中の第4のレンジ・ブロック714は、ノード1（702）に実装されてもよく、例えば、スレッド4を使用することにより、"7777"から"7777"にデータをソートしてもよい。
【００６５】
結果として、各々のレンジ・ブロック703、704、713、714は、特定の範囲の中にソートされたデータを有してもよい。局所的なソートは、例えば、シリアル又は並列のいずれかの既知のソート方法を使用して実行されてもよい。データ・アクセスの局所性を十分に利用することが可能である。データの編成は、比較及びコピーのためのSIMDの利用に役立ち得る。
【００６６】
図9は、ある実装形態に従い図3に図示されるソート方法300の一例としてのマージ動作305を図示する概略図を示している。
【００６７】
ソートされた結果を得るために、レンジ・ブロック703、704、713、714のシーケンスにわたって反復が実行されてもよく、データが読みだされてもよい。データは、ローカル位置701及びリモート位置702の双方から順次的に読み出されてもよく、したがって、ハードウェア・プリフェッチングを利用することによりソケットからソケットへの通信の影響を減少させる。
【００６８】
図10は、区分化されたデータにわたる並列クエリ処理を使用して、データベース管理システムにおいてクエリ結果をソートする一例としての方法1000を図示する概略図を示している。
【００６９】
図10は、区分化されたデータにわたる並列クエリ処理を伴うデータベース管理システムにおいて、複数のクエリ結果をソートする1つの特定の方法を記載している。一例としてのクエリは、“SELECT  A,…FROM  table  WHERE…ORDER  BY  A”の形式になっているSQL文によって表現されてもよい。方法1000は、ORDER  BY句の実行に適用されてもよい。クエリ・プロセッサは、各スレッドのローカル・メモリ（パーティション）に書き込まれる複数のソートされていない結果を、並列ワーカー・スレッドに生成してもよい。上記のことは、図10のステップ1で図示されている。
【００７０】
ステップ2において、各々のソートされていないパーティションが、専用スレッドにより局所的にソートされてもよい。ステップ3において、（a）概ね等量のデータを含むように複数のデータ値範囲を計算し、（b）ワーカー・スレッドに対してローカルとなっているメモリにデータ値範囲の複数のパーティションを割り当て、（c）ステップ2で生成された複数のソートされたパーティションを順次的にスキャンし、関連するデータを抽出する各々のワーカー・スレッドによって、データ値範囲に整合するデータを上記のデータ値範囲の複数のパーティションに追加する、といった方法で、データを区分化してもよい。ステップ4において、各々の範囲が局所的にソートされてもよく、結果としてのセット（結果としてのパーティション）の正しくソートされた部分を生成してもよい。ステップ5において、複数の結果としてのパーティションを正しい順序でリンクさせ、その順序で順次的に複数の結果としてのパーティションを読み出すことにより、結果としてのセットの複数の部分をマージしてもよい。
【００７１】
一例では、方法1000は、JOIN句を有するSQLクエリ又は非明示的な結合として表現されるSQLクエリを実行する過程で、データベース管理システムにおいてソートを実行するのに適用されてもよい。そのような場合には、上記のステップ2乃至4は、マージ-結合方法との関連で複数の入力テーブルをソートするのに適用されてもよい。
【００７２】
別の例では、方法1000は、GROUP  BY句を有するSQLクエリを実行する過程で、データベース管理システムにおいてソートを実行するのに適用されてもよい。そのような場合には、上記のステップ2乃至4は、集約計算結果（グループ）をソートするのに適用されてもよい。
【００７３】
図11は、一例としてのソート方法1100を図示する概略図を示しており、ソート方法1100は、ある実装形態に従った相互接続される複数の処理ノードの複数のローカル・メモリ・パーティションにわたって分散された入力データをソートする。
【００７４】
方法1100は、複数の処理ノードの上に第1の複数のプロセスを展開することにより、分散された入力データを処理ノードごとに局所的にソートして、複数の処理ノードの複数のローカル・メモリ・パーティションに複数のソートされたリストを生成するステップ1101を含んでもよい。方法1100は、複数の処理ノードの複数のローカル・メモリ・パーティションにレンジ・ブロックのシーケンスを生成するステップ1102を含んでもよく、各レンジ・ブロックは、そのレンジ・ブロックの範囲に入るデータ値を格納するように構成される。方法1100は、複数の処理ノードの上に第2の複数のプロセスを展開することにより、複数のソートされたリストをレンジ・ブロックのシーケンスにコピーするステップ1103を含んでもよく、各レンジ・ブロックは、値がそのレンジ・ブロックの範囲に入る複数のソートされたリストの複数の要素を受信する。方法1100は、第2の複数のプロセスを使用することにより、レンジ・ブロックの複数の要素を処理ノードごとに局所的にソートして、レンジ・ブロックに複数のソートされた要素を生成するステップ1104を含んでもよい。方法1100は、それらのレンジ・ブロックの範囲を参照してレンジ・ブロックのシーケンスから複数のソートされた要素を順次的に読みだして、ソートされた入力データを取得するステップ1105を含んでもよい。
【００７５】
複数のソートされたリストを生成するステップ1101は、図3を参照して上記で説明された複数のメモリ・パーティションを局所的にソートするステップ302に対応していてもよい。レンジ・ブロックのシーケンスを生成するステップ1102及びコピーするステップ1103は、図3を参照して上記で説明された抽出し及びソートする動作303に対応していてもよい。複数のソートされた要素を生成するステップ1104は、図3を参照して上記で説明された各範囲を局所的にソートするステップ304に対応していてもよい。ソートされた入力データを取得するステップ1105は、図3を参照して上記で説明された複数のソートされた範囲をマージするステップ305に対応していてもよい。
【００７６】
一例において、相互接続される複数の処理ノードの複数のローカル・メモリ・パーティションは、非対称メモリとして構成されてもよい。一例において、第1の複数のプロセスの数は、複数のローカル・メモリ・パーティションの数と等しくなっていてもよい。一例において、第1の複数のプロセスは、複数の互いに素なソートされたリストを生成してもよい。一例において、分散された入力データを処理ノードごとに局所的にソートすることは、シリアル・ソート手順及び並列ソート手順の一方に基づいてもよい。一例において、第2の複数のプロセスの数は、レンジ・ブロックの数と等しくなっていてもよい。一例において、各レンジ・ブロックは異なる範囲を有していてもよい。一例において、各レンジ・ブロックは、複数のソートされたリスト、特に、第1の複数のプロセスの数に対応する複数のソートされたリストの数を受信してもよい。一例において、一方の処理ノードの上で実行されている第2の複数のプロセスのうちの1つの第2のプロセスは、複数のソートされたリストをレンジ・ブロックのシーケンスにコピーする際に、一方の処理ノードのローカル・メモリから及び他方の処理ノードのローカル・メモリから順次的に読みだしてもよい。一例において、複数のソートされたリストをレンジ・ブロックのシーケンスにコピーする際に、一方の処理ノードのローカル・メモリにのみ書き込んでもよい。一例において、レンジ・ブロックのシーケンスからの複数のソートされた要素の順次的な読み出しは、ハードウェア・プリフェッチングを利用することにより実行されてもよい。一例において、第2の複数のプロセスは、ベクトル化処理、特に、単一命令複数データ・ハードウェア・ブロックの上で実行されているベクトル化処理を使用してもよく、第2の複数のプロセスは、複数のソートされたリストの値とレンジ・ブロックの範囲とを比較し、複数のソートされたリストをレンジ・ブロックのシーケンスにコピーしてもよい。一例において、複数の処理ノードは、複数のソケット間接続によって相互接続されていてもよく、一方の処理ノードのローカル・メモリは、別の処理ノードに対するリモート・メモリになっていてもよい。
【００７７】
本発明は、1つのシステム内の異なるメモリ・バンクについてのアクセス時間の差を利用する方法を含む。上記のことは、ソケットからソケットへの通信リンクの使用を最小限にすることにより達成されてもよい。今日まで、いずれの方法も、ランダムに配列されたデータをソートし、複数の異なるソケットをこえてデータにアクセスすることを最小化するように構成されてはいない。測定ツールを使用することにより、ソート動作のために、複数のアクセスパターン及び複数のソケットを通じるデータ・フローを決定してもよい。
【００７８】
本明細書で説明される方法、システム、及びデバイスは、ディジタル信号プロセッサ（Digital  Signal  Processor,  DSP）の中、マイクロ・コントローラの中、又はいずれかの他の付随的なプロセッサの中のソフトウェアとして、或いは、特定用途向け集積回路（application  specific  integrated  circuit,  ASIC）の中のハードウェア回路として実装されてもよい。
【００７９】
本発明は、例えば、従来のモバイル・デバイスの利用可能なハードウェアの中で又は本明細書で説明される方法を処理するために専用化された新たなハードウェアの中で等、ディジタル電子回路の中で、又はコンピュータ・ハードウェア、ファームウェア、若しくはソフトウェアの中で、又はそれらの組み合わせの中で実装されてもよい。
【００８０】
本開示は、コンピュータ実行可能なコード又は複数のコンピュータ実行可能な命令を含むコンピュータ・プログラム製品をサポートしてもよく、コンピュータ実行可能なコード又は複数のコンピュータ実行可能な命令は、実行されると、少なくとも1つのコンピュータが、本明細書で説明される実行するステップ及び計算するステップ、特に、図3乃至9を参照して上記で説明される方法300並びに図10及び図11を参照して上記で説明される方法1000及び1100を実行するようにさせる。そのようなコンピュータ・プログラム製品は、読み取り可能な記憶媒体を含んでもよく、読み取り可能な記憶媒体は、コンピュータによる使用のためにプログラム・コードを格納していてもよい。プログラム・コードは、相互接続される複数の処理ノードの複数のローカル・メモリ・パーティションにわたって分散された入力データをソートするように構成されてもよい。プログラム・コードは、複数の処理ノードの上で実行されている第1の複数のプロセスを使用することにより、分散された入力データを処理ノードごとに局所的にソートして、複数の処理ノードの複数のローカル・メモリ・パーティションに複数のソートされたリストを生成する命令と、複数の処理ノードの複数のローカル・メモリ・パーティションにレンジ・ブロックのシーケンスを生成する命令であって、各レンジ・ブロックは、そのレンジ・ブロックの範囲に入るデータ値を格納するように構成される、レンジ・ブロックのシーケンスを生成する命令と、第2の複数のプロセスを使用することにより、複数のソートされたリストをレンジ・ブロックのシーケンスにコピーする命令であって、各レンジ・ブロックが、値がそのレンジ・ブロックの範囲に入る複数のソートされたリストの複数の要素を受信する、レンジ・ブロックのシーケンスにコピーする命令と、第2の複数のプロセスを使用することにより、レンジ・ブロックの複数の要素を処理ノードごとに局所的にソートして、レンジ・ブロックに複数のソートされた要素を生成する命令と、それらのレンジ・ブロックの範囲を参照してレンジ・ブロックのシーケンスから複数のソートされた要素を順次的に読みだして、ソートされた入力データを取得する命令とを含んでもよい。
【００８１】
本開示の特定の特徴又は特定の態様は、いくつかの実装のうちの1つのみを参照して開示されてきたが、そのような特徴又は態様は、要求に応じて及びいずれかの与えられた応用又は特定の応用に有利である場合には、他の実装の1つ又は複数の他の特徴又は1つ又は複数の他の態様と組み合わせられてもよい。さらに、“包含する”、“有する”、“備える”等の用語、又はこれらの異綴り語が発明の詳細な説明又は特許請求の範囲のいずれかにおいて使用されている範囲内において、そのような用語は、“含む”の語と同様の方法で包括的であることを意図される。また、“一例としての”、“例えば”及び“例として”の語は、最良又は最適を意味するものではなく、例示を意味しているに過ぎない。
【００８２】
特定の態様が本明細書において図示され説明されてきたが、本開示の範囲を逸脱することなく、さまざまな代替的な実装及び/又は等価な実装が、図示されそして説明された特定の実装の代わりに使用されうるということが、本発明の技術分野の当業者によって明らかとなるであろう。本出願は、本明細書において議論された特定の態様のいずれかの応用又はいずれかの変形を網羅するように意図されている。
【００８３】
以下の特許請求の範囲の構成要素は、対応する標識に従ってある特定の順序で記載されているが、特許請求の範囲の記載がそれらの構成要素のうちのいくつか又はすべてを実装するためのある特定の順序を示唆していない場合には、それらの構成要素は、その特定の順序で実装されるように限定されることを必然的には意図されてはいない。
【００８４】
上記の教示に照らして、多くの代替手段、修正、及び変更が本発明の技術分野の当業者に明らかとなるであろう。もちろん、本発明の技術分野の当業者は、本明細書中で説明された応用例をこえる本発明の応用例が数多く存在するということを容易に認識するであろう。本発明は、1つ又は複数の特定の実施形態を参照して説明されてきたが、本発明の技術分野の当業者は、本発明の範囲を逸脱することなく、多くの改変がなされうるということを認識するであろう。したがって、添付の特許請求の範囲及びそれらの均等な範囲内で、本発明は、本明細書で具体的に説明された以外の態様で実施されうるということを理解すべきである。
【図１】
0006318303.tif 000002
【図２】
0006318303.tif 000003
【図３】
0006318303.tif 000004
【図４】
0006318303.tif 000005
【図５】
0006318303.tif 000006
【図６】
0006318303.tif 000007
【図７】
0006318303.tif 000008
【図８】
0006318303.tif 000009
【図９】
0006318303.tif 000010
【図１０】
0006318303.tif 000011
【図１１】
0006318303.tif 000012