(57)【要約】  表形式データからマルチコア型処理装置向けデータ構造を構築する方法は、制御ユニットが各演算ユニットの担当レコードに対応するブロック番号を格納する配列を作成し、演算ユニットが担当レコードのレコード順序番号を格納する配列を並列的に作成し、演算ユニットが、データ項目毎に、担当レコードに含まれる項目値にアクセスする項目値アクセス情報を格納する配列を並列的に作成し、演算ユニットが、データ項目毎に、項目値アクセス情報によってアクセスされるように展開された項目値を並列的に作成する。
2009028050.tif 000002
【特許請求の範囲】
【請求項１】
専用のローカルメモリを含む複数台の演算ユニットと、
上記複数台の演算ユニットに接続されているグローバルメモリと、
上記複数台の演算ユニットを接続するバスと、
上記グローバルメモリ及び上記複数台の演算ユニットに接続されている少なくとも１台の制御ユニットと、
を備えるマルチコア型処理装置において、
データ項目に対応した項目値を含むレコードの配列として表され、上記複数台の演算ユニットによって分担して操作される表形式データを、上記グローバルメモリに構築する方法であって、
上記制御ユニットが、上記レコードを各演算ユニットが担当する担当レコードを含むブロックに分割し、各レコードに対応するブロック番号を上記表形式データ中の原始レコード位置番号の順番に格納するブロック番号配列を作成し、上記グローバルメモリに格納するステップと、
上記複数台の演算ユニットが並列的に動作して、上記担当レコードの上記原始レコード位置番号をレコード順序番号の順番に格納するレコード順序番号配列を各演算ユニット内の上記ローカルメモリ上に作成し、上記グローバルメモリへ転送するステップと、
上記複数台の演算ユニットが並列的に動作して、上記担当レコードに含まれる上記項目値にアクセスする項目値アクセス情報を上記レコード順序番号の順番に格納する項目値アクセス情報配列を各演算ユニット内の上記ローカルメモリ上に作成し、上記グローバルメモリへ転送するステップと、
上記複数台の演算ユニットが並列的に動作して、上記担当レコードに含まれる上記項目値が上記項目値アクセス情報を用いてアクセスされるように、データ項目毎に上記項目値を各演算ユニット内の上記ローカルメモリ上に展開し、上記展開された項目値を上記グローバルメモリへ転送するステップと、
を備える方法。
【請求項２】
上記制御ユニットが、上記グローバルメモリ上の上記ブロック番号配列を参照して、所定のレコードが含まれるブロックのブロック番号と上記所定のレコードを担当する上記演算ユニットとを決定するステップと、
上記制御ユニットが、上記決定された演算ユニットへ上記所定のレコードのレコード順序番号を通知するステップと、
上記レコード順序番号を通知された演算ユニットが、当該演算ユニットの上記担当レコードに関する上記レコード順序番号配列及び前記項目値アクセス情報配列を、上記グローバルメモリから当該演算ユニットの上記ローカルメモリへ転送するステップと、
上記レコード順序番号を通知された演算ユニットが、上記通知されたレコード順序番号が格納されている位置を上記転送されたレコード順序番号配列中で特定するステップと、
上記レコード順序番号を通知された演算ユニットが、上記特定された位置によって指定される項目値アクセス情報を上記転送された項目値アクセス情報配列中で特定するステップと、
上記レコード順序番号を通知された演算ユニットが、データ項目毎に、上記グローバルメモリから、上記特定された項目値アクセス情報によって指定される上記項目値を取得し、上記取得された項目値を上記グローバルメモリへ転送するステップと、
をさらに備える、
請求項１に記載の方法。
【請求項３】
上記複数台の演算ユニットが並列的に動作して、データ項目毎に上記項目値を各演算ユニット内の上記ローカルメモリに展開し、上記展開された項目値を上記グローバルメモリに格納するステップが、
上記複数台の演算ユニットが並列的に動作して、データ項目毎に、単一のブロックに含まれる上記項目値を上記グローバルメモリから上記ローカルメモリへ転送し、上記単一のブロックに含まれる項目値のうちの一意の値を所定の順序で格納するローカル項目値作業配列、及び、上記単一のブロックに含まれる上記担当レコードの上記原始レコード位置番号の順番に、上記担当レコードに含まれる項目値が上記ローカル項目値作業配列中に格納されている位置を指定するローカル項目値番号を格納するローカル項目値番号配列を上記ローカルメモリ上に作成し、上記グローバルメモリへ転送するステップと、
上記複数台の演算ユニットが並列的に動作して、データ項目毎に、１対のブロックに関連した、上記ブロックに含まれる上記項目値のうちの一意の値に対応する上記ブロック番号を格納したブロック番号作業配列と、上記ローカル項目値作業配列と、上記ブロックに含まれる上記項目値が上記ローカル項目値作業配列中で格納されている位置を指定するポインタを格納するローカル項目値指定ポインタ作業配列とからなる１対の組から、上記１対のブロックがマージされたブロックに関連した、さらなるブロック番号作業配列と、さらなるローカル項目値作業配列と、さらなるローカル項目値指定ポインタ作業配列とからなる組を作成するマージ処理を実行するステップと、
上記複数台の演算ユニットが並列的かつ階層的に動作して、データ項目毎に、最終的な１個のブロックにマージされるまで上記マージ処理を繰り返し、得られた最終的なブロック番号作業配列と、最終的なローカル項目値作業配列と、最終的なローカル項目値指定ポインタ作業配列とを上記グローバルメモリへ転送するステップと、
上記複数台の演算ユニットが並列的に動作して、データ項目毎に、上記最終的なローカル項目値指定ポインタ作業配列中の要素を上記最終的なブロック番号作業配列中の対応する要素によって指定されたブロック番号毎に分配し所定の順番に並べることにより、上記ローカル項目値番号によって表される上記項目値が、上記項目値を所定の順序で格納するグローバル項目値配列に一致する、上記最終的なローカル項目値作業配列中で格納されている位置を指定するポインタを格納する項目値指定ポインタ配列を作成し上記グローバルメモリへ転送するステップと、
を含む、
請求項１に記載の方法。
【請求項４】
専用のローカルメモリを含む複数台の演算ユニットと、
上記複数台の演算ユニットに接続されているグローバルメモリと、
上記複数台の演算ユニットを接続するバスと、
上記グローバルメモリ及び上記複数台の演算ユニットに接続されている少なくとも１台の制御ユニットと、
を備え、
データ項目に対応した項目値を含むレコードの配列として表され、上記複数台の演算ユニットによって分担して操作される表形式データを上記グローバルメモリに構築するマルチコア型処理装置であって、
上記制御ユニットが、上記レコードを各演算ユニットが担当する担当レコードを含むブロックに分割し、各レコードに対応するブロック番号を上記表形式データ中の原始レコード位置番号の順番に格納するブロック番号配列を作成し、上記グローバルメモリに格納する手段を含み、
各演算ユニットが、
他の演算ユニットと並列的に動作して、上記担当レコードの上記原始レコード位置番号をレコード順序番号の順番に格納するレコード順序番号配列を各演算ユニット内の上記ローカルメモリ上に作成し、上記グローバルメモリへ転送する手段と、
他の演算ユニットと並列的に動作して、上記担当レコードに含まれる上記項目値にアクセスする項目値アクセス情報を上記レコード順序番号の順番に格納する項目値アクセス情報配列を各演算ユニット内の上記ローカルメモリ上に作成し、上記グローバルメモリへ転送する手段と、
他の演算ユニットと並列的に動作して、上記担当レコードに含まれる上記項目値が上記項目値アクセス情報を用いてアクセスされるように、データ項目毎に上記項目値を各演算ユニット内の上記ローカルメモリ上に展開し、上記展開された項目値を上記グローバルメモリへ転送する手段と、
を含む、
マルチコア型処理装置。
【請求項５】
上記制御ユニットが、
上記グローバルメモリ上の上記ブロック番号配列を参照して、所定のレコードが含まれるブロックのブロック番号と上記所定のレコードを担当する上記演算ユニットとを決定する手段と、
上記決定された演算ユニットへ上記所定のレコードのレコード順序番号を通知する手段と、
をさらに含み、
上記レコード順序番号を通知された演算ユニットが、
当該演算ユニットの上記担当レコードに関する上記レコード順序番号配列及び前記項目値アクセス情報配列を、上記グローバルメモリから当該演算ユニットの上記ローカルメモリへ転送する手段と、
上記通知されたレコード順序番号が格納されている位置を上記転送されたレコード順序番号配列中で特定する手段と、
上記特定された位置によって指定される項目値アクセス情報を上記転送された項目値アクセス情報配列中で特定する手段と、
データ項目毎に、上記グローバルメモリから、上記特定された項目値アクセス情報によって指定される上記項目値を取得し、上記取得された項目値を上記グローバルメモリへ転送する手段と、
をさらに含む、
請求項４に記載のマルチコア型処理装置。
【請求項６】
各演算ユニットが、
他の演算ユニットと並列的に動作して、データ項目毎に上記項目値を各演算ユニット内の上記ローカルメモリに展開し、上記展開された項目値を上記グローバルメモリに格納する手段と、
他の演算ユニットと並列的に動作して、データ項目毎に、単一のブロックに含まれる上記項目値を上記グローバルメモリから上記ローカルメモリへ転送し、上記単一のブロックに含まれる項目値のうちの一意の値を所定の順序で格納するローカル項目値作業配列、及び、上記単一のブロックに含まれる上記担当レコードの上記原始レコード位置番号の順番に、上記担当レコードに含まれる項目値が上記ローカル項目値作業配列中に格納されている位置を指定するローカル項目値番号を格納するローカル項目値番号配列を上記ローカルメモリ上に作成し、上記グローバルメモリへ転送する手段と、
他の演算ユニットと並列的に動作して、データ項目毎に、１対のブロックに関連した、上記ブロックに含まれる上記項目値のうちの一意の値に対応する上記ブロック番号を格納したブロック番号作業配列と、上記ローカル項目値作業配列と、上記ブロックに含まれる上記項目値が上記ローカル項目値作業配列中で格納されている位置を指定するポインタを格納するローカル項目値指定ポインタ作業配列とからなる１対の組から、上記１対のブロックがマージされたブロックに関連した、さらなるブロック番号作業配列と、さらなるローカル項目値作業配列と、さらなるローカル項目値指定ポインタ作業配列とからなる組を作成するマージ処理を実行する手段と、
他の演算ユニットと並列的かつ階層的に動作して、データ項目毎に、最終的な１個のブロックにマージされるまで上記マージ処理を繰り返し、得られた最終的なブロック番号作業配列と、最終的なローカル項目値作業配列と、最終的なローカル項目値指定ポインタ作業配列とを上記グローバルメモリへ転送する手段と、
他の演算ユニットと並列的に動作して、データ項目毎に、上記最終的なローカル項目値指定ポインタ作業配列中の要素を上記最終的なブロック番号作業配列中の対応する要素によって指定されたブロック番号毎に分配し所定の順番に並べることにより、上記ローカル項目値番号によって表される上記項目値が、上記項目値を所定の順序で格納するグローバル項目値配列に一致する、上記最終的なローカル項目値作業配列中で格納されている位置を指定するポインタを格納する項目値指定ポインタ配列を作成し上記グローバルメモリへ転送する手段と、
をさらに含む、
請求項４に記載のマルチコア型処理装置。
【請求項７】
専用のローカルメモリを含む複数台の演算ユニットと、
上記複数台の演算ユニットに接続されているグローバルメモリと、
上記複数台の演算ユニットを接続するバスと、
上記グローバルメモリ及び上記複数台の演算ユニットに接続されている少なくとも１台の制御ユニットと、
を備えるコンピュータにロードされ、データ項目に対応した項目値を含むレコードの配列として表され、上記複数台の演算ユニットによって分担して操作される表形式データを、上記グローバルメモリに構築するコードを、上記コンピュータに実行させるコンピュータ読み取り可能なプログラムであって、
上記制御ユニットが、上記レコードを各演算ユニットが担当する担当レコードを含むブロックに分割し、各レコードに対応するブロック番号を上記表形式データ中の原始レコード位置番号の順番に格納するブロック番号配列を作成し、上記グローバルメモリに格納するコードと、
上記複数台の演算ユニットが並列的に動作して、上記担当レコードの上記原始レコード位置番号をレコード順序番号の順番に格納するレコード順序番号配列を各演算ユニット内の上記ローカルメモリ上に作成し、上記グローバルメモリへ転送するコードと、
上記複数台の演算ユニットが並列的に動作して、上記担当レコードに含まれる上記項目値にアクセスする項目値アクセス情報を上記レコード順序番号の順番に格納する項目値アクセス情報配列を各演算ユニット内の上記ローカルメモリ上に作成し、上記グローバルメモリへ転送するコードと、
上記複数台の演算ユニットが並列的に動作して、上記担当レコードに含まれる上記項目値が上記項目値アクセス情報を用いてアクセスされるように、データ項目毎に上記項目値を各演算ユニット内の上記ローカルメモリ上に展開し、上記展開された項目値を上記グローバルメモリへ転送するコードと、
を含むプログラム。
【請求項８】
上記制御ユニットが、上記グローバルメモリ上の上記ブロック番号配列を参照して、所定のレコードが含まれるブロックのブロック番号と上記所定のレコードを担当する上記演算ユニットとを決定するコードと、
上記制御ユニットが、上記決定された演算ユニットへ上記所定のレコードのレコード順序番号を通知するコードと、
上記レコード順序番号を通知された演算ユニットが、当該演算ユニットの上記担当レコードに関する上記レコード順序番号配列及び前記項目値アクセス情報配列を、上記グローバルメモリから当該演算ユニットの上記ローカルメモリへ転送するコードと、
上記レコード順序番号を通知された演算ユニットが、上記通知されたレコード順序番号が格納されている位置を上記転送されたレコード順序番号配列中で特定するコードと、
上記レコード順序番号を通知された演算ユニットが、上記特定された位置によって指定される項目値アクセス情報を上記転送された項目値アクセス情報配列中で特定するコードと、
上記レコード順序番号を通知された演算ユニットが、データ項目毎に、上記グローバルメモリから、上記特定された項目値アクセス情報によって指定される上記項目値を取得し、上記取得された項目値を上記グローバルメモリへ転送するコードと、
をさらに含む、
請求項７に記載のプログラム。
【請求項９】
上記複数台の演算ユニットが並列的に動作して、データ項目毎に上記項目値を各演算ユニット内の上記ローカルメモリに展開し、上記展開された項目値を上記グローバルメモリに格納するコードが、
上記複数台の演算ユニットが並列的に動作して、データ項目毎に、単一のブロックに含まれる上記項目値を上記グローバルメモリから上記ローカルメモリへ転送し、上記単一のブロックに含まれる項目値のうちの一意の値を所定の順序で格納するローカル項目値作業配列、及び、上記単一のブロックに含まれる上記担当レコードの上記原始レコード位置番号の順番に、上記担当レコードに含まれる項目値が上記ローカル項目値作業配列中に格納されている位置を指定するローカル項目値番号を格納するローカル項目値番号配列を上記ローカルメモリ上に作成し、上記グローバルメモリへ転送するコードと、
上記複数台の演算ユニットが並列的に動作して、データ項目毎に、１対のブロックに関連した、上記ブロックに含まれる上記項目値のうちの一意の値に対応する上記ブロック番号を格納したブロック番号作業配列と、上記ローカル項目値作業配列と、上記ブロックに含まれる上記項目値が上記ローカル項目値作業配列中で格納されている位置を指定するポインタを格納するローカル項目値指定ポインタ作業配列とからなる１対の組から、上記１対のブロックがマージされたブロックに関連した、さらなるブロック番号作業配列と、さらなるローカル項目値作業配列と、さらなるローカル項目値指定ポインタ作業配列とからなる組を作成するマージ処理を実行するコードと、
上記複数台の演算ユニットが並列的かつ階層的に動作して、データ項目毎に、最終的な１個のブロックにマージされるまで上記マージ処理を繰り返し、得られた最終的なブロック番号作業配列と、最終的なローカル項目値作業配列と、最終的なローカル項目値指定ポインタ作業配列とを上記グローバルメモリへ転送するコードと、
上記複数台の演算ユニットが並列的に動作して、データ項目毎に、上記最終的なローカル項目値指定ポインタ作業配列中の要素を上記最終的なブロック番号作業配列中の対応する要素によって指定されたブロック番号毎に分配し所定の順番に並べることにより、上記ローカル項目値番号によって表される上記項目値が、上記項目値を所定の順序で格納するグローバル項目値配列に一致する、上記最終的なローカル項目値作業配列中で格納されている位置を指定するポインタを格納する項目値指定ポインタ配列を作成し上記グローバルメモリへ転送するコードと、
を含む、
請求項７に記載のプログラム。
【請求項１０】
専用のローカルメモリを含む複数台の演算ユニットと、
上記複数台の演算ユニットに接続されているグローバルメモリと、
上記複数台の演算ユニットを接続するバスと、
上記グローバルメモリ及び上記複数台の演算ユニットに接続されている少なくとも１台の制御ユニットと、
を備えるコンピュータにロードされ、データ項目に対応した項目値を含むレコードの配列として表され、上記複数台の演算ユニットによって分担して操作される表形式データを、上記グローバルメモリに構築する請求項１乃至３のうち何れか１項に記載の方法を上記コンピュータに実行させるためのコンピュータプログラムプロダクト。
【請求項１１】
専用のローカルメモリを含む複数台の演算ユニットと、
上記複数台の演算ユニットに接続されているグローバルメモリと、
上記複数台の演算ユニットを接続するバスと、
上記グローバルメモリ及び上記複数台の演算ユニットに接続されている少なくとも１台の制御ユニットと、
を備えるコンピュータにロードされ、データ項目に対応した項目値を含むレコードの配列として表され、上記複数台の演算ユニットによって分担して操作される表形式データを、上記グローバルメモリに構築する請求項１乃至３のうち何れか１項に記載の方法を上記コンピュータに実行させるためのコンピュータプログラムが記録された記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ項目に対応した項目値を含むレコードの配列として表される表形式データを複数台の演算ユニットによって分担して操作し、特に、表形式データを構築し、表形式データから項目値を取得するデータ処理方法に関係する。【０００２】
本発明は、データ項目に対応した項目値を含むレコードの配列として表される表形式データを複数台の演算ユニットによって分担して操作し、特に、表形式データを構築し、表形式データから項目値を取得するマルチコア型処理装置にも関係する。【０００３】
さらに、本発明は、上記データ処理方法を、マルチコア型プロセッサを備えるコンピュータに実行させるためのプログラム、コンピュータプログラムプロダクト、及び、コンピュータプログラムが記録された記録媒体に関係する。
【背景技術】
【０００４】
従来、産業上の様々な分野において、大規模データを高速に処理することが求められている。大規模データの処理は、キャッシュやプリフェッチなどによるメモリアクセスの高速化、メモリ自体の高速化、及び、プロセッサの並列化のような演算処理の高速化、といったハードウェア技術の開発、ならびに、データ処理アルゴリズムの開発によって、高速化され続けている。【０００５】
本発明者は、大規模データを高速に処理するための基本的なデータ処理アルゴリズム、たとえば、特許文献１に記載されているような、「オンメモリデータ処理アルゴリズム」を提案している。この技術は、表形式データを、従来のようなレコード（すなわち、行）単位ではなく、項目（すなわち、列）単位に成分分解するという考え方に基づいている。より具体的には、表形式データが、（１）レコード順を表す配列と、（２）項目に属する一意の項目値が所定の順序（たとえば、昇順）に並べられた値テーブルと、（３）各レコードに対応する項目値が値テーブルに格納されている位置情報を表す配列とからなるデータ構造によって表現されている。このようなデータ構造を採用することにより、表形式データの検索、ソート、マージ、ジョイン等の処理が高速に実現されている。【０００６】
さらに、本発明者は、メモリ分散型のマルチプロセッサシステム及びメモリ共有型のマルチプロセッサシステムのようなプロセッサの並列化に対応した種々のオンメモリデータ処理アルゴリズムを提案している。たとえば、メモリ分散型のマルチプロセッサシステムに対応した検索・ソートアルゴリズムが特許文献２に記載され、集計アルゴリズムが特許文献３に記載されている。さらに、メモリ共有型のマルチプロセッサシステムに対応した効率的なソートアルゴリズムが特許文献４に記載されている。【０００７】
ところで、近年、１台のプロセッサの内部に複数（又は多数）のコアを含むプロセッサアーキテクチャが提案されている。マルチコア型プロセッサの一例として、Ｃｅｌｌ  Ｂｒｏａｄｂａｎｄ  ＥｎｇｉｎｅＴＭが知られている（非特許文献１を参照のこと）。このタイプのプロセッサは、たとえば、マルチメディアデータの高速処理や、分散コンピューティングなどに適用することが意図されている。このアーキテクチャでは、各コアは、大容量ではないが、専用のローカルメモリを有し、他のコアとは独立して演算を行うことができる。実際には、ローカルメモリのメモリ容量はマルチメディアデータ等の処理に不足しているので、外付けのグローバルメモリが設けられている。マルチコア型プロセッサアーキテクチャは、クロックの高速化に頼るのではなく、コアの追加によって並列性が高まり、処理能力が上昇するので、拡張性に優れている。【０００８】
よって、このようなマルチコア型プロセッサアーキテクチャは、マルチメディアデータ処理だけでなく、高速性が要求される種々のアプリケーションに適用されることが望まれている。
【非特許文献１】"Cell Broadband EngineArchitecture", Version 1.01, October 3, 2006、［平成１９年７月２６日検索］、インターネット(URL:http://cell.scei.co.jp/pdf/CBE_Architecture_v101.pdf)
【特許文献１】国際公開第００／１０１０３号公報
【特許文献２】国際公開第２００５／０４１０６６号公報
【特許文献３】国際公開第２００５／０４１０６７号公報
【特許文献４】国際公開第２００６／１２６４６７号公報
【発明の開示】
【発明が解決しようとする課題】
【０００９】
本発明者は、大規模な表形式データを高速に処理するため、上記の拡張性に優れたマルチコア型プロセッサアーキテクチャを利用する技術の重要性を認識した。【００１０】
しかし、データベースのように大規模なメモリを用いるアプリケーションでは、処理されるべきデータの全部はコアに付随するローカルメモリに収容できないので、データ処理アルゴリズムの複雑性が増す。たとえば、各コアに付随するローカルメモリに収容できない程に大きなデータをランダムアクセスすると、外付けのグローバルメモリへのアクセスが頻発し、処理性能が著しく低下する。よって、このような問題を起こさない新たなデータ構造が必要とされる。【００１１】
したがって、マルチコア型プロセッサを備えるコンピュータにおいて、データ項目に対応した項目値を含むレコードの配列として表される表形式データを、並列処理性能を低下させることなく、容量の小さい作業用メモリで処理する、データ処理方法を提供できることが好ましい。【００１２】
また、データ項目に対応した項目値を含むレコードの配列として表される表形式データを、並列処理性能を低下させることなく、容量の小さい作業用メモリで処理する、マルチコア型情報処理装置を提供できることが好ましい。【００１３】
さらに、マルチコア型プロセッサを備えるコンピュータにおいて、データ項目に対応した項目値を含むレコードの配列として表される表形式データを、並列処理性能を低下させることなく、容量の小さい作業用メモリで処理する、プログラム、コンピュータプログラムプロダクト、及び、コンピュータプログラムが記録された記録媒体を提供できることが好ましい。
【課題を解決するための手段】
【００１４】
本発明の少なくとも1つの実施例によれば、マルチコア型プロセッサの並列処理性能を低下させることなく、小容量のローカルメモリを使用して表形式データを取り扱うため、表形式データを２タイプのデータ形式によって記述する。第１のタイプのデータは、ローカルメモリに収容できることが保証される程に小さく分割され、グローバルメモリ（又は、ディスク）に保持される配列群である。この第１のタイプのデータは、グローバルメモリからローカルメモリへ一括転送され得るので、ランダムアクセスを行っても遅延を生じない。第２のタイプのデータは、大量のデータをアクセスする際に、必ず所定の順序（たとえば、昇順又は降順）に連続的にアクセスされることが保証され、グローバルメモリ（又は、ディスク）に保持される配列群である。第２のタイプのデータは、そのままではローカルメモリに収容できないので、ローカルメモリに収容可能なサイズずつ、グローバルメモリからローカルメモリへ順次アクセスによって転送される。もちろん、第１のタイプのデータは、順次アクセスによらずに、部分的にグローバルメモリ上に格納されている要素が直接アクセスされることもある。【００１５】
本文書中で、表形式データとは、データ項目に対応した項目値を含むレコードの配列として表されるデータを意味する。【００１６】
また、本文書中で、マルチコア型処理装置又はプロセッサとは、専用のローカルメモリを含む複数台の演算ユニットと、上記複数台の演算ユニットに接続されているグローバルメモリと、上記複数台の演算ユニットを接続するバスと、上記グローバルメモリ及び上記複数台の演算ユニットに接続されている少なくとも１台の制御ユニットと、を備える装置を意味する。【００１７】
本発明の少なくとも1つの実施例は、上記の成分分解の考え方と、上記の２タイプのデータ形式の考え方とを組み合わせて、表形式データをマルチコア型処理装置上に構築する。【００１８】
そのため、本発明の少なくとも1つの実施例によれば、表形式データの（複数又は多数の）レコードは、ブロック番号によって識別されるブロックに分割される。初期的には、このブロックは、このブロックに含まれるレコードの処理を担当する演算ユニットに対応している。各演算ユニットが担当するレコードは、本書中で、担当レコードと呼ばれる。そして、このブロック番号が原始レコード位置番号の順番に格納されているブロック番号配列がグローバルメモリ上に作成される。ブロック番号配列は第２のタイプのデータをもつ。原始レコード位置番号とは、元の表形式データの中で各レコードが収容されている位置、たとえば、行番号に対応する。【００１９】
各演算ユニットは、担当レコードを認識するために、担当レコードのレコード順序番号（初期的には原始レコード位置番号と一致）がレコード順序番号の順番に格納されているレコード順序番号配列にアクセスすることができる。このレコード順序番号配列は、第１のタイプのデータをもち、必要に応じて、グローバルメモリから各演算ユニット内のローカルメモリへ転送される。【００２０】
さらに、各演算ユニットは、担当レコードに含まれる項目値にアクセスするため、項目値アクセス情報がレコード順序番号の順番に格納されている項目値アクセス情報配列にアクセスすることができる。この項目値アクセス情報配列は、第１のタイプのデータをもち、必要に応じて、グローバルメモリから各演算ユニット内のローカルメモリへ転送される。【００２１】
各演算ユニットの担当レコードに含まれる項目値は、データ項目毎に各演算ユニットが項目値アクセス情報配列を用いてアクセスすることができるようにグローバルメモリに保持され、必要に応じて、グローバルメモリから各演算ユニット内のローカルメモリへ転送される。【００２２】
表形式データの項目値は、データ項目毎に、一意の項目値が所定の順序（昇順又は降順）に格納されているグローバル項目値配列としてグローバルメモリ上に構築されている。このグローバル項目値配列は第２のタイプのデータをもつ。また、各演算ユニットが項目値アクセス情報配列を用いて担当レコードに含まれる項目値にアクセスするため、データ項目毎に、担当レコードに含まれる項目値を特定するローカル項目値番号が原始レコード位置番号の順番に格納されているローカル項目値番号配列と、ローカル項目値番号によって表される項目値がグローバル項目値配列中に格納されている位置を指定する項目値指定ポインタが所定の順序（昇順又は降順）に格納されている項目値指定ポインタ配列とがグローバルメモリ上に構築され、必要に応じて、グローバルメモリから各演算ユニット内のローカルメモリへ転送される。ローカル項目値番号配列及び項目値指定ポインタ配列は第１のタイプのデータをもつ。このように、表形式データの項目値は、データ項目毎に、グローバル項目値配列、ローカル項目値番号配列、及び、項目値指定ポインタ配列の形に展開されている。【００２３】
以上の考え方に従って、本発明の一実施例は、
専用のローカルメモリを含む複数台の演算ユニットと、
上記複数台の演算ユニットに接続されているグローバルメモリと、
上記複数台の演算ユニットを接続するバスと、
上記グローバルメモリ及び上記複数台の演算ユニットに接続されている少なくとも１台の制御ユニットと、
を備えるマルチコア型処理装置において、
データ項目に対応した項目値を含むレコードの配列として表され、上記複数台の演算ユニットによって分担して操作される表形式データを、上記グローバルメモリに構築する方法であって、
上記制御ユニットが、上記レコードを各演算ユニットが担当する担当レコードを含むブロックに分割し、各レコードに対応するブロック番号を上記表形式データ中の原始レコード位置番号の順番に格納するブロック番号配列を作成し、上記グローバルメモリに格納するステップと、
上記複数台の演算ユニットが並列的に動作して、上記担当レコードの上記原始レコード位置番号をレコード順序番号の順番に格納するレコード順序番号配列を各演算ユニット内の上記ローカルメモリ上に作成し、上記グローバルメモリへ転送するステップと、
上記複数台の演算ユニットが並列的に動作して、上記担当レコードに含まれる上記項目値にアクセスする項目値アクセス情報を上記レコード順序番号の順番に格納する項目値アクセス情報配列を各演算ユニット内の上記ローカルメモリ上に作成し、上記グローバルメモリへ転送するステップと、
上記複数台の演算ユニットが並列的に動作して、上記担当レコードに含まれる上記項目値が上記項目値アクセス情報を用いてアクセスされるように、データ項目毎に上記項目値を各演算ユニット内の上記ローカルメモリ上に展開し、上記展開された項目値を上記グローバルメモリへ転送するステップと、
を備える方法を提供する。【００２４】
上記方法は、
上記制御ユニットが、上記グローバルメモリ上の上記ブロック番号配列を参照して、所定のレコードを含むブロックのブロック番号と上記所定のレコードを担当する演算ユニットとを決定するステップと、
上記制御ユニットが、上記決定された演算ユニットへ上記所定のレコードのレコード順序番号を通知するステップと、
上記レコード順序番号を通知された演算ユニットが、当該演算ユニットの上記担当レコードに関する上記レコード順序番号配列及び前記項目値アクセス情報配列を、上記グローバルメモリから当該演算ユニットの上記ローカルメモリへ転送するステップと、
上記レコード順序番号を通知された演算ユニットが、上記通知されたレコード順序番号が格納されている位置を上記転送されたレコード順序番号配列中で特定するステップと、
上記レコード順序番号を通知された演算ユニットが、上記特定された位置によって指定される項目値アクセス情報を上記転送された項目値アクセス情報配列中で特定するステップと、
上記レコード順序番号を通知された演算ユニットが、データ項目毎に、上記グローバルメモリから、上記特定された項目値アクセス情報によって指定される上記項目値を取得し、上記取得された項目値を上記グローバルメモリへ転送するステップと、
をさらに備える。【００２５】
また、上記方法は、
上記複数台の演算ユニットが並列的に動作して、データ項目毎に上記項目値を各演算ユニット内の上記ローカルメモリに展開し、上記展開された項目値を上記グローバルメモリに格納するステップが、
上記複数台の演算ユニットが並列的に動作して、データ項目毎に、単一のブロックに含まれる上記項目値を上記グローバルメモリから上記ローカルメモリへ転送し、上記単一のブロックに含まれる項目値のうちの一意の値を所定の順序で格納するローカル項目値作業配列、及び、上記単一のブロックに含まれる上記担当レコードの上記原始レコード位置番号の順番に、上記担当レコードに含まれる項目値が上記ローカル項目値作業配列中に格納されている位置を指定するローカル項目値番号を格納するローカル項目値番号配列を上記ローカルメモリ上に作成し、上記グローバルメモリへ転送するステップと、
上記複数台の演算ユニットが並列的に動作して、データ項目毎に、１対のブロックに関連した、上記ブロックに含まれる上記項目値のうちの一意の値に対応する上記ブロック番号を格納したブロック番号作業配列と、上記ローカル項目値作業配列と、上記ブロックに含まれる上記項目値が上記ローカル項目値作業配列中で格納されている位置を指定するポインタを格納するローカル項目値指定ポインタ作業配列とからなる１対の組から、上記１対のブロックがマージされたブロックに関連した、さらなるブロック番号作業配列と、さらなるローカル項目値作業配列と、さらなるローカル項目値指定ポインタ作業配列とからなる組を作成するマージ処理を実行するステップと、
上記複数台の演算ユニットが並列的かつ階層的に動作して、データ項目毎に、最終的な１個のブロックにマージされるまで上記マージ処理を繰り返し、得られた最終的なブロック番号作業配列と、最終的なローカル項目値作業配列と、最終的なローカル項目値指定ポインタ作業配列とを上記グローバルメモリへ転送するステップと、
上記複数台の演算ユニットが並列的に動作して、データ項目毎に、上記最終的なローカル項目値指定ポインタ作業配列中の要素を上記最終的なブロック番号作業配列中の対応する要素によって指定されたブロック番号毎に分配し所定の順番に並べることにより、上記ローカル項目値番号によって表される上記項目値が、上記項目値を所定の順序で格納するグローバル項目値配列に一致する、上記最終的なローカル項目値作業配列中で格納されている位置を指定するポインタを格納する項目値指定ポインタ配列を作成し上記グローバルメモリへ転送するステップと、
を含む。【００２６】
本発明の別の実施例によれば、上記方法を実施するマルチコア型処理装置が提供される。本実施例によれば、マルチコア型処理装置は、
専用のローカルメモリを含む複数台の演算ユニットと、
上記複数台の演算ユニットに接続されているグローバルメモリと、
上記複数台の演算ユニットを接続するバスと、
上記グローバルメモリ及び上記複数台の演算ユニットに接続されている少なくとも１台の制御ユニットと、
を備え、
データ項目に対応した項目値を含むレコードの配列として表され、上記複数台の演算ユニットによって分担して操作される表形式データを上記グローバルメモリに構築する。このマルチコア型情報処理装置において、
上記制御ユニットが、上記レコードを各演算ユニットが担当する担当レコードを含むブロックに分割し、各レコードに対応するブロック番号を上記表形式データ中の原始レコード位置番号の順番に格納するブロック番号配列を作成し、上記グローバルメモリに格納する手段を含み、
各演算ユニットが、
他の演算ユニットと並列的に動作して、上記担当レコードの上記原始レコード位置番号をレコード順序番号の順番に格納するレコード順序番号配列を各演算ユニット内の上記ローカルメモリ上に作成し、上記グローバルメモリへ転送する手段と、
他の演算ユニットと並列的に動作して、上記担当レコードに含まれる上記項目値にアクセスする項目値アクセス情報を上記レコード順序番号の順番に格納する項目値アクセス情報配列を各演算ユニット内の上記ローカルメモリ上に作成し、上記グローバルメモリへ転送する手段と、
他の演算ユニットと並列的に動作して、上記担当レコードに含まれる上記項目値が上記項目値アクセス情報を用いてアクセスされるように、データ項目毎に上記項目値を各演算ユニット内の上記ローカルメモリ上に展開し、上記展開された項目値を上記グローバルメモリへ転送する手段と、
を含む。【００２７】
また、上記マルチコア型処理装置において、
上記制御ユニットが、
上記グローバルメモリ上の上記ブロック番号配列を参照して、所定のレコードが含まれるブロックのブロック番号と上記所定のレコードを担当する上記演算ユニットとを決定する手段と、
上記決定された演算ユニットへ上記所定のレコードのレコード順序番号を通知する手段と、
をさらに含み、
上記レコード順序番号を通知された演算ユニットが、
当該演算ユニットの上記担当レコードに関する上記レコード順序番号配列及び前記項目値アクセス情報配列を、上記グローバルメモリから当該演算ユニットの上記ローカルメモリへ転送する手段と、
上記通知されたレコード順序番号が格納されている位置を上記転送されたレコード順序番号配列中で特定する手段と、
上記特定された位置によって指定される項目値アクセス情報を上記転送された項目値アクセス情報配列中で特定する手段と、
データ項目毎に、上記グローバルメモリから、上記特定された項目値アクセス情報によって指定される上記項目値を取得し、上記取得された項目値を上記グローバルメモリへ転送する手段と、
をさらに含む。【００２８】
また、上記マルチコア型処理装置において、
各演算ユニットが、
他の演算ユニットと並列的に動作して、データ項目毎に上記項目値を各演算ユニット内の上記ローカルメモリに展開し、上記展開された項目値を上記グローバルメモリに格納する手段と、
他の演算ユニットと並列的に動作して、データ項目毎に、単一のブロックに含まれる上記項目値を上記グローバルメモリから上記ローカルメモリへ転送し、上記単一のブロックに含まれる項目値のうちの一意の値を所定の順序で格納するローカル項目値作業配列、及び、上記単一のブロックに含まれる上記担当レコードの上記原始レコード位置番号の順番に、上記担当レコードに含まれる項目値が上記ローカル項目値作業配列中に格納されている位置を指定するローカル項目値番号を格納するローカル項目値番号配列を上記ローカルメモリ上に作成し、上記グローバルメモリへ転送する手段と、
他の演算ユニットと並列的に動作して、データ項目毎に、１対のブロックに関連した、上記ブロックに含まれる上記項目値のうちの一意の値に対応する上記ブロック番号を格納したブロック番号作業配列と、上記ローカル項目値作業配列と、上記ブロックに含まれる上記項目値が上記ローカル項目値作業配列中で格納されている位置を指定するポインタを格納するローカル項目値指定ポインタ作業配列とからなる１対の組から、上記１対のブロックがマージされたブロックに関連した、さらなるブロック番号作業配列と、さらなるローカル項目値作業配列と、さらなるローカル項目値指定ポインタ作業配列とからなる組を作成するマージ処理を実行する手段と、
他の演算ユニットと並列的かつ階層的に動作して、データ項目毎に、最終的な１個のブロックにマージされるまで上記マージ処理を繰り返し、得られた最終的なブロック番号作業配列と、最終的なローカル項目値作業配列と、最終的なローカル項目値指定ポインタ作業配列とを上記グローバルメモリへ転送する手段と、
他の演算ユニットと並列的に動作して、データ項目毎に、上記最終的なローカル項目値指定ポインタ作業配列中の要素を上記最終的なブロック番号作業配列中の対応する要素によって指定されたブロック番号毎に分配し所定の順番に並べることにより、上記ローカル項目値番号によって表される上記項目値が、上記項目値を所定の順序で格納するグローバル項目値配列に一致する、上記最終的なローカル項目値作業配列中で格納されている位置を指定するポインタを格納する項目値指定ポインタ配列を作成し上記グローバルメモリへ転送する手段と、
をさらに含む。【００２９】
さらに、本発明の別の実施例によれば、
専用のローカルメモリを含む複数台の演算ユニットと、
上記複数台の演算ユニットに接続されているグローバルメモリと、
上記複数台の演算ユニットを接続するバスと、
上記グローバルメモリ及び上記複数台の演算ユニットに接続されている少なくとも１台の制御ユニットと、
を備えるコンピュータにロードされ、データ項目に対応した項目値を含むレコードの配列として表され、上記複数台の演算ユニットによって分担して操作される表形式データを、上記グローバルメモリに構築する方法を上記コンピュータに実行させるためのコンピュータプログラムプロダクトが提供される。【００３０】
さらに、本発明の別の実施例によれば、
専用のローカルメモリを含む複数台の演算ユニットと、
上記複数台の演算ユニットに接続されているグローバルメモリと、
上記複数台の演算ユニットを接続するバスと、
上記グローバルメモリ及び上記複数台の演算ユニットに接続されている少なくとも１台の制御ユニットと、
を備えるコンピュータにロードされ、データ項目に対応した項目値を含むレコードの配列として表され、上記複数台の演算ユニットによって分担して操作される表形式データを、上記グローバルメモリに構築する方法を上記コンピュータに実行させるためのコンピュータプログラムが記録された記憶媒体が提供される。
【発明の効果】
【００３１】
本発明の少なくとも1つの実施例によれば、表形式データが、マルチコア型プロセッサの各演算ユニット内のローカルメモリに収容できるように分割されたデータ群と、所定の順序に連続的にアクセス可能であるデータ群とによって表現される。これにより、各演算ユニットからグローバルメモリへの効率的なアクセスが実現される。よって、本発明の少なくとも1つの実施例によれば、マルチコア型プロセッサを備えるコンピュータにおいて、大規模な表形式データを高速に処理することが可能になる。
【図面の簡単な説明】
【００３２】
【図１】本発明の一実施形態によるマルチコア型処理装置の概略図である。
【図２】本発明の一実施形態によるコンピュータシステムの概略図である。
【図３】本発明の一実施形態の基礎となるデータ管理機構を説明するための表形式データの一例を表す図である。
【図４】本発明の一実施形態の基礎となる基本的なデータ管理機構の説明図である。
【図５Ａ】本発明の一実施形態によるマルチコア型情報処理装置向けデータ構造の説明図である。
【図５Ｂ】本発明の一実施形態によるマルチコア型情報処理装置向けデータ構造の説明図である。
【図５Ｃ】本発明の一実施形態によるマルチコア型情報処理装置向けデータ構造の説明図である。
【図５Ｄ】本発明の一実施形態によるマルチコア型情報処理装置向けデータ構造の説明図である。
【図６】本発明の一実施形態によるマルチコア型処理装置向けデータ構造をグローバルメモリ上に構築する方法のフローチャートである。
【図７】本発明の一実施形態によるマルチコア型処理装置向けデータ構造における項目値取得方法のフローチャートである。
【図８】本発明の一実施形態によるコンパイル処理の概略的なフローチャートである。
【図９Ａ】本発明の一実施形態による順序情報作成処理の説明図である。
【図９Ｂ】本発明の一実施形態による順序情報作成処理の説明図である。
【図１０Ａ】本発明の一実施形態によるブロック内コンパイル処理の概要図である。
【図１０Ｂ】本発明の一実施形態によるブロック内コンパイル処理の概要図である。
【図１０Ｃ】本発明の一実施形態によるブロック内コンパイル処理の概要図である。
【図１１】ブロック内コンパイル処理の一実施例の概要図である。
【図１２】ブロック内コンパイル処理の初期化処理の説明図である。
【図１３Ａ】ブロック内コンパイル処理の１段目のマージ処理の説明図である。
【図１３Ｂ】ブロック内コンパイル処理の１段目のマージ処理の説明図である。
【図１３Ｃ】ブロック内コンパイル処理の１段目のマージ処理の説明図である。
【図１３Ｄ】ブロック内コンパイル処理の１段目のマージ処理の説明図である。
【図１３Ｅ】ブロック内コンパイル処理の１段目のマージ処理の説明図である。
【図１３Ｆ】ブロック内コンパイル処理の１段目のマージ処理の説明図である。
【図１３Ｇ】ブロック内コンパイル処理の１段目のマージ処理の説明図である。
【図１４Ａ】ブロック内コンパイル処理の２段目のマージ処理の説明図である。
【図１４Ｂ】ブロック内コンパイル処理の２段目のマージ処理の説明図である。
【図１４Ｃ】ブロック内コンパイル処理の２段目のマージ処理の説明図である。
【図１４Ｄ】ブロック内コンパイル処理の２段目のマージ処理の説明図である。
【図１４Ｅ】ブロック内コンパイル処理の２段目のマージ処理の説明図である。
【図１４Ｆ】ブロック内コンパイル処理の２段目のマージ処理の説明図である。
【図１５Ａ】ブロック内コンパイル処理の３段目のマージ処理の説明図である。
【図１５Ｂ】ブロック内コンパイル処理の３段目のマージ処理の説明図である。
【図１５Ｃ】ブロック内コンパイル処理の３段目のマージ処理の説明図である。
【図１５Ｄ】ブロック内コンパイル処理の３段目のマージ処理の説明図である。
【図１６】ブロック内コンパイル処理の値リスト作成処理の説明図である。
【図１７Ａ】本発明の一実施形態によるブロック間コンパイル処理におけるマージ処理の概要図である。
【図１７Ｂ】本発明の一実施形態によるブロック間コンパイル処理におけるマージ処理の概要図である。
【図１７Ｃ】本発明の一実施形態によるブロック間コンパイル処理におけるマージ処理の概要図である。
【図１８Ａ】本発明の一実施形態によるブロック間コンパイル処理が適用されるブロック内コンパイル処理の結果の説明図である。
【図１８Ｂ】本発明の一実施形態によるブロック間コンパイル処理が適用されるブロック内コンパイル処理の結果の説明図である。
【図１９Ａ】本発明の一実施形態によるブロック間コンパイル処理における１段目のマージ処理の説明図である。
【図１９Ｂ】本発明の一実施形態によるブロック間コンパイル処理における１段目のマージ処理の説明図である。
【図１９Ｃ】本発明の一実施形態によるブロック間コンパイル処理における１段目のマージ処理の説明図である。
【図２０Ａ】本発明の一実施形態によるブロック間コンパイル処理における２段目のマージ処理の説明図である。
【図２０Ｂ】本発明の一実施形態によるブロック間コンパイル処理における２段目のマージ処理の説明図である。
【図２０Ｃ】本発明の一実施形態によるブロック間コンパイル処理における２段目のマージ処理の説明図である。
【図２０Ｄ】本発明の一実施形態によるブロック間コンパイル処理における２段目のマージ処理の説明図である。
【図２１Ａ】本発明の一実施形態によるブロック間コンパイル処理における３段目のマージ処理の結果を説明する図である。
【図２１Ｂ】本発明の一実施形態によるブロック間コンパイル処理における３段目のマージ処理の結果を説明する図である。
【図２２】本発明の一実施形態によるブロック間コンパイル処理における分配処理の説明図である。
【図２３】本発明の一実施形態によるブロック間コンパイル処理における分配処理の結果を説明する図である。
【図２４】本発明の代替的な実施形態によるブロック間コンパイル処理におけるブロックグループ化処理の説明図である。
【図２５】本発明の代替的な実施形態によるブロック間コンパイル処理におけるブロックグループ化処理の結果を説明する図である
【符号の説明】
【００３３】
１００      マルチコア型処理装置
１０１      マルチコア型プロセッサチップ
１１０，１２０，１３０，１４０      演算ユニット
１１１，１２１，１３１，１４１      コア
１１２，１２２，１３２，１４２      ローカルメモリ
１５０      チップ内バス
１６０，１６１，１６２，１６３      バス
１７０，１７１，１７２，１７３      グローバルメモリ
２００      コンピュータシステム
２０２      マルチコア型処理装置
２１０      ＣＰＵ
２１２      ＲＡＭ
２１４      ＲＯＭ
２１６      固定記憶装置
２１８      ＣＤ−ＲＯＭ
２２０      ＣＤ−ＲＯＭドライバ
２２２      Ｉ／Ｆ
２２４      入力装置
２２６      表示装置
２２８      バス
５００      表形式データ
５０１      データ項目「Ｓｃｈｏｏｌ」
５０２      データ項目「Ａｇｅ」
５１０      レコード０
５１１      レコード１４
５２０，５２１，・・・，５２７      ブロック
５３０      順序情報
５３１      項目情報「Ｓｃｈｏｏｌ」
５３２      項目情報「Ａｇｅ」
５４０      ブロック番号配列
５５１−０，５５１−１，・・・，５５１−７      レコード順序番号配列
５５２−０，５５２−１，・・・，５５２−７      項目値アクセス情報配列
５６０−０，５６０−１，・・・，５６０−７      ブロック情報「Ｓｃｈｏｏｌ」
５６１−０，５６１−１，・・・，５６１−７      ローカル項目値番号配列「Ｓｃｈｏｏｌ」
５６２−０，５６２−１，・・・，５６２−７      項目値指定ポインタ配列「Ｓｃｈｏｏｌ」
５７０      グローバル項目値配列「Ｓｃｈｏｏｌ」
５８０−０，５８０−１，・・・，５８０−７      ブロック情報「Ａｇｅ」
５８１−０，５８１−１，・・・，５８１−７      ローカル項目値番号配列「Ａｇｅ」
５８２−０，５８２−１，・・・，５８２−７      項目値指定ポインタ配列「Ａｇｅ」
５９０      グローバル項目値配列「Ａｇｅ」
【発明を実施するための最良の形態】
【００３４】
以下、本発明を実施するための種々の形態を図面と共に詳細に説明する。【００３５】
［マルチコア型処理装置］
最初に、本発明の一実施例によるデータ処理を実現するマルチコア型処理装置について説明する。図１はマルチコア型処理装置の一実施形態の概略図である。マルチコア型処理装置１００は、マルチコア型プロセッサチップ１０１上に複数台（たとえば、２台、４台、８台等、本例では４台）の演算ユニット１１０、１２０、１３０、１４０が設けられている。各演算ユニット１１０、１２０、１３０、１４０は、データ処理用のコア１１１、１２１、１３１、１４１とコア専用のローカルメモリ１１２、１２２、１３２、１４２とを含む。各演算ユニット１１０、１２０、１３０、１４０は、チップ内のバス１５０によって接続されている。このバス１５０は、好ましくは、リング型バスである。演算ユニットは、チップ内のバス１５０によって接続されているので、高速にデータ通信することが可能である。さらに、各演算ユニット１１０、１２０、１３０、１４０は、ＤＭＡ転送をサポートするバス１６０、１６１、１６２、１６３を介して、チップ１０１に外付けされたグローバルメモリ１７０、１７１、１７２、１７３と接続されている。【００３６】
チップ内のローカルメモリ１１２、１２２、１３２、１４２の記憶容量は、たとえば、２５６ＫＢ（キロバイト）程度であり、一方、グローバルメモリ１７０、１７１、１７２、１７３は数十ＧＢ（ギガバイト）の大容量メモリである。同図では、グローバルメモリ１７０、１７１、１７２、１７３が区別して記載されている。これは、各コアからグローバルメモリへ１本のバスでアクセスすると、バスの通信性能がボトルネックとなるので、各コアに専用のメモリインターフェイス（図示せず）を設け、外付けのグローバルメモリへはこのメモリインターフェイスを介してアクセスすることを示している。もちろん、このような構成であっても、ＮＵＭＡ（不均一メモリアクセス）方式のように、グローバルメモリが全体として論理的に連続した１つのメモリとして見えるように管理することは可能である。代替的な実施形態では、各演算ユニットは、１つのバスを介して物理的に一体的な外付けのグローバルメモリに接続される。【００３７】
さらに、上記のＣｅｌｌ  Ｂｒｏａｄｂａｎｄ  ＥｎｇｉｎｅＴＭのようなプロセッサでは、１チップ内には、汎用プロセッサコアと、演算用プロセッサコアとが搭載されている。汎用プロセッサコアは複数台の演算用プロセッサコアの動作を制御することが可能である。したがって、マルチコア型プロセッサは、好ましくは、汎用プロセッサコアのような制御ユニットを備えるが、制御ユニットは、チップ内に搭載する必要はなく、チップの外部に設けられることもある。【００３８】
制御ユニットと演算ユニット、又は、演算ユニット同士は、たとえば、メールボックスやシグナル機構を用いて通信することが可能である。【００３９】
［コンピュータシステム構成］
図２は、本発明の一実施形態による表形式データを操作するコンピュータシステム２００の概略図である。コンピュータシステム２００は、データ項目に対応した項目値を含むレコードの配列として表される表形式データを複数台の演算ユニットによって分担して操作する、図１に示されているような、マルチコア型処理装置２０２を備えている。図２に示されているように、コンピュータシステム２００は、さらに、プログラムを実行することによりシステム全体および個々の構成部分を制御するＣＰＵ２１０と、ワークデータ等を記憶する、たとえば、ＲＡＭ(Random Access Memory)のようなメモリ２１２と、プログラム等を記憶するＲＯＭ(Read Only Memory)２１４と、ハードディスク等の固定記憶媒体２１６と、ＣＤ−ＲＯＭ２１８をアクセスするためのＣＤ−ＲＯＭドライバ２２０と、ＣＤ−ＲＯＭドライバ２２０及び外部ネットワーク等（図示せず）へ繋がれた外部端子に接続されているインタフェース（Ｉ／Ｆ）２２２と、キーボード及びマウス等のような入力装置２２４と、コンピュータモニターのような表示装置２２６とを備えている。マルチコア型処理装置２１０、ＲＡＭ２１２、ＲＯＭ２１４、外部記憶媒体２１６、Ｉ／Ｆ２２２、入力装置２２４及び表示装置２２６は、バス２２８を介して相互に接続されている。【００４０】
表形式データの操作をコンピュータシステム２００のマルチコア型処理装置２０２とＣＰＵ２１０に実行させるプログラムは、ＣＤ−ＲＯＭ２１８に収容され、ＣＤ−ＲＯＭドライバ２２０に読取られても良いし、ＲＯＭ２１４に予め記憶されていても良い。また、いったんＣＤ−ＲＯＭ２１８から読み出したものを、外部記憶媒体２１６の所定の領域に記憶しておいても良い。或いは、上記プログラムは、ネットワーク（図示せず）、外部端子、及び、Ｉ／Ｆ２２０を介して、外部から供給されるものであっても良い。【００４１】
また、本発明の一実施形態によるマルチコア型プロセッサシステムは、コンピュータシステム２００に表形式データを操作するプログラムを実行させることにより実現される。【００４２】
図２に示されているコンピュータシステム２００では、マルチコア型処理装置２０２の他にＣＰＵ２１０が設けられ、システム全体及び個々の構成部分を制御している。しかし、本発明は、このような実施形態に限定されることはなく、代替的な実施形態では、マルチコア型処理装置２０２に含まれている制御ユニットがシステム全体及び個々の構成部品を制御する。【００４３】
［情報ブロックに基づくデータ管理機構］
図３は本発明の一実施形態の基礎となるデータ管理機構を説明するための表形式データの一例を表す図である。この表形式データは、上述の国際公開第ＷＯ００／１０１０３号に提案したデータ管理機構を用いることにより、コンピュータ内では図４に示されるようなデータ構造として記憶される。このデータ構造は、市販されているコンピュータ、たとえば、パーソナルコンピュータのハードウェア資源、特に、プロセッサ及びメモリを使用して大規模な表形式データの検索、ソート、集計等を実現するために提案された、コンピュータのメモリ上に置かれる表形式データのデータ構造であることに注意すべきである。【００４４】
なお、「元の表形式データ中でレコードが収容されている位置を表す情報レコード番号（すなわち、原始レコード位置番号）」と「レコードの並び順を表す情報（すなわち、レコード順序番号）」とが本文書中では明確に区別されている。すべてのレコードには原始レコード位置番号が関連付けられている。この原始レコード位置番号は、データ項目に対応した項目値を含む個々のレコードを特定するために利用される仮想的な情報である。一般に、表形式データは、レコードが常に原始レコード位置番号の順番に配列されているとは限らない。たとえば、元の表形式データをある項目の項目値に関して昇順にソートすると、得られる表形式データのレコードの並び順は元の表形式データのレコードの並び順とは異なる。但し、元々の表形式データ中のレコードは、レコードが原始レコード位置番号の順番に並べられていることがあり、この場合には、原始レコード位置番号とレコード順序番号とが初期的に一致している。【００４５】
図４に示すように、表形式データの各レコードの並び順の番号（レコード順序番号）と、原始レコード位置番号は、レコード順序指定配列４０１（以下、この配列を「ＯｒｄＳｅｔ」のように略記する。）によって対応付けられる。レコード順序指定配列４０１は、レコード順序番号の順に原始レコード位置番号を格納している。図４の例では、レコードは原始レコード位置番号の順番に並べられている。【００４６】
ここで、本明細書中での配列の記法について説明する。一般に、配列Ａは、添字をｉとすると、配列の要素がＡ［ｉ］のように表記できるが、図面中では、配列は、配列の要素Ａ［ｉ］は、実線で囲まれた領域内に示され、要素Ａ［ｉ］と要素Ａ［ｉ＋１］の境界は点線で示されている。また、要素Ａ［ｉ］の添字ｉが要素Ａ［ｉ］の左側に示されている。また、配列の添字ｉは０から始まる整数で表されている。【００４７】
もう一度図４に戻ると、性別に関しては、表形式データのレコード順序番号＝０に対応する原始レコード位置番号は、配列ＯｒｄＳｅｔ［０］から「０」であることがわかる。原始レコード位置番号が「０」であるレコードに関する実際の性別の値、即ち、「男」又は「女」は、実際の値が所定の順序（たとえば、昇順又は降順）に従ってソートされた値リストである項目値配列４０３（以下、項目値配列、すなわち、値リストを「ＶＬ」のように略記する。）へのポインタ配列である項目値番号配列４０２（以下、項目値番号配列、すなわち、ポインタ配列を「ＶＮｏ」のように略記する。）を参照することによって取得できる。ポインタ配列４０２は、配列ＯｒｄＳｅｔ４０１に格納されている原始レコード位置番号の順番に従って、実際の値リスト４０３中の要素を指し示すポインタを格納している。これにより、表形式データのレコード「０」に対応する性別の項目値は、（１）配列ＯｒｄＳｅｔ４０１からレコード順序番号＝０に対応する原始レコード位置番号＝０を取り出し、（２）値リストへのポインタ配列４０２から原始レコード位置番号＝０に対応する要素「１」を取り出し、（３）値リスト４０３から、値リストへのポインタ配列３０２から取り出された要素「１」によって指し示される要素「女」を取り出すことにより取得できる。【００４８】
他のレコードに対しても、また、年齢及び身長に関しても同様に項目値を取得することができる。【００４９】
このように表形式データは、値リストＶＬと、値リストへのポインタ配列ＶＮｏの組合せにより表現され、この組合せを、特に、「情報ブロック」と称する。図４には、性別、年齢及び身長に関する情報ブロックがそれぞれ情報ブロック４０８、４０９及び４１０として示されている。【００５０】
単一のコンピュータが単一のメモリ（物理的には複数であっても良いが、単一のアドレス空間に配置されアクセスされるという意味で単一のメモリ）を有するならば、単一のコンピュータは、当該メモリに、順序集合の配列ＯｒｄＳｅｔ、各情報ブロックを構成する値リストＶＬおよびポインタ配列ＶＮｏとを記憶しておけばよい。しかしながら、本発明の種々の実施形態では、表形式データの操作は、小容量の専用のローカルメモリを伴う複数台の演算ユニットにより構成されたマルチコア型処理装置によって行われる。そのため、効率的な並列処理を実現するために、表形式データを保持する新たな仕組みが提案されている。【００５１】
［マルチコア型処理装置向けデータ構造］
次に、本発明の一実施形態によるマルチコア型処理装置向けデータ構造について説明する。図５Ａ乃至５Ｄは本発明の一実施形態によるデータ構造の説明図である。図５Ａは、元々の表形式データの一例を示している。図５Ａに示された表形式データ５００は、「Ｓｃｈｏｏｌ」というデータ項目５０１に対応した項目値（たとえば、「Ｗｅｓｔ」、「Ｓｏｕｔｈ」、「Ｎｏｒｔｈ」及び「Ｅａｓｔ」と、「Ａｇｅ」というデータ項目５０２に対応した項目値（たとえば、「１２」、「８」、「１１」、「１０」など）とを含むレコードの配列として表される。この元々の表形式データ５００は、説明を簡単にするため、レコードが原始レコード位置番号の順番に並んでいる、すなわち、レコードを特定する原始レコード位置番号と、レコードの並び順を表すレコード順序番号とが一致しているものと仮定する。配列の先頭に位置するレコード５１０は、原始レコード位置番号０が付与されたレコードである。レコード５１０のデータ項目「Ｓｃｈｏｏｌ」の項目値は「Ｗｅｓｔ」であり、データ項目「Ａｇｅ」の項目値は「１２」である。【００５２】
本発明の一実施形態によるマルチコア型処理装置向けデータ構造では、この表形式データのレコードは、ブロック番号（本例では、０から７の８個のブロック番号）によって識別されるブロック５２０、５２１、・・・、５２７に分割される。初期的には、このブロックは、このブロックに含まれるレコードの処理を担当するマルチコア型処理装置の演算ユニットに対応している。【００５３】
マルチコア型処理装置向けデータ構造は、レコードの並び順（すなわち、レコード順序番号）と、データ構造内の項目値の格納場所とを対応付ける順序に関する情報（順序情報）と、データ項目毎の項目値に関する情報（項目情報）とによって構成される。順序情報は、機能的に上記の本発明の一実施形態の基礎となるデータ管理機構におけるレコード順序指定配列ＯｒｄＳｅｔに対応し、項目情報は、同様に情報ブロックに対応している。順序情報と項目情報は、共にグローバルメモリに保持され、必要に応じて、それらの一部が各演算ユニットのローカルメモリへ転送される。図５Ｂは順序情報５３０を示し、図５Ｃ及び５Ｄは、それぞれ、データ項目「Ｓｃｈｏｏｌ」及びデータ項目「Ａｇｅ」の項目情報５３１及び５３２を示している。【００５４】
順序情報５３０は、ブロック番号がレコード順序番号の順番に、格納されているブロック番号配列５４０を含む。本実施形態のデータ構造では、レコード毎に当該レコードの操作を担当する演算ユニットが定められる。よって、（複数の）レコードは、各演算ユニットが担当するレコード、すなわち、担当レコードに分割され、担当レコード毎にブロック番号が割り当てられる。ブロック番号配列をＢｌｋＮｏ、レコード順序番号をｉとすると、ＢｌｋＮｏ［ｉ］は、レコード順序番号ｉをもつレコードが属するブロックのブロック番号がＢｌｋＮｏ［ｉ］であることを表している。ブロック番号配列５４０は、レコードの個数に等しいサイズを有する整数型の配列である。また、ブロック番号配列５４０は第２のタイプのデータである。たとえば、図５Ａ乃至５Ｄの例では、レコード順序番号０から３のレコードはブロック番号０のブロックに含まれ、レコード順序番号４から７のレコードはブロック番号１のブロックに含まれ、以下同様である。【００５５】
本実施形態のデータ構造によれば、全レコードはブロックに対応した担当レコードに分割されるので、ブロック毎に、担当レコードのそれぞれを元の表形式データのレコードと対応付ける情報が必要になる。そのため、順序情報５３０は、ブロック毎に、担当レコードのレコード順序番号がレコード順序番号の順番に格納されているレコード順序番号配列５５１−１、５５１−２、・・・、５５１−７を含む。レコード順序番号配列は、以下では、ＧＯｒｄという名前で呼ばれることがある。たとえば、図５Ａ乃至５Ｄの例では、ブロック番号０というブロックに属する担当レコードのレコード順序番号は、０、１、２、３であり、ブロック番号１というブロックに属する担当レコードのレコード順序番号は、４、５、６、７であり、以下同様である。レコード順序番号配列は、各ブロックに属する担当レコードの数と同じサイズを有し、整数型の配列である。また、レコード順序番号配列は、各演算ユニットのローカルメモリに収容可能なサイズに分割されているので、第１のタイプのデータである。したがって、レコード順序番号配列は、必要に応じて、グローバルメモリから各演算ユニット内のローカルメモリへ転送される。【００５６】
さらに、各レコードに含まれる項目値は、後述する項目情報の形で保持されているので、各演算ユニットは、担当レコードに含まれる項目値をアクセスするためのアドレス情報、すなわち、項目値アクセス情報を取得することが必要である。よって、本実施形態のデータ構造によれば、順序情報５３０は、ブロック毎に、担当レコードの項目値アクセス情報がレコード順序番号の順番に格納されている項目値アクセス情報配列５５２−１、５５２−２、・・・、５５２−７をさらに含む。この項目値アクセス情報配列は整数型の配列であり、項目値アクセス情報配列のサイズは担当レコードのレコード数に一致する。項目値アクセス情報配列もまた、第１のタイプのデータであり、必要に応じて、グローバルメモリから各演算ユニット内のローカルメモリへ転送される。項目値アクセス情報配列は、ＬＯｒｄという名前で呼ばれることもある。たとえば、図５Ａ乃至５Ｄの例では、ブロック番号０というブロックに含まれるレコード順序番号が０というレコードに含まれる項目値は、このブロック番号０に関して、０という項目値アクセス情報によってアクセス可能であり、ブロック番号１というブロックに含まれるレコード順序番号が５というレコードに含まれる項目値は、このブロック番号１に関して、１という項目値アクセス情報によってアクセス可能である。【００５７】
次に、本実施形態によれば、項目情報は、データ項目毎の項目情報として保持される。たとえば、図５Ａ乃至５Ｄの例では、データ項目「Ｓｃｈｏｏｌ」に関する項目情報５３１とデータ項目「Ａｇｅ」に関する項目情報５３２とがグローバルメモリに構築される。そして、ブロック毎の担当レコードに含まれる項目値は、データ項目毎に各演算ユニットが項目値アクセス情報配列を用いてアクセスすることができるようにグローバルメモリに保持され、必要に応じて、グローバルメモリから各演算ユニット内のローカルメモリへ転送される。項目値そのものは、データ項目毎に、一意の項目値が所定の順序（昇順又は降順）に格納されているグローバル項目値配列としてグローバルメモリ上に構築されている。たとえば、図５Ａ乃至５Ｄの例では、データ項目「Ｓｃｈｏｏｌ」に関する項目値は、グローバル項目値配列５７０としてグローバルメモリに保持され、データ項目「Ａｇｅ」に関する項目値は、グローバル項目値配列５９０としてグローバルメモリに保持されている。このグローバル項目値配列は第２のタイプのデータである。なお、グローバル項目値配列は、項目値そのものを格納する配列であるため、整数型、浮動小数点型、文字列型などの様々なデータ型をとる。【００５８】
項目情報は、担当レコードに関連した項目値アクセス情報を用いて、グローバル項目値配列に格納されている項目値を特定できるように構成されている。そのため、項目情報は、データ項目毎に、担当レコードに含まれる項目値を特定するローカル項目値番号が原始レコード位置番号の順番に格納されているローカル項目値番号配列と、ローカル項目値番号によって表される項目値がグローバル項目値配列中に格納されている位置を指定する項目値指定ポインタがローカル項目値番号の順番に格納されている項目値指定ポインタ配列とを含む。ローカル項目値番号配列及び項目値指定ポインタ配列はブロック毎に設けられる。ローカル項目値番号配列は、担当レコードのレコード数に一致するサイズを有する整数型配列であり、第１のタイプのデータであり、ＶＮｏという名前で呼ばれることもある。項目値指定ポインタ配列は、担当レコードに含まれる一意の項目値の数と同じサイズを有する整数型配列であり、第１のタイプのデータであり、ＬＶＬという名前で呼ばれることもある。ローカル項目値番号配列及び項目値指定ポインタ配列は、共に第１のタイプのデータであるため、ブロック毎にグローバルメモリ上に構築され、必要に応じて、グローバルメモリから各演算ユニット内のローカルメモリへ転送される。【００５９】
図５Ａ乃至５Ｄの例では、データ項目「Ｓｃｈｏｏｌ」に関して、項目情報５３１は、ローカル項目値番号配列５６１−０、５６１−１、・・・、５６１−７と、項目値指定ポインタ配列５６２−０、５６２−１、・・・、５６２−７と、グローバル項目値配列５９０とを含む。ローカル項目値番号配列と項目値指定ポインタ配列は、ブロック毎に分割されている。同図において、たとえば、ローカル項目値番号配列ＶＮｏの先頭の要素の値は「１」である。これは、値が「０」である項目値アクセス情報によって指定されたレコードに含まれる項目値の項目値番号が「１」であることを意味する。項目値番号が「１」である項目値は、項目値指定ポインタ配列ＬＶＬの２番目の要素、すなわち、ＬＶＬ［１］を参照することにより、グローバル項目値配列ＧＶＬの３番目の要素、すなわち、ＧＶＬ［２］であることがわかる。その他のブロックに関しても、また、その他のデータ項目に関しても、同様である。【００６０】
このように、本実施形態のデータ構造によれば、各ブロックに属するレコードに含まれる項目値は、ブロック内で各項目値に付けられたローカル項目値番号と、このローカル項目値番号とグローバル項目値配列中の項目値とを対応付ける項目値指定ポインタと、グローバル項目値配列とによって表現されている。【００６１】
［マルチコア型処理装置向けデータ構造の構築］
図６は、本発明の一実施形態によるマルチコア型処理装置向けデータ構造をグローバルメモリ上に構築する方法のフローチャートである。本方法によれば、マルチコア型処理装置の制御ユニットは、表形式データレコードをマルチコア型処理装置の各演算ユニットが担当する担当レコードを含むブロックに分割し、各レコードに対応するブロック番号を表形式データ中のレコード順に格納するブロック番号配列を作成し、グローバルメモリに格納する（ステップ６０２）。次に、複数台の演算ユニットが並列的に、担当レコードのレコード順序番号をレコード順序番号の順番に格納するレコード順序番号配列を、各演算ユニット内のローカルメモリ上に作成し、グローバルメモリへ転送する（ステップ６０４）。この処理は、たとえば、制御ユニットから各演算ユニットへ、各演算ユニットの担当レコードの先頭のレコード順序番号と担当レコードのレコード数とを通知することによって、簡単に実現される。その後、複数台の演算ユニットが並列的に動作して、担当レコードに含まれる項目値にアクセスする項目値アクセス情報をレコード順序番号の順番に格納する項目値アクセス情報配列を各演算ユニット内のローカルメモリ上に作成し、グローバルメモリへ転送するステップ（ステップ６０６）。各演算ユニットは、０から始まる連番を、担当レコードのレコード数に一致する個数だけ、項目値アクセス情報配列に格納すればよい。最後に、複数台の演算ユニットが並列的に動作して、担当レコードに含まれる項目値が項目値アクセス情報を用いてアクセスされるように、データ項目毎に項目値を各演算ユニット内のローカルメモリ上に展開し、展開された項目値をグローバルメモリへ転送する（ステップ６０８）。たとえば、演算ユニットは、協働して、データ項目毎に、ブロック内で各項目値に付けられたローカル項目値番号を原始レコード位置番号の順番に格納するローカル項目値番号配列と、このローカル項目値番号とグローバル項目値配列中の項目値とを対応付ける項目値指定ポインタをローカル項目値番号の順番に格納する項目値指定ポインタ配列とをローカルメモリ上に作成し、グローバルメモリへ転送し、全レコードに含まれる一意の項目値が所定の順序（昇順又は降順）で格納されたグローバル項目値配列をグローバルメモリ上に作成する。【００６２】
なお、ステップ６０２とステップ６０４の順序は入れ換え可能である。また、担当レコード数が比較的少なく、各演算ユニットがレコード順序番号配列と項目値アクセス情報配列を同時にローカルメモリに格納可能であれば、各演算ユニットは、両方の配列を同時に作成し、その後、グローバルメモリへ転送してもよい。或いは、制御ユニットが、ブロック毎のレコード順序番号配列及び項目値アクセス情報配列をグローバルメモリ上に直接作成しても構わない。【００６３】
なお、上記説明では、原始レコード位置番号とレコード順序番号とが一致していると仮定しているが、原始レコード位置番号とレコード順序番号が一致していなくてもかまわない。たとえば、元の表形式データのレコードがソートされ、原始レコード位置番号と初期のレコード順序番号とが一致していなくても、マルチコア型処理装置向けデータ構造を構築することが可能である。具体的には、制御ユニットは、表形式データのレコードを各演算ユニットが担当する担当レコードを含むブロックに分割し、各レコードに対応するブロック番号を表形式データのレコードのレコード順序番号の順番に格納するブロック番号配列を作成し、グローバルメモリに格納すればよい。【００６４】
［項目値の取得処理］
次に、本発明の一実施形態によるマルチコア型処理装置向けデータ構造における表形式データの項目値の取得について説明する。図７は、本発明の一実施形態による項目値取得方法のフローチャートである。項目値は、図５Ａ乃至５Ｄを参照して説明したように、データ項目毎に、項目情報の形でグローバルメモリ上に保持されている。よって、たとえば、制御ユニットは、唯一のレコードに含まれる項目値を容易に取得することができる。しかし、制御ユニットは、多数のレコードに含まれる項目値を同時に取得するには適していない。したがって、本実施形態では、多数の演算ユニットが同時に動作することにより、多数のレコードに含まれる項目値を同時に取得するような状況を考慮している。このような状況においても、項目値取得の基本動作は、ある特定の演算ユニットが担当レコード中のあるレコードに含まれる項目値を取得する処理であることが理解されるであろう。多数の演算ユニットが同時に動作できるようにするため、各演算ユニットは、項目値を取得するために必要な情報をグローバルメモリからローカルメモリへ転送し、ローカルメモリ上で各種の演算を実行する。【００６５】
図７に示されているように、最初に、制御ユニットが、グローバルメモリ上のブロック番号配列を参照して、項目値が取得されるべき所定のレコードが含まれるブロックのブロック番号と、このブロックを担当する演算ユニットとを決定する（ステップ７０２）。次に、制御ユニットは、決定されたブロック番号によって識別される演算ユニットへ所定のレコードのレコード順序番号を通知する（ステップ７０４）。その後、演算ユニットは、この演算ユニットの担当レコードに関するレコード順序番号配列及び項目値アクセス情報配列を、グローバルメモリからこの演算ユニットのローカルメモリへ転送する（ステップ７０６）。続いて、演算ユニットは、通知されたレコード順序番号が格納されている位置をローカルメモリへ転送されたレコード順序番号配列中で特定する（ステップ７０８）。その後、演算ユニットは、特定された位置によって指定される項目値アクセス情報をローカルメモリへ転送された項目値アクセス情報配列中で特定する（ステップ７１０）。最後に、演算ユニットは、データ項目毎に、グローバルメモリに保持されたグローバル項目値配列の中から特定された項目値アクセス情報によって指定される項目値を取得し、取得された項目値をグローバルメモリへ転送する（ステップ７１２）。【００６６】
本実施形態によるデータ取得の一例を、図５Ａ乃至５Ｄに示されたデータ構造を用いて、より詳細に説明する。たとえば、レコード順序番号＝１４であるレコード、図５Ａ乃至５Ｄでは、符号５１１で示されたレコードの項目値を取得することを考える。制御ユニットは、ブロック番号配列５４０の添字＝１４の要素の値、すなわち、ＢｌｋＮｏ［１４］＝３を読み出す。これにより、対象レコードに対応するブロック番号は３であることがわかる。そこで、制御ユニットは、ブロック番号３に含まれるレコードを担当する演算ユニットへ対象レコードのレコード順序番号である１４を通知する。ブロック番号と演算ユニットとの対応関係は、たとえば、制御ユニットによって管理されている。その後、レコード順序番号１４を通知された演算ユニットは、グローバルメモリから、ブロック番号＝３であるブロックに関するレコード順序番号配列５５１−３をローカルメモリへロードする。代替的な実施形態では、制御ユニットがブロック番号＝３であるブロックに関するレコード順序番号配列５５１−３をグローバルメモリから演算ユニットのローカルメモリへ転送する。【００６７】
次に、演算ユニットは、レコード順序番号配列５５１−３の中で、レコード順序番号＝１４が格納されている位置を検索する。この格納位置は、この演算ユニットの担当レコード中での対象レコードの順位（ランク）とも称される。レコード順序番号配列は、本実施形態では、昇順の配列であるため、この格納位置は、周知の２分割法などによって効率的に見つけられる。本例では、格納位置＝２である。【００６８】
次に、演算ユニットは、グローバルメモリから、ブロック番号＝３であるブロックに関する項目値アクセス情報配列５５２−３をローカルメモリへ転送する。代替的な実施形態では、項目値アクセス情報配列５５２−３は、制御ユニットによって、グローバルメモリから演算ユニットのローカルメモリへ転送される。さらに別の実施形態では、項目値アクセス情報配列５５２−３は、レコード順序番号配列５５１−３と同時に、グローバルメモリから演算ユニットのローカルメモリへ転送される。なお、以下では、繰り返して説明しないが、グローバルメモリからローカルメモリへのデータの転送は、特に断らない限り、制御ユニットと演算ユニットのどちらが行ってもよい。さらに、転送されるべきデータ量と比べて、演算ユニットのローカルメモリの容量に余裕がある場合には、２つ以上のデータを一括して、グローバルメモリからローカルメモリへ転送してもよい。演算ユニットは、項目値アクセス情報配列５５２−３の中で、対象レコードの順位で示される位置に格納されている値、すなわち、ＬＯｒｄ［２］＝２を取得する。【００６９】
次に、演算ユニットは、グローバルメモリから、データ項目＝“Ｓｃｈｏｏｌ”に関して、かつ、ブロック番号＝３であるブロックに関して、ローカル項目値番号配列５６１−３をローカルメモリへロードする。演算ユニットは、先に取得した値、すなわち、ＬＯｒｄ［２］＝２の値を、ローカル項目値番号配列５６１−３からローカル項目値を取得するためのオフセット値として使用する。すなわち、演算ユニットは、ローカル項目値配列５６１−３から、ＶＮｏ［２］＝０を取得する。【００７０】
次に、演算ユニットは、グローバルメモリから、データ項目＝“Ｓｃｈｏｏｌ”に関して、かつ、ブロック番号＝３であるブロックに関して、項目値指定ポインタ配列５６２−３をローカルメモリへ転送する。演算ユニットは、項目値指定ポインタ配列５６２−３から、先に取得されたローカル項目値＝０によって指定されている項目値指定ポインタ、すなわち、ＬＯｒｄ［０］＝１を取得する。【００７１】
最後に、演算ユニットは、データ項目＝“Ｓｃｈｏｏｌ”に関して、グローバルメモリに保持されているグローバル項目値配列５７０を参照して、対象レコードに含まれる項目値、すなわち、ＧＶＬ［１］＝“Ｎｏｒｔｈ”を取得する。代替的な実施形態では、演算ユニットは、先に取得された項目値指定ポインタ＝１を制御ユニットへ通知し、制御ユニットがグローバル項目値配列５７０から、通知された項目値指定ポインタによって指定される項目値を取得する。【００７２】
引き続き、演算ユニットは、データ項目＝“Ｓｃｈｏｏｌ”に関して実行した処理と同様の動作を、データ項目＝“Ａｇｅ”に関して実行することにより、対象レコードに含まれる項目値＝９を取得する。【００７３】
［表形式データのコンパイル処理］
次に、本発明の一実施形態による表形式データからマルチコア型処理装置向けデータを作成するコンパイル処理について説明する。以下では、図５Ａ乃至５Ｄに示されたデータ構造に関連して、本発明の一実施形態によるコンパイル処理が記述される。図８は、本発明の一実施形態によるコンパイル処理の概略的なフローチャートである。【００７４】
順序情報作成：本実施形態によれば、最初に、ブロック番号配列、レコード順序番号配列及び項目値アクセス情報配列からなる順序情報がグローバルメモリ上に作成される（ステップ８０２）。上述のように、ブロック番号配列は制御ユニットによって作成され、レコード順序番号配列及び項目値アクセス情報配列は、複数台の演算ユニットによって並列的に作成され、グローバルメモリへ転送される。【００７５】
ブロック内コンパイル：次に、複数台の演算ユニットが並列的に動作して、データ項目毎に、単一のブロックに含まれる担当レコードの原始レコード位置番号の順番に、ローカル項目値番号を格納するローカル項目値番号配列を作成し、グローバルメモリへ転送する（ステップ８０４）。このとき、同時に、複数台の演算ユニットは、担当レコードに含まれる項目値のうちの一意の値を所定の順序（たとえば、昇順又は降順）に格納するローカル項目値作業配列も作成し、グローバルメモリへ転送する。【００７６】
ブロック間コンパイル１（マージ）：次に、複数台の演算ユニットが並列的かつ階層的に動作して、データ項目毎に、２個のブロックに関連した、ブロック番号作業配列、ローカル項目値作業配列、及び、項目値がローカル項目値作業配列中に格納されている位置を指定するポインタがローカル項目値番号の順番に格納されているローカル項目値指定ポインタ作業配列からなる１対の組から、２個のブロックをマージしたブロックに関連した、ブロック番号作業配列、ローカル項目値作業配列、及び、ローカル項目値指定ポインタ作業配列からなる組を作成するマージ処理を実行する。演算ユニットは、最終的に１個のブロックにマージされるまでこのマージ処理を繰り返し実行し、最終的なブロック番号作業配列、最終的なローカル項目値作業配列、及び、最終的なローカル項目値指定ポインタ配列をグローバルメモリへ転送する（ステップ８０６）。最終的なローカル項目値作業配列はグローバル項目値配列に一致する。【００７７】
ブロック間コンパイル２（分配）：最後に、複数台の演算ユニットが並列的に動作して、データ項目毎に、最終的なローカル項目値指定ポインタ作業配列中の要素を最終的なブロック番号作業配列中の対応する要素によって指定されたブロック番号毎に分配し所定の順番に並べることにより、ローカル項目値番号によって表される項目値が、最終的なローカル項目値作業配列、すなわち、グローバル項目値配列中で格納されている位置を指定するポインタを格納する項目値指定ポインタ配列を作成し、グローバルメモリへ転送する（ステップ８０８）。【００７８】
以上のステップにより、図５Ａに示された表形式データから、図５Ｂに示されたブロック番号配列、レコード順序番号配列及び項目値アクセス情報配列と、図５Ｃに示された、データ項目＝“Ｓｃｈｏｏｌ”に関するローカル項目値番号配列、項目値指定ポインタ配列及びグローバル項目値配列と、図５Ｄに示された、データ項目＝“Ａｇｅ”に関するローカル項目値番号配列、項目値指定ポインタ配列及びグローバル項目値配列とがグローバルメモリ上に作成される。【００７９】
このようなマルチコア型処理装置向けデータ構造を採用することにより、以下のような利点が得られる。
利点１：省メモリ
グローバル項目値配列、すなわち、値リストに同一値が重複して格納されないので、省メモリになる。
利点２：演算の高速性
ブロック間ソートでは、算出した順位が全てのブロックにとって有効である。
利点３：演算ユニット間通信によるグローバルメモリアクセスの低減
ブロック間ソートの第１フェーズが最も沢山のＯ（ｎ＊ｌｏｇ（ｎ））のグローバルメモリアクセスを必要とする。それ以外の処理のグローバルメモリアクセスはＯ（ｎ）である。ブロック間通信を使うと、グローバルメモリアクセス量をちょうど１／３にすることができる。【００８０】
以下、図５Ａ乃至５Ｄに示された表形式データに関連して、本発明の一実施形態によるコンパイル処理をより詳細に説明する。図９Ａ及び９Ｂは本発明の一実施形態による順序情報作成処理の説明図である。図９Ａ及び９Ｂに示されたデータは図５Ａ乃至５Ｄに示されたデータと同じデータであり、図９Ａの表形式データ５００から、図９Ｂの順序情報５３０が作成される。順序情報作成処理については上述の通りである。【００８１】
図１０Ａ乃至１０Ｃは、本発明の一実施形態によるブロック内コンパイル処理の概要図である。ブロック内コンパイル処理によれば、図１０Ａに示された表形式データから、図１０Ｂ及び図１０Ｃに示されたデータ項目＝“Ｓｃｈｏｏｌ”に関する項目情報及びデータ項目＝“Ａｇｅ”に関する項目情報が作成される。同図に示されているように、項目情報には、ローカル項目値番号配列ＶＮｏとローカル項目値作業配列ｗＶＬとが含まれている。ブロック内コンパイル処理は、Ｂｌｏｃｋ−０、Ｂｌｏｃｋ−１、・・・、Ｂｌｏｃｋ−７というブロック毎に、各演算ユニットによって並列に実行される。【００８２】
ここで、１つのブロックについてのブロック内コンパイル処理の一実施例について説明する。図１１は、ブロック内コンパイル処理の一実施例の概要図である。本例では、データ項目＝“Ｓｃｈｏｏｌ”に関する５行（レコード数＝５）のブロックＳｃｈｏｏｌ（すなわち、原始レコード位置番号の順序に項目値が格納されている項目値配列Ｓｃｈｏｏｌ）から、ローカル項目値番号配列ＶＮｏとローカル項目値作業配列ｗＶＬを作成する。ローカル項目値作業配列ｗＶＬは、項目値配列Ｓｃｈｏｏｌに含まれている項目値から抽出された一意の項目値が所定の順序（たとえば、昇順又は降順）に格納されている値のリストである。一方、ローカル項目値番号配列ＶＮｏは、ｉが原始レコード位置番号を表すとき、元の項目値配列Ｓｃｈｏｏｌの要素であるＳｃｈｏｏｌ［ｉ］とローカル項目値作業配列ｗＶＬ［ｊ］との間に、
Ｓｃｈｏｏｌ［ｉ］＝ｗＶＬ［ＶＮｏ［ｉ］］
という関係が成り立つような配列である。なお、以下の処理は、演算ユニットが演算ユニットのローカルメモリを使用して実行する。【００８３】
最初に、作業用データが初期化される。図１２は、ブロック内コンパイル処理の初期化処理の説明図である。ローカル項目値番号配列ＶＮｏのサイズはブロックの行数に等しく、ＶＮｏ［ｉ］＝ｉ（ｉ＝０、１、２・・・）のように０から始まる整数で初期化される。変換配列ＴＲはローカル項目値番号配列を変換するための配列であり、ＶＮｏと同じサイズである。ポインタ配列ＰＴＲは、項目値の並び順を表現する配列であり、配列ＰＴＲの要素は項目値の配列Ｓｃｈｏｏｌ中での項目値の位置を表している。ポインタ配列ＰＴＲと元の項目値配列Ｓｃｈｏｏｌのペアは、所定の順序に並べられた項目値のリストを表現している。作業ポインタ配列ｗＰＴＲは、元の項目値配列Ｓｃｈｏｏｌと組み合わされて、ブロック内のペアを併合した後の項目値のリストを表現するために利用される。【００８４】
ブロック内コンパイル処理は、ブロック内のペアを順番にマージすることによって実現される。たとえば、ブロック内に５個のレコードが存在するときに、最初に１番目のレコードと２番目のレコードのペア（第１ペア）と、３番目のレコードと４番目のレコードのペア（第２ペア）と、５番目のレコードのペア（ペアを構成する相手は存在しないが、便宜的に第３ペアと称する）の３組のペアの間で項目値の大小関係を比較する。これは、１段目のマージ処理である。次に、第３のペアと第２のペアの間の比較処理、及び、第１のペアの間（第１のペアと対になるペアは存在しない）の比較処理を実行する。これは、２段目のマージ処理である。このようにして、最後に１組のペアになるまで段階的にマージ処理を繰り返すことにより、最終的に、ブロック内でマージされたローカル項目値番号配列ＶＮｏとローカル項目値作業配列ｗＶＬが得られる。【００８５】
図１３Ａ乃至１３Ｇは、ブロック内コンパイル処理の１段目のマージ処理の説明図である。図１３Ａには、１番目のペアの１回目の比較処理、すなわち、Ｓｃｈｏｏｌ［ＰＴＲ［０］］とＳｃｈｏｏｌ［ＰＴＲ［１］］の比較処理が示されている。この例では、ポインタ配列ＰＴＲによって指示された項目値配列Ｓｃｈｏｏｌの２個の値（すなわち、ペア）の大小を比較し、小さい方を指示するポインタ配列ＰＴＲの要素と同じ位置にある変換配列ＴＲの要素に作業ポインタ配列ｗＰＴＲの添字を格納する。より具体的には、文字列の大小関係をアルファベット順に比較すると仮定するならば、
Ｓｃｈｏｏｌ［ＰＴＲ［０］］＝Ｓｃｈｏｏｌ［０］＝“Ｗｅｓｔ”
と
Ｓｃｈｏｏｌ［ＰＴＲ［１］］＝Ｓｃｈｏｏｌ［１］＝“Ｓｏｕｔｈ”
を比較すると、
“Ｗｅｓｔ”＞“Ｓｏｕｔｈ”
であるため、
ｗＰＴＲ［０］＝ＰＴＲ［１］＝１
ＴＲ［１］＝０
となる。すなわち、ｉ、ｊが０から始まる整数として、一般的に、
ＩＦ  Ｓｃｈｏｏｌ［ＰＴＲ［ｉ］］＞Ｓｃｈｏｏｌ［ＰＴＲ［ｊ］］
ＴＨＥＮ  ｗＰＴＲ［ｉ］＝ＰＴＲ［ｊ］
ＴＲ［ｊ］＝ｉ
ＥＬＳＥ  ＩＦ  Ｓｃｈｏｏｌ［ＰＴＲ［ｉ］］＜Ｓｃｈｏｏｌ［ＰＴＲ［ｊ］］
ＴＨＥＮ  ｗＰＴＲ［ｊ］＝ＰＴＲ［ｉ］
ＴＲ［ｉ］＝ｊ
と記述できる。この処理では、小さい方が比較処理を通過し、大きい方はもう一度次の相手と比較される。【００８６】
図１３Ｂは、１番目のペアの２回目の比較処理の説明図である。１番目の２回目の比較処理の対象は、１回目の比較処理で小さい方ではない、と判定されたＳｃｈｏｏｌ［ＰＴＲ［０］］である。このとき、比較相手は存在しないので、Ｓｃｈｏｏｌ［ＰＴＲ［０］］は小さい方であると判定され、
ｗＰＴＲ［１］＝ＰＴＲ［０］＝０
ＴＲ［０］＝１
となる。【００８７】
同様に、図１３Ｃは２番目のペアの１回目の比較処理を示し、図１３Ｄは２番目のペアの２回目の比較処理を示し、図１３Ｅは３番目のペアの１回目の比較処理を示している。３番目のペアは、実際には、ペアを構成せず、比較対象が１つしか存在しないので、Ｓｃｈｏｏｌ［ＰＴＲ［４］］はそのまま小さい方であると判定される。【００８８】
図１３Ｆ及び１３Ｇは、ブロック内コンパイル処理の１段目のマージ処理の後処理の説明図である。後処理では、最初に、ローカル項目値番号配列ＶＮｏが更新される。具体的には、
ＶＮｏ［ｉ］＝ＴＲ［ＶＮｏ［ｉ］］
によってローカル項目値番号が変換される。これは、ペアの比較処理によって、小さいと判定された項目値に対応するローカル項目値番号がローカル項目値番号配列ＶＮｏ中で前方に配置されることを意味している。次に、ポインタ配列ＰＴＲが更新される。具体的には、
ＰＴＲ［ｉ］＝ｗＰＴＲ［ｉ］
に従って、ポインタ配列ＰＴＲに作業ポインタ配列ｗＰＴＲを上書きすることによって、ポインタ配列ＰＴＲが更新される。【００８９】
続いて、ブロック内コンパイル処理の２段目のマージ処理について説明する。２段目のマージ処理では、１段目のマージ処理で利用された３番目のペアと２番目のペアとによって、２段目の第１のペアが形成され、１段目の１番目のペア単独で２段目の第２のペアが形成される。本発明の好ましい実施形態によれば、このように、２段目のペアリングを１段目のペアリングと逆順に（すなわち、後方から）実行される。その理由は、処理量をバランスさせるためである。もちろん、１段目と同様に前方からペアリングを行っても構わない。【００９０】
２段目のマージ処理では、たとえば、１段目のマージ処理の一方のペアの項目値がａ１及びａ２（ａ１＜ａ２）であり、もう一方のペアの項目値がｂ１及びｂ２（ｂ１＜ｂ２）であるならば、最初にａ１とｂ１を比較し、次に、もし、ａ１＜ｂ１であるならば、ａ２とｂ１を比較することにより、ａ１、ａ２、ｂ１、ｂ２の大小関係が決定される。また、もし、ｂ１＝ａ２のように同一値が存在するならば、対応するポインタ配列ＰＴＲの要素の値が小さい方を選択することにより、重複を排除する。【００９１】
図１４Ａ乃至１４Ｆはブロック内コンパイル処理の２段目のマージ処理の説明図である。図１４Ａは、２段目のマージ処理の１番目のペアの１回目の比較処理を示している。同図の例では、１段目の第２ペアからのＳｃｈｏｏｌ［ＰＴＲ［２］］＝“Ｓｏｕｔｈ”と、第３ペアからのＳｃｈｏｏｌ［ＰＴＲ［４］］＝“Ｓｏｕｔｈ”の比較処理が行われる。本例では、同一値であるため、ｉ、ｊ（ｉ＜ｊ）を０から始まる整数として、一般的に、
ＩＦ  Ｓｃｈｏｏｌ［ＰＴＲ［ｉ］］＝Ｓｃｈｏｏｌ［ＰＴＲ［ｊ］］
ＴＨＥＮ    ｗＰＴＲ［ｉ］＝ＰＴＲ［ｉ］
ＩＦ  ＰＴＲ［ｉ］＜ＰＴＲ［ｊ］
ＴＨＥＮ    ＴＲ［ｉ］＝ＰＴＲ［ｉ］
ＴＲ［ｊ］＝ＰＴＲ［ｉ］
ＥＬＳＥ    ＴＲ［ｉ］＝ＰＴＲ［ｊ］
ＴＲ［ｊ］＝ＰＴＲ［ｊ］
に従って、
ｗＰＴＲ［２］＝３
ＴＲ［２］＝２
ＴＲ［４］＝２
のように設定される。【００９２】
図１４Ｂは、２段目のマージ処理の１番目のペアの２回目の比較処理を示している。具体的には、Ｓｃｈｏｏｌ［ＰＴＲ［３］］＝“Ｗｅｓｔ”の単独の比較処理が行われる。比較相手が存在しないので、Ｓｃｈｏｏｌ［ＰＴＲ［３］］は小さい方であると判定され、図１３Ｂに関して説明した処理と同様の処理が行われる。【００９３】
以下、図１４Ｃは２段目のマージ処理の２番目のペアの１回目の比較処理を示し、図１４Ｄは２段目のマージ処理の２番目のペアの２回目の比較処理を示している。何れの比較処理も比較相手が存在しないので、それぞれ、Ｓｃｈｏｏｌ［ＰＴＲ［１］］及びＳｃｈｏｏｌ［ＰＴＲ［０］］が小さい方であると判定され、上述と同様の処理が行われる。【００９４】
図１４Ｅ及び１４Ｆは、ブロック内コンパイル処理の２段目のマージ処理の後処理の説明図である。１段目のマージ処理の後処理と同様に、２段目のマージ処理の後処理では、最初に、ローカル項目値番号配列ＶＮｏが更新される。具体的には、
ＶＮｏ［ｉ］＝ＴＲ［ＶＮｏ［ｉ］］
によってローカル項目値番号が変換される。次に、
ＰＴＲ［ｉ］＝ｗＰＴＲ［ｉ］
に従って、ポインタ配列ＰＴＲに作業ポインタ配列ｗＰＴＲを上書きすることによって、ポインタ配列ＰＴＲが更新される。【００９５】
続いて、ブロック内コンパイル処理の３段目のマージ処理について説明する。３段目のマージ処理では、２段目のマージ処理で利用された１番目のペアと２番目のペアとによって、３段目の第１のペアが形成される。本発明の好ましい実施形態によれば、このように、３段目のペアリングは２段目のペアリングと逆順に（すなわち、後方から）実行される。本例では、１組のペアしか残っていないのでペアリングの順序を考慮する必要はない。【００９６】
図１５Ａ乃至１５Ｄは、ブロック内コンパイル処理の３段目のマージ処理の説明図である。３段目のマージ処理では、１段目及び２段目のマージ処理と同様の処理が行われる。但し、比較対象のデータの数は、一般に、段数が増加すると共に増加する。本例では、図１５Ａ及び（Ｂ）に示されているように、同一値が頻繁に出現するため、３段目においても比較処理は２回で終了する。図１５Ｃ及び１５Ｄには、３段目のマージ処理の後処理が示されている。このように、最終的なローカル項目値番号配列ＶＮｏと最終的なポインタ配列ＰＴＲとが得られる。ポインタ配列中、格納値が存在しない要素は＊によって示されている。【００９７】
最後に、本発明の一実施形態によるブロック内コンパイル処理によれば、最終的なローカル項目値作業配列ｗＶＬ、すなわち、値リストが作成される。図１６は、ブロック内コンパイル処理における値リスト作成処理の説明図である。値リストｗＶＬは、ポインタ配列ＰＴＲの要素の値をポインタとして項目値配列Ｓｃｈｏｏｌから値を読み出し、ポインタ配列ＰＴＲの要素の順に値リストｗＶＬに格納することによって得られる。具体的には、本例では、
ｗＶＬ［０］＝Ｓｃｈｏｏｌ［ＰＴＲ［０］］＝Ｓｃｈｏｏｌ［１］＝“Ｓｏｕｔｈ”
ｗＶＬ［１］＝Ｓｃｈｏｏｌ［ＰＴＲ［１］］＝Ｓｃｈｏｏｌ［０］＝“Ｗｅｓｔ”
である。【００９８】
以上のブロック内コンパイル処理によって、ローカル項目値番号配列ＶＮｏと最終的なローカル項目値作業配列ｗＶＬが得られる。【００９９】
次に、本発明の一実施形態によるブロック間コンパイル処理について説明する。ブロック間コンパイル処理は、複数台の演算ユニットが並列的かつ階層的に動作して、データ項目毎に、最終的に１個のブロックにマージされるまで、１対のブロックをマージする処理を繰り返し、最終的なブロック番号作業配列と最終的なローカル項目値作業配列と最終的なローカル項目値指定ポインタ配列とを生成するマージ処理と、マージ処理によって生成された最終的なブロック番号作業配列及び最終的なローカル項目値指定ポインタから、項目値指定ポインタ配列を生成する分配処理とを含む。マージ処理によって生成された最終的なローカル項目値作業配列は、グローバル項目値配列に一致する。【０１００】
マージ処理では、各演算ユニットが、１対のブロックに関する情報をマージして、マージされたより高い層の１個のブロックに関する情報を生成する。よって、マージ処理は、複数台の演算ユニットの並列動作によって実現される。また、各演算ユニットは、同じ層に属するマージされたよりブロックの対に関する情報をマージし、マージされたさらに高い層の１個のブロックに関する情報を生成する。このようにマージ処理を並列的かつ階層的に繰り返すことにより、最終的に最上層の１個のブロックに関する情報が生成される。最上層の１個のブロックとは、レコード全体を含むブロックである。【０１０１】
たとえば、２ｎ−１台の演算ユニットが存在し、各演算ユニットが２個のブロックに関する情報を入力し、それらをマージして、１個のブロックに関する情報を出力すると仮定すると、各演算ユニットが１回ずつマージ処理を実行することによって、ｎ段（層）のマージ処理が実現される。この場合、全演算プロセッサによる全データ通信量のうち、演算プロセッサがグローバルメモリとの間で行う通信が占める割合は、１／ｎである。演算ユニット間の通信量は、全データ通信量の（ｎ−１）／ｎである。【０１０２】
図１７Ａ乃至１７Ｃはブロック間コンパイル処理におけるマージ処理の概要図である。同図の例では、たとえば、少なくとも７台の演算ユニットＳＰＵ−０、ＳＰＵ−１、・・・、ＳＰＵ−６が、ブロックＢｌｏｃｋ−０からブロックＢｌｏｃｋ−１２７までの１２８ブロックのマージ処理を実行している。【０１０３】
図１７Ａの１回目の処理は、ブロックＢｌｏｃｋ−０からブロックＢｌｏｃｋ−７までのマージと、ブロックＢｌｏｃｋ−８からブロックＢｌｏｃｋ−１５までのマージと、以下同様に、ブロックＢｌｏｃｋ−１２０からブロックＢｌｏｃｋ−１２７までのマージの１６回のマージ、すなわち、８個のブロックを１個のブロックにマージする処理を１６回に亘って逐次的に実行する。たとえば、１段目では、ＳＰＵ−０がブロック０とブロック１をマージしてブロック０〜１を出力し、ＳＰＵ−１がＢｌｏｃｋ−２とＢｌｏｃｋ−３をマージしてブロック２〜３を出力する。ここで、ブロック０〜１のようなブロックＡ〜Ｂという表記は、ブロックＡからブロックＢまでをマージした結果として得られるブロックを表している。次に、２段目において、ＳＰＵ−４がＳＰＵ−０によってマージされたブロック０〜１と、ＳＰＵ−１によってマージされたブロック２〜３とをマージして、ブロック０〜３を出力する。同様に、ＳＰＵ−４はブロック４〜７を出力する。３段目のＳＰＵ−６は、ＳＰＵ−４によって出力されたブロック０〜３と、ＳＰＵ−５によって出力されたブロック４〜７とをマージして、ブロック０〜７を出力する。このような３段回のマージ処理が、さらに繰り返し実行されることによって、ブロック０〜７、ブロック８〜１５、・・・、ブロック１２０〜１２７の１６個のブロックが出力される。尚、図中、白抜きの矢印は、グローバルメモリと演算ユニット内のローカルメモリとの間の入出力を表し、黒色の矢印は、チップ内バスを経由する演算ユニット内のローカルメモリ間のデータ転送を表している。【０１０４】
図１７Ｂの２回目の処理は、１回目の処理によって出力された１６個のブロックのうち、ブロック０〜７、・・・、ブロック５６〜６３の８個のブロックをマージして、ブロック０〜６３を出力し、ブロック６４〜７１、・・・、ブロック１２０〜１２７の８個のブロックをマージして、ブロック６４〜１２７を出力する。【０１０５】
さらに、図１７Ｃの３回目の処理では、ＳＰＵ−０が、ブロック０〜６３とブロック６４〜１２７をマージして、最終的な１個のブロック０〜１２７を出力する。【０１０６】
次に、本発明の一実施形態によるブロック間コンパイルにおけるマージ処理をより詳細に説明する。図１８Ａ及び１８Ｂは、本発明の一実施形態によるブロック間コンパイル処理が適用されるブロック内コンパイル処理の結果の説明図である。たとえば、図１８Ａは、データ項目＝“Ｓｃｈｏｏｌ”に関して、ブロック内コンパイル処理の結果として生成された、ブロック０からブロック７までの８個のブロックの項目情報を示し、図１８Ｂは、データ項目＝“Ａｇｅ”に関して生成されたブロックの項目情報を示している。項目情報は、ローカル項目値番号配列ＶＮｏと、ブロック番号作業配列ＢｌｋＮｏと、ローカル項目値指定ポインタ作業配列ＬＶＬと、ローカル項目値作業配列ｗＶＬとを含む。本例は、図１７Ａに示されたブロック０からブロック７までの８個のブロックから、ＳＰＵ−０からＳＰＵ−６までの７台の演算ユニットを使用して、１個のブロック０〜７を生成するマージ処理に相当する。【０１０７】
最初に、ＳＰＵ−０がブロック０とブロック１をマージする例を説明する。図１９Ａ乃至１９Ｃは、ブロック間コンパイル処理における１段目のマージ処理の説明図である。ＳＰＵ−０は、ブロック０及びブロック１に関する項目情報をグローバルメモリからローカルメモリへ転送すると共に、さらなるブロック番号作業配列ＢｌｋＮｏ’、さらなるローカル項目値指定ポインタ作業配列ＬＶＬ’、及び、さらなるローカル項目値作業配列ｗＶＬ’を初期化する。また、ローカル項目値作業配列ｗＶＬからの読み出し用ポインタも初期化される。以下、特に断らない限り、動作の主体は演算ユニットＳＰＵ−０である。【０１０８】
次に、両方のブロックからのローカル項目値作業配列ｗＶＬの格納値が比較され、小さい方の格納値が、さらなるローカル項目値作業配列ｗＶＬ’へ、先頭から順番に転送される。小さい方の格納値に対応するブロック番号作業配列ＢｌｋＮｏの内容がさらなるブロック番号作業配列ＢｌｋＮｏ’へ転送される。たとえば、配列ＬＶＬに同じ値が連続して格納されているならば、その同じ値が格納されている回数だけブロック番号作業配列ＢｌｋＮｏからさらなるブロック番号作業配列ＢｌｋＮｏ’への転送が繰り返される。そして、さらなるブロック番号作業配列ＢｌｋＮｏ’へ値が書き込まれた回数と同じ個数の順序番号（初期値＝０）がさらなるローカル項目値指定ポインタ作業配列ＬＶＬ’に格納される。【０１０９】
最後に、小さい方の値が格納されていたローカル項目値番号作業配列ｗＶＬからの読み出し用ポインタが１つ後へシフトさせられる。【０１１０】
もし、両方のブロックからのローカル項目値作業配列ｗＶＬの格納値が同一であるならば、いずれかの格納値がさらなるローカル項目値作業配列ｗＶＬ’へ転送される。次に、両方のブロックからのブロック番号作業配列ＢｌｋＮｏの内容のうち、値の小さい方のブロック番号がさらなるブロック番号作業配列ＢｌｋＮｏ’へ転送される。この場合も、配列ＬＶＬに同じ値が連続して格納されているならば、その個数分だけブロック番号作業配列ＢｌｋＮｏからさらなるブロック番号作業配列ＢｌｋＮｏ’への転送が繰り返される。続いて、両方のブロックからのブロック番号作業配列ＢｌｋＮｏの内容のうち、値の大きい方のブロック番号もまた同様に、さらなるブロック番号作業配列ＢｌｋＮｏ’へ転送される。ローカル項目値指定ポインタ作業配列に同じ値が連続して格納されているならば、その個数分だけブロック番号の転送が繰り返されることも同様である。そして、さらなるブロック番号作業配列ＢｌｋＮｏ’へ値が書き込まれた回数と同じ個数の順序番号がさらなるローカル項目値指定ポインタ作業配列ＬＶＬ’に格納される。最後に、小さい方の値が格納されていたローカル項目値番号作業配列ｗＶＬからの読み出し用ポインタが１つ後へシフトさせられる。【０１１１】
図１９Ａ乃至１９Ｃに戻ると、図１９Ａでは、ブロック０のｗＶＬ［０］＝“Ｓｏｕｔｈ”とブロック１のｗＶＬ［０］＝“Ｎｏｒｔｈ”とが比較される。“Ｎｏｒｔｈ”の方が小さいので、ｗＶＬ’［０］＝ｗＶＬ［０］＝“Ｎｏｒｔｈ”のように、項目値が転送される。そして、ブロック１のブロック番号作業配列の内容ＢｌｋＮｏ［０］＝１が、さらなるブロック番号作業配列ＢｌｋＮｏ’［０］へ転送され、すなわち、ＢｌｋＮｏ’［０］＝１となる。ＬＶＬ’［０］には順序番号＝０が格納される。その後、ブロック１側のｗＶＬの読み出し用ポインタが後へシフトさせられる。【０１１２】
同様に、図１９Ｂでは、ブロック０のｗＶＬ［０］とブロック１のｗＶＬ［１］とが比較される。両方の値は、共に“Ｓｏｕｔｈ”であり、一致する。よって、ｗＶＬ’［１］＝“Ｓｏｕｔｈ”、ＢｌｋＮｏ’［１］＝０、ＢｌｋＮｏ’［２］＝１となる。さらに、ＬＶＬ’［１］＝１、ＬＶＬ’［２］＝１のように設定される。最後に、ブロック１側と、ブロック２側の両方のｗＶＬからの読み出し用ポインタが進められる。【０１１３】
同様に、図１９Ｃでは、ブロック０のｗＶＬ［１］とブロック１のｗＶＬ［２］とが比較される。両方の値は一致するので、図１９Ｂと同様の処理が行われる。【０１１４】
このようにして、図１９Ｂに示されるように、ＳＰＵ−０がブロック０とブロック１をマージすることにより、さらなるブロック番号配列ＢｌｋＮｏ’と、さらなる項目値指定ポインタ配列ＬＶＬ’と、さらなる項目値作業配列ｗＶＬ’とからなる組が生成される。【０１１５】
以上の処理により、ブロック０とブロック１の２つのブロックからのＢｌｋＮｏ、ＬＶＬ及びｗＶＬの組のペアは、１組のＢｌｋＮｏ’、ＬＶＬ’及びｗＶＬ’に変換されていることがわかる。この処理を並列的かつ階層的に繰り返すことにより、ＢｌｋＮｏ、ＬＶＬ及びｗＶＬの多数の組が、１組のＢｌｋＮｏ’、ＬＶＬ’及びｗＶＬ’にマージされ得ることが明らかである。ここで、注意すべき点は、図１９Ａ乃至１９Ｃに関して説明した操作は、シーケンシャルアクセスだけを使って実現できることである。これにより、ブロック番号配列ＢｌｋＮｏ、ローカル項目値指定ポインタ作業配列ＬＶＬ、及び、ローカル項目値作業配列ｗＶＬ’のサイズが大きくなっても、演算ユニット内のローカルメモリで処理可能である。また、さらなるブロック番号配列ＢｌｋＮｏ’は、さらなるローカル項目値指定ポインタ作業配列ＬＶＬ’に格納される値が同一である限り、必ず昇順になることに注意すべきである。【０１１６】
今度は、演算ユニットＳＰＵ−４が、ＳＰＵ−０から出力されたブロック０〜１と、ＳＰＵ−１１から出力されたブロック２〜３を１つのブロックにマージする２段目のマージ処理について説明する。図２０Ａ乃至２０Ｄは、本発明の一実施形態によるブロック間コンパイルにおける２段目のマージ処理の説明図である。２段目のマージ処理は、入力される情報が他の演算ユニットのローカルメモリから転送される点を除いて、１段目のマージ処理と同様である。この処理を簡単に説明すると、最初、２つのブロックからのｗＶＬの読み出し用ポインタが先頭に設定される。ｗＶＬから値を読み出して、比較した後、大きくない方の値がｗＶＬ’に設定される。その後、ＢｌｋＮｏからＢｌｋＮｏ’へのブロック番号の転送と、ＬＶＬ’への順序番号の書き込みが行われる。最後に、大きくない方の値が読み出されたｗＶＬ’からの読み出し用ポインタが進められる。図２０Ａ、２０Ｂ、２０Ｃ及び２０Ｄには、この処理の過程と、得られたさらなるブロック番号配列ＢｌｋＮｏ’と、さらなるローカル項目値指定ポインタ作業配列ＬＶＬ’と、ローカル項目値作業配列ｗＶＬ’とが示されている。【０１１７】
ブロック間コンパイル処理の１段目のマージ処理と２段目のマージ処理を終えると、ブロック０からブロック３までがマージされたブロック０〜３と、ブロック４からブロック７までがマージされたブロック４〜７が得られる。ＳＰＵ−６は、ＳＰＵ−４によって出力されるブロック０〜３と、ＳＰＵ−５によって出力されるブロック４〜７とを受信し、２つのブロックのマージ処理を同様に実行する。これにより、最終的な１個のブロックであるＢｌｏｃｋ０〜７が得られる。図２１Ａ及び２１Ｂは、本発明の一実施形態によるブロック間コンパイル処理における３段目のマージ処理の結果を説明する図である。図２１Ａは、データ項目「Ｓｃｈｏｏｌ」に関するマージ前のブロック毎の情報を表し、図２１Ｂは、データ項目「Ｓｃｈｏｏｌ」に関するブロック間コンパイルによるマージ処理の結果を表している。【０１１８】
ここで、最終的なさらなるローカル項目値作業配列ｗＶＬ’は、グローバル項目値配列に一致することに注意すべきである。図２１Ｂのブロック番号作業配列ＢｌｋＮｏ’と、ローカル項目値指定ポインタ配列ＬＶＬ’と、ローカル項目値作業配列ｗＶＬ’との組と、図２１Ａのブロック毎の情報との間の関連性について説明する。図２１Ａは、たとえば、ブロック０の情報を参照すると、ブロック０内に含まれる項目値の値リストｗＶＬと、ブロック０内での項目値のランクを表している。つまり、ブロック０において、ランク＝０の項目値は”Ｓｏｕｔｈ”であり、ランク＝１の項目値は“Ｗｅｓｔ”である。一方、図２１Ｂを参照すると、ＢｌｋＮｏ’［０］＝２と、ＬＶＬ’［０］＝０と、ｗＶＬ［ＬＶＬ［０］］＝“Ｅａｓｔ”は、ブロック番号＝２には、項目値＝“Ｅａｓｔ”が含まれていることがわかる。さらに、ＢｌｋＮｏ’［０］は、配列ＢｌｋＮｏ’の中でブロック番号＝２が最初に出現する要素であることから、ブロック番号＝２のブロックにおける値リストの先頭の項目値は“Ｅａｓｔ”であることもわかる。また、ＬＶＬ’を先頭から走査すると、ＬＶＬ’［０］＝ＬＶＬ’［１］＝ＬＶＬ’［２］＝ＬＶＬ’［３］＝０から、ＢｌｋＮｏ’［０］＝２とＢｌｋＮｏ’［１］＝４とＢｌｋＮｏ’［２］＝５とＢｌｋＮｏ’［３］＝７の４個のブロック、すなわち、ブロック２、ブロック４、ブロック５及びブロック７のブロックにおける値リストの先頭の項目値は、ｗＶＬ’「０」＝“Ｅａｓｔ”であることもわかる。【０１１９】
本発明の一実施形態によるブロック間コンパイル処理は、マージ処理の後に、分配処理を実行する。分配処理では、複数台の演算ユニットが並列的に動作して、データ項目毎に、最終的なローカル項目値指定ポインタ作業配列中の要素を最終的なブロック番号作業配列中の対応する要素によって指定されたブロック番号毎に分配し所定の順番に並べることにより、ローカル項目値番号によって表される上記項目値が最終的なローカル項目値作業配列（すなわち、グローバル項目値配列）中で格納されている位置を指定するポインタを格納する項目値指定ポインタ配列を作成しグローバルメモリへ転送する。たとえば、図２１Ａに示された例では、ブロック０内のＬＶＬ［０］＝０によって指定される項目値ｗＶＬ［０］＝”Ｓｏｕｔｈ”がグローバル項目値配列ｗＶＬ’の何番目の要素であるかを指定する項目値ポインタ配列が獲得される。【０１２０】
このため、本発明の一実施形態によるブロック間コンパイル処理における分配では、図２１Ｂに示されたデータが取得されているならば、たとえば、
ｆｏｒ  （ｉ＝０；ｉ＜１９；ｉ＋＋）  ｛
ｉｎｄｅｘ［ｉ］＝０；
｝
ｆｏｒ  （ｉ＝０；ｉ＜１９；ｉ＋＋）  ｛
ＬＶＬ［ＢｌｋＮｏ’［ｉ］］［ｉｎｄｅｘ［ｉ］］＝ＬＶＬ’［ｉ］；
ｉｎｄｅｘ［ｉ］＋＋；
｝
によって記述される操作にしたがって、ローカル項目値指定ポインタをブロック番号毎に分配される。これにより得られた配列ＬＶＬは、まさに項目値指定ポインタ配列である。上記の分配処理は１台のプロセッサで操作を実施する場合の操作に対応している。しかし、本発明の一実施形態によれば、好ましくは、複数台の演算ユニットを用いて、配列ＬＶＬが生成される。そのため、ブロック番号作業配列ＢｌｋＮｏ’とローカル項目値指定ポインタ作業配列ＬＶＬ’を分割して、複数台の演算ユニットに割り当てる。次に、各演算ユニットが、担当するＢｌｋＮｏ’とＬＶＬ’とに関して、ブロック番号毎にローカル項目値指定ポインタを分配する。最後に、各演算ユニットに分散して保持されているローカル項目値指定ポインタを、ブロック番号毎に１つに統合する。これにより、項目値指定ポインタ配列ＬＶＬが得られる。【０１２１】
図２２は、本発明の一実施形態によるブロック間コンパイル処理における分配処理の説明図である。同図に示されるように、配列ＢｌｋＮｏ’と配列ＬＶＬ’は、複数台の演算ユニット（本例では、ＳＰＵ−０からＳＰＵ−７の８台の演算ユニット）に割り当てられる。たとえば、ＳＰＵ−０は、０≦ｉ≦２の範囲内で、ＢｌｋＮｏ’［ｉ］及びＬＶＬ’［ｉ］の処理を担当する。ＢｌｋＮｏ’［０］＝２であり、ＬＶＬ’［０］＝０であるので、ＳＰＵ−０のローカルメモリ内のｗＬＶＬ−２［０］にＬＶＬ’［０］＝０を設定する。同様に、ＳＰＵ−１は、３≦ｉ≦４の範囲内で、ＢｌｋＮｏ’［ｉ］及びＬＶＬ’［ｉ］の処理を担当する。ＢｌｋＮｏ’［３］＝７であり、ＬＶＬ’［３］＝０であるので、ＳＰＵ−１のローカルメモリ内のｗＬＶＬ−２［０］にＬＶＬ’［０］＝０を設定する。この処理をすべての演算ユニットが並列的に実行される。本例では、演算ユニット毎に、ブロック０からブロック７までの配列ｗＬＶＬ−０からｗＬＶＬ−７が使用されている。この場合、演算ユニットの台数（＝８個）倍の作業領域がローカルメモリとグローバルメモリに確保されることになる。この作業領域をコンパクトにするため、リンクリストを使用しても構わない。重要なことは、作業領域がローカルメモリに格納できる間は、その作業領域をローカルメモリに収容し、作業領域がローカルメモリに収容できなくことが分かった時点で、ローカルメモリ中の作業領域の全部又は一部をある程度まとめてグローバルメモリへ転送することによって、グローバルメモリへのメモリアクセスを一括化することが可能である。【０１２２】
図２３は、本発明の一実施形態によるブロック間コンパイル処理における分配処理の結果を示す図である。たとえば、ブロック番号１に関して、ＳＰＵ−１のｗＬＶＬ−１に値１が格納され、ＳＰＵ−４のｗＬＶＬ−１に値２が格納され、ＳＰＵ−６のｗＬＶＬ−１に値３が格納されている。これらを１つに結合することによって、ブロック１に関する項目値指定ポインタ配列ＬＶＬ−１が得られる。具体的には、ポインタ値の小さい順に、すなわち、ＳＰＵ−０からＳＰＵ−７の順に、ｗＬＶＬ−１に格納されている値を取り出し、その値をＬＶＬ−１の先頭から順に格納すればよい。この操作は、たとえば、いずれか１台の演算ユニット、又は、制御ユニットが実行可能であるが、ブロック番号毎に、複数台の演算ユニットが並列的に、ＷＬＶＬから値を取り出し、ＬＶＬへ書き込むようにしてもよい。【０１２３】
図２２及び２３の例では、ブロック数が増加すると、ローカルメモリ上の作業領域も増大する。そのため、本発明の代替的な実施形態では、特に、ブロック数が多い場合に、処理を効率化するために、複数のブロックをグループ化した後に、グループ毎に分配処理を実施する。たとえば、ブロック番号を４で除算することにより、上位ブロック番号と、下位ブロック番号に分離し（グループ化し）、上位ブロック番号と下位ブロック番号に関して別々に分配処理を適用する。具体的には、ブロック間コンパイル処理におけるマージ処理によって得られたブロック番号作業配列ＢｌｋＮｏ’とローカル項目値指定ポインタ作業配列ＬＶＬ’の組から、上位ブロック番号用のブロック番号作業配列ＢｌｋＮｏ’とローカル項目値指定ポインタ作業配列ＬＶＬ’の組と、下位ブロック番号用のブロック番号作業配列ＢｌｋＮｏ’とローカル項目値指定ポインタ作業配列ＬＶＬ’の組が生成される。この処理もまた、複数台の演算ユニットが並列的に動作して、実行可能である。【０１２４】
図２４は、本発明の代替的な実施形態によるブロック間コンパイル処理におけるブロックグループ化処理の説明図である。たとえば、ＢｌｋＮｏ’［０］〜ＢｌｋＮｏ’［２］はＳＰＵ−０の担当範囲に属する。ＢｌｋＮｏ’［０］＝２は、３以下の値であり、下位ブロック番号に含まれるので、ＳＰＵ−０は、ローカルメモリ中の下位ブロック番号用のＢｌｋＮｏ及びＬＶＬ−１にＢｌｋＮｏ［０］＝ＢｌｋＮｏ｀［０］及びＬＶＬ−０［０］＝ＬＶＬ’［０］を設定する。一方、ＳＰＵ−３は、ＢｌｋＮｏ’［１３］〜ＢｌｋＮｏ’［１４］を担当する。ＢｌｋＮｏ’［１３］＝６は、４以上の値であり、上位ブロック番号に含まれるので、ＳＰＵ−３は、ローカルメモリ中の上位ブロック番号用のＢｌｋＮｏ及びＬＶＬ−１にＢｌｋＮｏ［０］＝ＢｌｋＮｏ｀［１３］及びＬＶＬ−１［０］＝ＬＶＬ’［１３］を設定する。このような処理を続けることにより、ブロックがグループ化される。【０１２５】
図２５は、本発明の代替的な実施形態によるブロック間コンパイル処理におけるブロックグループ化処理の結果を示す図である。たとえば、ＳＰＵ−０からＳＰＵ−７が作成した下位ブロック番号用のＢｌｋＮｏとＬＶＬ−０の要素を順番に抽出し、ＢｌｋＮｏ’とＬＶＬ’の先頭から順に格納すると、下位ブロック番号用のＢｌｋＮｏ’及びＬＶＬ’が得られる。同様に、ＳＰＵ−０からＳＰＵ−７が作成した上位ブロック番号用のＢｌｋＮｏとＬＶＬ−１の要素を順番に抽出し、ＢｌｋＮｏ’とＬＶＬ’の先頭から順に格納すると、上位ブロック番号用のＢｌｋＮｏ’及びＬＶＬ’が得られる。この結合処理は、たとえば、制御ユニットによって実行してもよく、或いは、演算ユニットによって実行してもよい。このようにして得られた、下位ブロック番号用のＢｌｋＮｏ’及びＬＶＬ’と、上位ブロック番号用のＢｌｋＮｏ’及びＬＶＬ’は、図２２を参照して説明した、本発明の一実施形態によるブロック間コンパイル処理における分配処理が適用され、ブロック番号毎に項目値指定ポインタ配列が得られる。【０１２６】
本発明は、以上の実施の形態に限定されることなく、特許請求の範囲に記載された発明の範囲内で、種々の変更が可能であり、それらも本発明の範囲内に包含されるものであることは言うまでもない。
【図１】
2009028050.tif 000003
【図２】
2009028050.tif 000004
【図３】
2009028050.tif 000005
【図４】
2009028050.tif 000006
【図５Ａ】
2009028050.tif 000007
【図５Ｂ】
2009028050.tif 000008
【図５Ｃ】
2009028050.tif 000009
【図５Ｄ】
2009028050.tif 000010
【図６】
2009028050.tif 000011
【図７】
2009028050.tif 000012
【図８】
2009028050.tif 000013
【図９Ａ】
2009028050.tif 000014
【図９Ｂ】
2009028050.tif 000015
【図１０Ａ】
2009028050.tif 000016
【図１０Ｂ】
2009028050.tif 000017
【図１０Ｃ】
2009028050.tif 000018
【図１１】
2009028050.tif 000019
【図１２】
2009028050.tif 000020
【図１３Ａ】
2009028050.tif 000021
【図１３Ｂ】
2009028050.tif 000022
【図１３Ｃ】
2009028050.tif 000023
【図１３Ｄ】
2009028050.tif 000024
【図１３Ｅ】
2009028050.tif 000025
【図１３Ｆ】
2009028050.tif 000026
【図１３Ｇ】
2009028050.tif 000027
【図１４Ａ】
2009028050.tif 000028
【図１４Ｂ】
2009028050.tif 000029
【図１４Ｃ】
2009028050.tif 000030
【図１４Ｄ】
2009028050.tif 000031
【図１４Ｅ】
2009028050.tif 000032
【図１４Ｆ】
2009028050.tif 000033
【図１５Ａ】
2009028050.tif 000034
【図１５Ｂ】
2009028050.tif 000035
【図１５Ｃ】
2009028050.tif 000036
【図１５Ｄ】
2009028050.tif 000037
【図１６】
2009028050.tif 000038
【図１７Ａ】
2009028050.tif 000039
【図１７Ｂ】
2009028050.tif 000040
【図１７Ｃ】
2009028050.tif 000041
【図１８Ａ】
2009028050.tif 000042
【図１８Ｂ】
2009028050.tif 000043
【図１９Ａ】
2009028050.tif 000044
【図１９Ｂ】
2009028050.tif 000045
【図１９Ｃ】
2009028050.tif 000046
【図２０Ａ】
2009028050.tif 000047
【図２０Ｂ】
2009028050.tif 000048
【図２０Ｃ】
2009028050.tif 000049
【図２０Ｄ】
2009028050.tif 000050
【図２１Ａ】
2009028050.tif 000051
【図２１Ｂ】
2009028050.tif 000052
【図２２】
2009028050.tif 000053
【図２３】
2009028050.tif 000054
【図２４】
2009028050.tif 000055
【図２５】
2009028050.tif 000056
【手続補正書】
【提出日】平成20年6月13日(2008.6.13)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
専用のローカルメモリを含む複数台の演算ユニットと、
上記複数台の演算ユニットに接続されているグローバルメモリと、
上記複数台の演算ユニットを接続するバスと、
上記グローバルメモリ及び上記複数台の演算ユニットに接続されている少なくとも１台の制御ユニットと、
を備えるマルチコア型処理装置において、
データ項目に対応した項目値を含むレコードの配列として表され、上記複数台の演算ユニットによって分担して操作される表形式データを、上記グローバルメモリに構築する方法であって、
上記制御ユニットが、上記レコードを各演算ユニットが担当する担当レコードを含むブロックに分割し、各レコードに対応するブロック番号を上記表形式データ中の原始レコード位置番号の順番に格納するブロック番号配列を作成し、上記グローバルメモリに格納するステップと、
上記複数台の演算ユニットが並列的に動作して、上記担当レコードの上記原始レコード位置番号をレコード順序番号の順番に格納するレコード順序番号配列を各演算ユニット内の上記ローカルメモリ上に作成し、上記グローバルメモリへ転送するステップと、
上記複数台の演算ユニットが並列的に動作して、上記担当レコードに含まれる上記項目値にアクセスする項目値アクセス情報を上記レコード順序番号の順番に格納する項目値アクセス情報配列を各演算ユニット内の上記ローカルメモリ上に作成し、上記グローバルメモリへ転送するステップと、
上記複数台の演算ユニットが並列的に動作して、上記担当レコードに含まれる上記項目値が上記項目値アクセス情報を用いてアクセスされるように、データ項目毎に上記項目値を各演算ユニット内の上記ローカルメモリ上に展開し、上記展開された項目値を上記グローバルメモリへ転送するステップと、
を備える方法。
【請求項２】
上記制御ユニットが、上記グローバルメモリ上の上記ブロック番号配列を参照して、
所定のレコードが含まれるブロックのブロック番号と上記所定のレコードを担当する上記演算ユニットとを決定するステップと、
上記制御ユニットが、上記決定された演算ユニットへ上記所定のレコードのレコード順序番号を通知するステップと、
上記レコード順序番号を通知された演算ユニットが、当該演算ユニットの上記担当レコードに関する上記レコード順序番号配列及び前記項目値アクセス情報配列を、上記グローバルメモリから当該演算ユニットの上記ローカルメモリへ転送するステップと、
上記レコード順序番号を通知された演算ユニットが、上記通知されたレコード順序番号が格納されている位置を上記転送されたレコード順序番号配列中で特定するステップと、
上記レコード順序番号を通知された演算ユニットが、上記特定された位置によって指定される項目値アクセス情報を上記転送された項目値アクセス情報配列中で特定するステップと、
上記レコード順序番号を通知された演算ユニットが、データ項目毎に、上記グローバルメモリに保持されている上記項目値の中から、上記特定された項目値アクセス情報によって指定される項目値を取得し、上記取得された項目値を上記グローバルメモリへ転送するステップと、
をさらに備える、
請求項１に記載の方法。
【請求項３】
上記複数台の演算ユニットが並列的に動作して、データ項目毎に上記項目値を各演算ユニット内の上記ローカルメモリに展開し、上記展開された項目値を上記グローバルメモリに格納するステップが、
上記複数台の演算ユニットが並列的に動作して、データ項目毎に、単一のブロックに含まれる上記項目値を上記グローバルメモリから上記ローカルメモリへ転送し、上記単一のブロックに含まれる項目値のうちの一意の値を所定の順序で格納するローカル項目値作業配列、及び、上記単一のブロックに含まれる上記担当レコードの上記原始レコード位置番号の順番に、上記担当レコードに含まれる項目値が上記ローカル項目値作業配列中に格納されている位置を指定するローカル項目値番号を格納するローカル項目値番号配列を上記ローカルメモリ上に作成し、上記グローバルメモリへ転送するステップと、
上記複数台の演算ユニットが並列的に動作して、データ項目毎に、１対のブロックに関連した、上記ブロックに含まれる上記項目値のうちの一意の値に対応する上記ブロック番号を格納したブロック番号作業配列と、上記ローカル項目値作業配列と、上記ブロックに含まれる上記項目値が上記ローカル項目値作業配列中で格納されている位置を指定するポインタを格納するローカル項目値指定ポインタ作業配列とからなる１対の組から、上記１対のブロックがマージされたブロックに関連した、さらなるブロック番号作業配列と、さらなるローカル項目値作業配列と、さらなるローカル項目値指定ポインタ作業配列とからなる組を作成するマージ処理を実行するステップと、
上記複数台の演算ユニットが並列的かつ階層的に動作して、データ項目毎に、最終的な１個のブロックにマージされるまで上記マージ処理を繰り返し、得られた最終的なブロック番号作業配列と、最終的なローカル項目値作業配列と、最終的なローカル項目値指定ポインタ作業配列とを上記グローバルメモリへ転送するステップと、
上記複数台の演算ユニットが並列的に動作して、データ項目毎に、上記最終的なローカル項目値指定ポインタ作業配列中の要素を上記最終的なブロック番号作業配列中の対応する要素によって指定されたブロック番号毎に分配し所定の順番に並べることにより、上記ローカル項目値番号によって表される上記項目値が、上記項目値を所定の順序で格納するグローバル項目値配列に一致する、上記最終的なローカル項目値作業配列中で格納されている位置を指定するポインタを格納する項目値指定ポインタ配列を作成し上記グローバルメモリへ転送するステップと、
を含む、
請求項１に記載の方法。
【請求項４】
専用のローカルメモリを含む複数台の演算ユニットと、
上記複数台の演算ユニットに接続されているグローバルメモリと、
上記複数台の演算ユニットを接続するバスと、
上記グローバルメモリ及び上記複数台の演算ユニットに接続されている少なくとも１台の制御ユニットと、
を備え、
データ項目に対応した項目値を含むレコードの配列として表され、上記複数台の演算ユニットによって分担して操作される表形式データを上記グローバルメモリに構築するマルチコア型処理装置であって、
上記制御ユニットが、上記レコードを各演算ユニットが担当する担当レコードを含むブロックに分割し、各レコードに対応するブロック番号を上記表形式データ中の原始レコード位置番号の順番に格納するブロック番号配列を作成し、上記グローバルメモリに格納する手段を含み、
各演算ユニットが、
他の演算ユニットと並列的に動作して、上記担当レコードの上記原始レコード位置番号をレコード順序番号の順番に格納するレコード順序番号配列を各演算ユニット内の上記ローカルメモリ上に作成し、上記グローバルメモリへ転送する手段と、
他の演算ユニットと並列的に動作して、上記担当レコードに含まれる上記項目値にアクセスする項目値アクセス情報を上記レコード順序番号の順番に格納する項目値アクセス情報配列を各演算ユニット内の上記ローカルメモリ上に作成し、上記グローバルメモリへ転送する手段と、
他の演算ユニットと並列的に動作して、上記担当レコードに含まれる上記項目値が上記項目値アクセス情報を用いてアクセスされるように、データ項目毎に上記項目値を各演算ユニット内の上記ローカルメモリ上に展開し、上記展開された項目値を上記グローバルメモリへ転送する手段と、
を含む、
マルチコア型処理装置。
【請求項５】
上記制御ユニットが、
上記グローバルメモリ上の上記ブロック番号配列を参照して、所定のレコードが含まれるブロックのブロック番号と上記所定のレコードを担当する上記演算ユニットとを決定する手段と、
上記決定された演算ユニットへ上記所定のレコードのレコード順序番号を通知する手段と、
をさらに含み、
上記レコード順序番号を通知された演算ユニットが、
当該演算ユニットの上記担当レコードに関する上記レコード順序番号配列及び前記項目値アクセス情報配列を、上記グローバルメモリから当該演算ユニットの上記ローカルメモリへ転送する手段と、
上記通知されたレコード順序番号が格納されている位置を上記転送されたレコード順序番号配列中で特定する手段と、
上記特定された位置によって指定される項目値アクセス情報を上記転送された項目値アクセス情報配列中で特定する手段と、
データ項目毎に、上記グローバルメモリに保持されている上記項目値の中から、上記特定された項目値アクセス情報によって指定される項目値を取得し、上記取得された項目値を上記グローバルメモリへ転送する手段と、
をさらに含む、
請求項４に記載のマルチコア型処理装置。
【請求項６】
各演算ユニットが、
他の演算ユニットと並列的に動作して、データ項目毎に上記項目値を各演算ユニット内の上記ローカルメモリに展開し、上記展開された項目値を上記グローバルメモリに格納する手段と、
他の演算ユニットと並列的に動作して、データ項目毎に、単一のブロックに含まれる上記項目値を上記グローバルメモリから上記ローカルメモリへ転送し、上記単一のブロックに含まれる項目値のうちの一意の値を所定の順序で格納するローカル項目値作業配列、及び、上記単一のブロックに含まれる上記担当レコードの上記原始レコード位置番号の順番に、上記担当レコードに含まれる項目値が上記ローカル項目値作業配列中に格納されている位置を指定するローカル項目値番号を格納するローカル項目値番号配列を上記ローカルメモリ上に作成し、上記グローバルメモリへ転送する手段と、
他の演算ユニットと並列的に動作して、データ項目毎に、１対のブロックに関連した、上記ブロックに含まれる上記項目値のうちの一意の値に対応する上記ブロック番号を格納したブロック番号作業配列と、上記ローカル項目値作業配列と、上記ブロックに含まれる上記項目値が上記ローカル項目値作業配列中で格納されている位置を指定するポインタを格納するローカル項目値指定ポインタ作業配列とからなる１対の組から、上記１対のブロックがマージされたブロックに関連した、さらなるブロック番号作業配列と、さらなるローカル項目値作業配列と、さらなるローカル項目値指定ポインタ作業配列とからなる組を作成するマージ処理を実行する手段と、
他の演算ユニットと並列的かつ階層的に動作して、データ項目毎に、最終的な１個のブロックにマージされるまで上記マージ処理を繰り返し、得られた最終的なブロック番号作業配列と、最終的なローカル項目値作業配列と、最終的なローカル項目値指定ポインタ作業配列とを上記グローバルメモリへ転送する手段と、
他の演算ユニットと並列的に動作して、データ項目毎に、上記最終的なローカル項目値指定ポインタ作業配列中の要素を上記最終的なブロック番号作業配列中の対応する要素によって指定されたブロック番号毎に分配し所定の順番に並べることにより、上記ローカル項目値番号によって表される上記項目値が、上記項目値を所定の順序で格納するグローバル項目値配列に一致する、上記最終的なローカル項目値作業配列中で格納されている位置を指定するポインタを格納する項目値指定ポインタ配列を作成し上記グローバルメモリへ転送する手段と、
をさらに含む、
請求項４に記載のマルチコア型処理装置。
【請求項７】
専用のローカルメモリを含む複数台の演算ユニットと、
上記複数台の演算ユニットに接続されているグローバルメモリと、
上記複数台の演算ユニットを接続するバスと、
上記グローバルメモリ及び上記複数台の演算ユニットに接続されている少なくとも１台の制御ユニットと、
を備えるコンピュータにロードされ、データ項目に対応した項目値を含むレコードの配列として表され、上記複数台の演算ユニットによって分担して操作される表形式データを、上記グローバルメモリに構築するコードを、上記コンピュータに実行させるコンピュータ読み取り可能なプログラムであって、
上記制御ユニットが、上記レコードを各演算ユニットが担当する担当レコードを含むブロックに分割し、各レコードに対応するブロック番号を上記表形式データ中の原始レコード位置番号の順番に格納するブロック番号配列を作成し、上記グローバルメモリに格納するコードと、
上記複数台の演算ユニットが並列的に動作して、上記担当レコードの上記原始レコード位置番号をレコード順序番号の順番に格納するレコード順序番号配列を各演算ユニット内の上記ローカルメモリ上に作成し、上記グローバルメモリへ転送するコードと、
上記複数台の演算ユニットが並列的に動作して、上記担当レコードに含まれる上記項目値にアクセスする項目値アクセス情報を上記レコード順序番号の順番に格納する項目値アクセス情報配列を各演算ユニット内の上記ローカルメモリ上に作成し、上記グローバルメモリへ転送するコードと、
上記複数台の演算ユニットが並列的に動作して、上記担当レコードに含まれる上記項目値が上記項目値アクセス情報を用いてアクセスされるように、データ項目毎に上記項目値を各演算ユニット内の上記ローカルメモリ上に展開し、上記展開された項目値を上記グローバルメモリへ転送するコードと、
を含むプログラム。
【請求項８】
上記制御ユニットが、上記グローバルメモリ上の上記ブロック番号配列を参照して、所定のレコードが含まれるブロックのブロック番号と上記所定のレコードを担当する上記演算ユニットとを決定するコードと、
上記制御ユニットが、上記決定された演算ユニットへ上記所定のレコードのレコード順序番号を通知するコードと、
上記レコード順序番号を通知された演算ユニットが、当該演算ユニットの上記担当レコードに関する上記レコード順序番号配列及び前記項目値アクセス情報配列を、上記グローバルメモリから当該演算ユニットの上記ローカルメモリへ転送するコードと、
上記レコード順序番号を通知された演算ユニットが、上記通知されたレコード順序番号が格納されている位置を上記転送されたレコード順序番号配列中で特定するコードと、
上記レコード順序番号を通知された演算ユニットが、上記特定された位置によって指定される項目値アクセス情報を上記転送された項目値アクセス情報配列中で特定するコードと、
上記レコード順序番号を通知された演算ユニットが、データ項目毎に、上記グローバルメモリに保持されている上記項目値の中から、上記特定された項目値アクセス情報によって指定される項目値を取得し、上記取得された項目値を上記グローバルメモリへ転送するコードと、
をさらに含む、
請求項７に記載のプログラム。
【請求項９】
上記複数台の演算ユニットが並列的に動作して、データ項目毎に上記項目値を各演算ユニット内の上記ローカルメモリに展開し、上記展開された項目値を上記グローバルメモリに格納するコードが、
上記複数台の演算ユニットが並列的に動作して、データ項目毎に、単一のブロックに含まれる上記項目値を上記グローバルメモリから上記ローカルメモリへ転送し、上記単一のブロックに含まれる項目値のうちの一意の値を所定の順序で格納するローカル項目値作業配列、及び、上記単一のブロックに含まれる上記担当レコードの上記原始レコード位置番号の順番に、上記担当レコードに含まれる項目値が上記ローカル項目値作業配列中に格納されている位置を指定するローカル項目値番号を格納するローカル項目値番号配列を上記ローカルメモリ上に作成し、上記グローバルメモリへ転送するコードと、
上記複数台の演算ユニットが並列的に動作して、データ項目毎に、１対のブロックに関連した、上記ブロックに含まれる上記項目値のうちの一意の値に対応する上記ブロック番号を格納したブロック番号作業配列と、上記ローカル項目値作業配列と、上記ブロックに含まれる上記項目値が上記ローカル項目値作業配列中で格納されている位置を指定するポインタを格納するローカル項目値指定ポインタ作業配列とからなる１対の組から、上記１対のブロックがマージされたブロックに関連した、さらなるブロック番号作業配列と、さらなるローカル項目値作業配列と、さらなるローカル項目値指定ポインタ作業配列とからなる組を作成するマージ処理を実行するコードと、
上記複数台の演算ユニットが並列的かつ階層的に動作して、データ項目毎に、最終的な１個のブロックにマージされるまで上記マージ処理を繰り返し、得られた最終的なブロック番号作業配列と、最終的なローカル項目値作業配列と、最終的なローカル項目値指定ポインタ作業配列とを上記グローバルメモリへ転送するコードと、
上記複数台の演算ユニットが並列的に動作して、データ項目毎に、上記最終的なローカル項目値指定ポインタ作業配列中の要素を上記最終的なブロック番号作業配列中の対応する要素によって指定されたブロック番号毎に分配し所定の順番に並べることにより、上記ローカル項目値番号によって表される上記項目値が、上記項目値を所定の順序で格納するグローバル項目値配列に一致する、上記最終的なローカル項目値作業配列中で格納されている位置を指定するポインタを格納する項目値指定ポインタ配列を作成し上記グローバルメモリへ転送するコードと、
を含む、
請求項７に記載のプログラム。
【請求項１０】
専用のローカルメモリを含む複数台の演算ユニットと、
上記複数台の演算ユニットに接続されているグローバルメモリと、
上記複数台の演算ユニットを接続するバスと、
上記グローバルメモリ及び上記複数台の演算ユニットに接続されている少なくとも１台の制御ユニットと、
を備えるコンピュータにロードされ、データ項目に対応した項目値を含むレコードの配列として表され、上記複数台の演算ユニットによって分担して操作される表形式データを、上記グローバルメモリに構築する請求項１乃至３のうち何れか１項に記載の方法を上記コンピュータに実行させるためのコンピュータプログラムプロダクト。
【請求項１１】
専用のローカルメモリを含む複数台の演算ユニットと、
上記複数台の演算ユニットに接続されているグローバルメモリと、
上記複数台の演算ユニットを接続するバスと、
上記グローバルメモリ及び上記複数台の演算ユニットに接続されている少なくとも１台の制御ユニットと、
を備えるコンピュータにロードされ、データ項目に対応した項目値を含むレコードの配列として表され、上記複数台の演算ユニットによって分担して操作される表形式データを、上記グローバルメモリに構築する請求項１乃至３のうち何れか１項に記載の方法を上記コンピュータに実行させるためのコンピュータプログラムが記録された記憶媒体。
【請求項１２】
上記制御ユニットが、上記グローバルメモリ上の上記ブロック番号配列を参照して、所定のレコードが含まれるブロックのブロック番号と上記所定のレコードを担当する上記演算ユニットとを決定するステップと、
上記制御ユニットが、上記決定された演算ユニットへ上記所定のレコードのレコード順序番号を通知するステップと、
上記レコード順序番号を通知された演算ユニットが、当該演算ユニットの上記担当レコードに関する上記レコード順序番号配列及び前記項目値アクセス情報配列を、上記グローバルメモリから当該演算ユニットの上記ローカルメモリへ転送するステップと、
上記レコード順序番号を通知された演算ユニットが、上記通知されたレコード順序番号が格納されている位置を上記転送されたレコード順序番号配列中で特定するステップと、
上記レコード順序番号を通知された演算ユニットが、上記特定された位置によって指定される項目値アクセス情報を上記転送された項目値アクセス情報配列中で特定するステップと、
上記レコード順序番号を通知された演算ユニットが、データ項目毎に、上記グローバルメモリから、上記特定された項目値アクセス情報によって指定される上記項目値を取得するステップと、
をさらに備える、
請求項１に記載の方法。
【請求項１３】
上記制御ユニットが、
上記グローバルメモリ上の上記ブロック番号配列を参照して、所定のレコードが含まれるブロックのブロック番号と上記所定のレコードを担当する上記演算ユニットとを決定する手段と、
上記決定された演算ユニットへ上記所定のレコードのレコード順序番号を通知する手段と、
をさらに含み、
上記レコード順序番号を通知された演算ユニットが、
当該演算ユニットの上記担当レコードに関する上記レコード順序番号配列及び前記項目値アクセス情報配列を、上記グローバルメモリから当該演算ユニットの上記ローカルメモリへ転送する手段と、
上記通知されたレコード順序番号が格納されている位置を上記転送されたレコード順序番号配列中で特定する手段と、
上記特定された位置によって指定される項目値アクセス情報を上記転送された項目値アクセス情報配列中で特定する手段と、
データ項目毎に、上記グローバルメモリから、上記特定された項目値アクセス情報によって指定される上記項目値を取得する手段と、
をさらに含む、
請求項４に記載のマルチコア型処理装置。
【請求項１４】
上記制御ユニットが、上記グローバルメモリ上の上記ブロック番号配列を参照して、所定のレコードが含まれるブロックのブロック番号と上記所定のレコードを担当する上記演算ユニットとを決定するコードと、
上記制御ユニットが、上記決定された演算ユニットへ上記所定のレコードのレコード順序番号を通知するコードと、
上記レコード順序番号を通知された演算ユニットが、当該演算ユニットの上記担当レコードに関する上記レコード順序番号配列及び前記項目値アクセス情報配列を、上記グローバルメモリから当該演算ユニットの上記ローカルメモリへ転送するコードと、
上記レコード順序番号を通知された演算ユニットが、上記通知されたレコード順序番号が格納されている位置を上記転送されたレコード順序番号配列中で特定するコードと、
上記レコード順序番号を通知された演算ユニットが、上記特定された位置によって指定される項目値アクセス情報を上記転送された項目値アクセス情報配列中で特定するコードと、
上記レコード順序番号を通知された演算ユニットが、データ項目毎に、上記グローバルメモリから、上記特定された項目値アクセス情報によって指定される上記項目値を取得するコードと、
をさらに含む、
請求項７に記載のプログラム。
【国際調査報告】
2009028050.tif 000057
2009028050.tif 000058
2009028050.tif 000059
2009028050.tif 000060