JP5208117B2 - 表形式データを操作するマルチコア対応データ処理方法、マルチコア型処理装置、及び、プログラム - Google Patents

表形式データを操作するマルチコア対応データ処理方法、マルチコア型処理装置、及び、プログラム Download PDF

Info

Publication number
JP5208117B2
JP5208117B2 JP2009529900A JP2009529900A JP5208117B2 JP 5208117 B2 JP5208117 B2 JP 5208117B2 JP 2009529900 A JP2009529900 A JP 2009529900A JP 2009529900 A JP2009529900 A JP 2009529900A JP 5208117 B2 JP5208117 B2 JP 5208117B2
Authority
JP
Japan
Prior art keywords
array
item
record
item value
block
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP2009529900A
Other languages
English (en)
Other versions
JPWO2009028050A1 (ja
Inventor
晋二 古庄
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Turbo Data Laboratories Inc
Original Assignee
Turbo Data Laboratories Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Turbo Data Laboratories Inc filed Critical Turbo Data Laboratories Inc
Publication of JPWO2009028050A1 publication Critical patent/JPWO2009028050A1/ja
Application granted granted Critical
Publication of JP5208117B2 publication Critical patent/JP5208117B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/52Program synchronisation; Mutual exclusion, e.g. by means of semaphores
    • G06F9/526Mutual exclusion algorithms

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Multi Processors (AREA)

Description

本発明は、データ項目に対応した項目値を含むレコードの配列として表される表形式データを複数台の演算ユニットによって分担して操作し、特に、表形式データを構築し、表形式データから項目値を取得するデータ処理方法に関係する。
本発明は、データ項目に対応した項目値を含むレコードの配列として表される表形式データを複数台の演算ユニットによって分担して操作し、特に、表形式データを構築し、表形式データから項目値を取得するマルチコア型処理装置にも関係する。
さらに、本発明は、上記データ処理方法を、マルチコア型プロセッサを備えるコンピュータに実行させるためのプログラム、コンピュータプログラムプロダクト、及び、コンピュータプログラムが記録された記録媒体に関係する。
従来、産業上の様々な分野において、大規模データを高速に処理することが求められている。大規模データの処理は、キャッシュやプリフェッチなどによるメモリアクセスの高速化、メモリ自体の高速化、及び、プロセッサの並列化のような演算処理の高速化、といったハードウェア技術の開発、ならびに、データ処理アルゴリズムの開発によって、高速化され続けている。
本発明者は、大規模データを高速に処理するための基本的なデータ処理アルゴリズム、たとえば、特許文献1に記載されているような、「オンメモリデータ処理アルゴリズム」を提案している。この技術は、表形式データを、従来のようなレコード(すなわち、行)単位ではなく、項目(すなわち、列)単位に成分分解するという考え方に基づいている。より具体的には、表形式データが、(1)レコード順を表す配列と、(2)項目に属する一意の項目値が所定の順序(たとえば、昇順)に並べられた値テーブルと、(3)各レコードに対応する項目値が値テーブルに格納されている位置情報を表す配列とからなるデータ構造によって表現されている。このようなデータ構造を採用することにより、表形式データの検索、ソート、マージ、ジョイン等の処理が高速に実現されている。
さらに、本発明者は、メモリ分散型のマルチプロセッサシステム及びメモリ共有型のマルチプロセッサシステムのようなプロセッサの並列化に対応した種々のオンメモリデータ処理アルゴリズムを提案している。たとえば、メモリ分散型のマルチプロセッサシステムに対応した検索・ソートアルゴリズムが特許文献2に記載され、集計アルゴリズムが特許文献3に記載されている。さらに、メモリ共有型のマルチプロセッサシステムに対応した効率的なソートアルゴリズムが特許文献4に記載されている。
ところで、近年、1台のプロセッサの内部に複数(又は多数)のコアを含むプロセッサアーキテクチャが提案されている。マルチコア型プロセッサの一例として、Cell Broadband EngineTMが知られている(非特許文献1を参照のこと)。このタイプのプロセッサは、たとえば、マルチメディアデータの高速処理や、分散コンピューティングなどに適用することが意図されている。このアーキテクチャでは、各コアは、大容量ではないが、専用のローカルメモリを有し、他のコアとは独立して演算を行うことができる。実際には、ローカルメモリのメモリ容量はマルチメディアデータ等の処理に不足しているので、外付けのグローバルメモリが設けられている。マルチコア型プロセッサアーキテクチャは、クロックの高速化に頼るのではなく、コアの追加によって並列性が高まり、処理能力が上昇するので、拡張性に優れている。
よって、このようなマルチコア型プロセッサアーキテクチャは、マルチメディアデータ処理だけでなく、高速性が要求される種々のアプリケーションに適用されることが望まれている。
"Cell Broadband EngineArchitecture", Version 1.01, October 3, 2006、[平成19年7月26日検索]、インターネット(URL:http://cell.scei.co.jp/pdf/CBE_Architecture_v101.pdf) 国際公開第00/10103号公報 国際公開第2005/041066号公報 国際公開第2005/041067号公報 国際公開第2006/126467号公報
本発明者は、大規模な表形式データを高速に処理するため、上記の拡張性に優れたマルチコア型プロセッサアーキテクチャを利用する技術の重要性を認識した。
しかし、データベースのように大規模なメモリを用いるアプリケーションでは、処理されるべきデータの全部はコアに付随するローカルメモリに収容できないので、データ処理アルゴリズムの複雑性が増す。たとえば、各コアに付随するローカルメモリに収容できない程に大きなデータをランダムアクセスすると、外付けのグローバルメモリへのアクセスが頻発し、処理性能が著しく低下する。よって、このような問題を起こさない新たなデータ構造が必要とされる。
したがって、マルチコア型プロセッサを備えるコンピュータにおいて、データ項目に対応した項目値を含むレコードの配列として表される表形式データを、並列処理性能を低下させることなく、容量の小さい作業用メモリで処理する、データ処理方法を提供できることが好ましい。
また、データ項目に対応した項目値を含むレコードの配列として表される表形式データを、並列処理性能を低下させることなく、容量の小さい作業用メモリで処理する、マルチコア型情報処理装置を提供できることが好ましい。
さらに、マルチコア型プロセッサを備えるコンピュータにおいて、データ項目に対応した項目値を含むレコードの配列として表される表形式データを、並列処理性能を低下させることなく、容量の小さい作業用メモリで処理する、プログラム、コンピュータプログラムプロダクト、及び、コンピュータプログラムが記録された記録媒体を提供できることが好ましい。
本発明の少なくとも1つの実施例によれば、マルチコア型プロセッサの並列処理性能を低下させることなく、小容量のローカルメモリを使用して表形式データを取り扱うため、表形式データを2タイプのデータ形式によって記述する。第1のタイプのデータは、ローカルメモリに収容できることが保証される程に小さく分割され、グローバルメモリ(又は、ディスク)に保持される配列群である。この第1のタイプのデータは、グローバルメモリからローカルメモリへ一括転送され得るので、ランダムアクセスを行っても遅延を生じない。第2のタイプのデータは、大量のデータをアクセスする際に、必ず所定の順序(たとえば、昇順又は降順)に連続的にアクセスされることが保証され、グローバルメモリ(又は、ディスク)に保持される配列群である。第2のタイプのデータは、そのままではローカルメモリに収容できないので、ローカルメモリに収容可能なサイズずつ、グローバルメモリからローカルメモリへ順次アクセスによって転送される。もちろん、第1のタイプのデータは、順次アクセスによらずに、部分的にグローバルメモリ上に格納されている要素が直接アクセスされることもある。
本文書中で、表形式データとは、データ項目に対応した項目値を含むレコードの配列として表されるデータを意味する。
また、本文書中で、マルチコア型処理装置又はプロセッサとは、専用のローカルメモリを含む複数台の演算ユニットと、上記複数台の演算ユニットに接続されているグローバルメモリと、上記複数台の演算ユニットを接続するバスと、上記グローバルメモリ及び上記複数台の演算ユニットに接続されている少なくとも1台の制御ユニットと、を備える装置を意味する。
本発明の少なくとも1つの実施例は、上記の成分分解の考え方と、上記の2タイプのデータ形式の考え方とを組み合わせて、表形式データをマルチコア型処理装置上に構築する。
そのため、本発明の少なくとも1つの実施例によれば、表形式データの(複数又は多数の)レコードは、ブロック番号によって識別されるブロックに分割される。初期的には、このブロックは、このブロックに含まれるレコードの処理を担当する演算ユニットに対応している。各演算ユニットが担当するレコードは、本書中で、担当レコードと呼ばれる。そして、このブロック番号が原始レコード位置番号の順番に格納されているブロック番号配列がグローバルメモリ上に作成される。ブロック番号配列は第2のタイプのデータをもつ。原始レコード位置番号とは、元の表形式データの中で各レコードが収容されている位置、たとえば、行番号に対応する。
各演算ユニットは、担当レコードを認識するために、担当レコードのレコード順序番号(初期的には原始レコード位置番号と一致)がレコード順序番号の順番に格納されているレコード順序番号配列にアクセスすることができる。このレコード順序番号配列は、第1のタイプのデータをもち、必要に応じて、グローバルメモリから各演算ユニット内のローカルメモリへ転送される。
さらに、各演算ユニットは、担当レコードに含まれる項目値にアクセスするため、項目値アクセス情報がレコード順序番号の順番に格納されている項目値アクセス情報配列にアクセスすることができる。この項目値アクセス情報配列は、第1のタイプのデータをもち、必要に応じて、グローバルメモリから各演算ユニット内のローカルメモリへ転送される。
各演算ユニットの担当レコードに含まれる項目値は、データ項目毎に各演算ユニットが項目値アクセス情報配列を用いてアクセスすることができるようにグローバルメモリに保持され、必要に応じて、グローバルメモリから各演算ユニット内のローカルメモリへ転送される。
表形式データの項目値は、データ項目毎に、一意の項目値が所定の順序(昇順又は降順)に格納されているグローバル項目値配列としてグローバルメモリ上に構築されている。このグローバル項目値配列は第2のタイプのデータをもつ。また、各演算ユニットが項目値アクセス情報配列を用いて担当レコードに含まれる項目値にアクセスするため、データ項目毎に、担当レコードに含まれる項目値を特定するローカル項目値番号が原始レコード位置番号の順番に格納されているローカル項目値番号配列と、ローカル項目値番号によって表される項目値がグローバル項目値配列中に格納されている位置を指定する項目値指定ポインタが所定の順序(昇順又は降順)に格納されている項目値指定ポインタ配列とがグローバルメモリ上に構築され、必要に応じて、グローバルメモリから各演算ユニット内のローカルメモリへ転送される。ローカル項目値番号配列及び項目値指定ポインタ配列は第1のタイプのデータをもつ。このように、表形式データの項目値は、データ項目毎に、グローバル項目値配列、ローカル項目値番号配列、及び、項目値指定ポインタ配列の形に展開されている。
以上の考え方に従って、本発明の一実施例は、
専用のローカルメモリを含む複数台の演算ユニットと、
上記複数台の演算ユニットに接続されているグローバルメモリと、
上記複数台の演算ユニットを接続するバスと、
上記グローバルメモリ及び上記複数台の演算ユニットに接続されている少なくとも1台の制御ユニットと、
を備えるマルチコア型処理装置において、
データ項目に対応した項目値を含むレコードの配列として表され、上記複数台の演算ユニットによって分担して操作される表形式データを、上記グローバルメモリに構築する方法であって、
上記制御ユニットが、上記レコードを各演算ユニットが担当する担当レコードを含むブロックに分割し、各レコードに対応するブロック番号を上記表形式データ中の原始レコード位置番号の順番に格納するブロック番号配列を作成し、上記グローバルメモリに格納するステップと、
上記複数台の演算ユニットが並列的に動作して、上記担当レコードの上記原始レコード位置番号をレコード順序番号の順番に格納するレコード順序番号配列を各演算ユニット内の上記ローカルメモリ上に作成し、上記グローバルメモリへ転送するステップと、
上記複数台の演算ユニットが並列的に動作して、上記担当レコードに含まれる上記項目値にアクセスする項目値アクセス情報を上記レコード順序番号の順番に格納する項目値アクセス情報配列を各演算ユニット内の上記ローカルメモリ上に作成し、上記グローバルメモリへ転送するステップと、
上記複数台の演算ユニットが並列的に動作して、上記担当レコードに含まれる上記項目値が上記項目値アクセス情報を用いてアクセスされるように、データ項目毎に上記項目値を各演算ユニット内の上記ローカルメモリ上に展開し、上記展開された項目値を上記グローバルメモリへ転送するステップと、
を備える方法を提供する。
上記方法は、
上記制御ユニットが、上記グローバルメモリ上の上記ブロック番号配列を参照して、所定のレコードを含むブロックのブロック番号と上記所定のレコードを担当する演算ユニットとを決定するステップと、
上記制御ユニットが、上記決定された演算ユニットへ上記所定のレコードのレコード順序番号を通知するステップと、
上記レコード順序番号を通知された演算ユニットが、当該演算ユニットの上記担当レコードに関する上記レコード順序番号配列及び前記項目値アクセス情報配列を、上記グローバルメモリから当該演算ユニットの上記ローカルメモリへ転送するステップと、
上記レコード順序番号を通知された演算ユニットが、上記通知されたレコード順序番号が格納されている位置を上記転送されたレコード順序番号配列中で特定するステップと、
上記レコード順序番号を通知された演算ユニットが、上記特定された位置によって指定される項目値アクセス情報を上記転送された項目値アクセス情報配列中で特定するステップと、
上記レコード順序番号を通知された演算ユニットが、データ項目毎に、上記グローバルメモリから、上記特定された項目値アクセス情報によって指定される上記項目値を取得し、上記取得された項目値を上記グローバルメモリへ転送するステップと、
をさらに備える。
また、上記方法は、
上記複数台の演算ユニットが並列的に動作して、データ項目毎に上記項目値を各演算ユニット内の上記ローカルメモリに展開し、上記展開された項目値を上記グローバルメモリに格納するステップが、
上記複数台の演算ユニットが並列的に動作して、データ項目毎に、単一のブロックに含まれる上記項目値を上記グローバルメモリから上記ローカルメモリへ転送し、上記単一のブロックに含まれる項目値のうちの一意の値を所定の順序で格納するローカル項目値作業配列、及び、上記単一のブロックに含まれる上記担当レコードの上記原始レコード位置番号の順番に、上記担当レコードに含まれる項目値が上記ローカル項目値作業配列中に格納されている位置を指定するローカル項目値番号を格納するローカル項目値番号配列を上記ローカルメモリ上に作成し、上記グローバルメモリへ転送するステップと、
上記複数台の演算ユニットが並列的に動作して、データ項目毎に、1対のブロックに関連した、上記ブロックに含まれる上記項目値のうちの一意の値に対応する上記ブロック番号を格納したブロック番号作業配列と、上記ローカル項目値作業配列と、上記ブロックに含まれる上記項目値が上記ローカル項目値作業配列中で格納されている位置を指定するポインタを格納するローカル項目値指定ポインタ作業配列とからなる1対の組から、上記1対のブロックがマージされたブロックに関連した、さらなるブロック番号作業配列と、さらなるローカル項目値作業配列と、さらなるローカル項目値指定ポインタ作業配列とからなる組を作成するマージ処理を実行するステップと、
上記複数台の演算ユニットが並列的かつ階層的に動作して、データ項目毎に、最終的な1個のブロックにマージされるまで上記マージ処理を繰り返し、得られた最終的なブロック番号作業配列と、最終的なローカル項目値作業配列と、最終的なローカル項目値指定ポインタ作業配列とを上記グローバルメモリへ転送するステップと、
上記複数台の演算ユニットが並列的に動作して、データ項目毎に、上記最終的なローカル項目値指定ポインタ作業配列中の要素を上記最終的なブロック番号作業配列中の対応する要素によって指定されたブロック番号毎に分配し所定の順番に並べることにより、上記ローカル項目値番号によって表される上記項目値が、上記項目値を所定の順序で格納するグローバル項目値配列に一致する、上記最終的なローカル項目値作業配列中で格納されている位置を指定するポインタを格納する項目値指定ポインタ配列を作成し上記グローバルメモリへ転送するステップと、
を含む。
本発明の別の実施例によれば、上記方法を実施するマルチコア型処理装置が提供される。本実施例によれば、マルチコア型処理装置は、
専用のローカルメモリを含む複数台の演算ユニットと、
上記複数台の演算ユニットに接続されているグローバルメモリと、
上記複数台の演算ユニットを接続するバスと、
上記グローバルメモリ及び上記複数台の演算ユニットに接続されている少なくとも1台の制御ユニットと、
を備え、
データ項目に対応した項目値を含むレコードの配列として表され、上記複数台の演算ユニットによって分担して操作される表形式データを上記グローバルメモリに構築する。このマルチコア型情報処理装置において、
上記制御ユニットが、上記レコードを各演算ユニットが担当する担当レコードを含むブロックに分割し、各レコードに対応するブロック番号を上記表形式データ中の原始レコード位置番号の順番に格納するブロック番号配列を作成し、上記グローバルメモリに格納する手段を含み、
各演算ユニットが、
他の演算ユニットと並列的に動作して、上記担当レコードの上記原始レコード位置番号をレコード順序番号の順番に格納するレコード順序番号配列を各演算ユニット内の上記ローカルメモリ上に作成し、上記グローバルメモリへ転送する手段と、
他の演算ユニットと並列的に動作して、上記担当レコードに含まれる上記項目値にアクセスする項目値アクセス情報を上記レコード順序番号の順番に格納する項目値アクセス情報配列を各演算ユニット内の上記ローカルメモリ上に作成し、上記グローバルメモリへ転送する手段と、
他の演算ユニットと並列的に動作して、上記担当レコードに含まれる上記項目値が上記項目値アクセス情報を用いてアクセスされるように、データ項目毎に上記項目値を各演算ユニット内の上記ローカルメモリ上に展開し、上記展開された項目値を上記グローバルメモリへ転送する手段と、
を含む。
また、上記マルチコア型処理装置において、
上記制御ユニットが、
上記グローバルメモリ上の上記ブロック番号配列を参照して、所定のレコードが含まれるブロックのブロック番号と上記所定のレコードを担当する上記演算ユニットとを決定する手段と、
上記決定された演算ユニットへ上記所定のレコードのレコード順序番号を通知する手段と、
をさらに含み、
上記レコード順序番号を通知された演算ユニットが、
当該演算ユニットの上記担当レコードに関する上記レコード順序番号配列及び前記項目値アクセス情報配列を、上記グローバルメモリから当該演算ユニットの上記ローカルメモリへ転送する手段と、
上記通知されたレコード順序番号が格納されている位置を上記転送されたレコード順序番号配列中で特定する手段と、
上記特定された位置によって指定される項目値アクセス情報を上記転送された項目値アクセス情報配列中で特定する手段と、
データ項目毎に、上記グローバルメモリから、上記特定された項目値アクセス情報によって指定される上記項目値を取得し、上記取得された項目値を上記グローバルメモリへ転送する手段と、
をさらに含む。
また、上記マルチコア型処理装置において、
各演算ユニットが、
他の演算ユニットと並列的に動作して、データ項目毎に上記項目値を各演算ユニット内の上記ローカルメモリに展開し、上記展開された項目値を上記グローバルメモリに格納する手段と、
他の演算ユニットと並列的に動作して、データ項目毎に、単一のブロックに含まれる上記項目値を上記グローバルメモリから上記ローカルメモリへ転送し、上記単一のブロックに含まれる項目値のうちの一意の値を所定の順序で格納するローカル項目値作業配列、及び、上記単一のブロックに含まれる上記担当レコードの上記原始レコード位置番号の順番に、上記担当レコードに含まれる項目値が上記ローカル項目値作業配列中に格納されている位置を指定するローカル項目値番号を格納するローカル項目値番号配列を上記ローカルメモリ上に作成し、上記グローバルメモリへ転送する手段と、
他の演算ユニットと並列的に動作して、データ項目毎に、1対のブロックに関連した、上記ブロックに含まれる上記項目値のうちの一意の値に対応する上記ブロック番号を格納したブロック番号作業配列と、上記ローカル項目値作業配列と、上記ブロックに含まれる上記項目値が上記ローカル項目値作業配列中で格納されている位置を指定するポインタを格納するローカル項目値指定ポインタ作業配列とからなる1対の組から、上記1対のブロックがマージされたブロックに関連した、さらなるブロック番号作業配列と、さらなるローカル項目値作業配列と、さらなるローカル項目値指定ポインタ作業配列とからなる組を作成するマージ処理を実行する手段と、
他の演算ユニットと並列的かつ階層的に動作して、データ項目毎に、最終的な1個のブロックにマージされるまで上記マージ処理を繰り返し、得られた最終的なブロック番号作業配列と、最終的なローカル項目値作業配列と、最終的なローカル項目値指定ポインタ作業配列とを上記グローバルメモリへ転送する手段と、
他の演算ユニットと並列的に動作して、データ項目毎に、上記最終的なローカル項目値指定ポインタ作業配列中の要素を上記最終的なブロック番号作業配列中の対応する要素によって指定されたブロック番号毎に分配し所定の順番に並べることにより、上記ローカル項目値番号によって表される上記項目値が、上記項目値を所定の順序で格納するグローバル項目値配列に一致する、上記最終的なローカル項目値作業配列中で格納されている位置を指定するポインタを格納する項目値指定ポインタ配列を作成し上記グローバルメモリへ転送する手段と、
をさらに含む。
さらに、本発明の別の実施例によれば、
専用のローカルメモリを含む複数台の演算ユニットと、
上記複数台の演算ユニットに接続されているグローバルメモリと、
上記複数台の演算ユニットを接続するバスと、
上記グローバルメモリ及び上記複数台の演算ユニットに接続されている少なくとも1台の制御ユニットと、
を備えるコンピュータにロードされ、データ項目に対応した項目値を含むレコードの配列として表され、上記複数台の演算ユニットによって分担して操作される表形式データを、上記グローバルメモリに構築する方法を上記コンピュータに実行させるためのコンピュータプログラムが記録された記憶媒体が提供される。
本発明の少なくとも1つの実施例によれば、表形式データが、マルチコア型プロセッサの各演算ユニット内のローカルメモリに収容できるように分割されたデータ群と、所定の順序に連続的にアクセス可能であるデータ群とによって表現される。これにより、各演算ユニットからグローバルメモリへの効率的なアクセスが実現される。よって、本発明の少なくとも1つの実施例によれば、マルチコア型プロセッサを備えるコンピュータにおいて、大規模な表形式データを高速に処理することが可能になる。
本発明の一実施形態によるマルチコア型処理装置の概略図である。 本発明の一実施形態によるコンピュータシステムの概略図である。 本発明の一実施形態の基礎となるデータ管理機構を説明するための表形式データの一例を表す図である。 本発明の一実施形態の基礎となる基本的なデータ管理機構の説明図である。 本発明の一実施形態によるマルチコア型情報処理装置向けデータ構造の説明図である。 本発明の一実施形態によるマルチコア型情報処理装置向けデータ構造の説明図である。 本発明の一実施形態によるマルチコア型情報処理装置向けデータ構造の説明図である。 本発明の一実施形態によるマルチコア型情報処理装置向けデータ構造の説明図である。 本発明の一実施形態によるマルチコア型処理装置向けデータ構造をグローバルメモリ上に構築する方法のフローチャートである。 本発明の一実施形態によるマルチコア型処理装置向けデータ構造における項目値取得方法のフローチャートである。 本発明の一実施形態によるコンパイル処理の概略的なフローチャートである。 本発明の一実施形態による順序情報作成処理の説明図である。 本発明の一実施形態による順序情報作成処理の説明図である。 本発明の一実施形態によるブロック内コンパイル処理の概要図である。 本発明の一実施形態によるブロック内コンパイル処理の概要図である。 本発明の一実施形態によるブロック内コンパイル処理の概要図である。 ブロック内コンパイル処理の一実施例の概要図である。 ブロック内コンパイル処理の初期化処理の説明図である。 ブロック内コンパイル処理の1段目のマージ処理の説明図である。 ブロック内コンパイル処理の1段目のマージ処理の説明図である。 ブロック内コンパイル処理の1段目のマージ処理の説明図である。 ブロック内コンパイル処理の1段目のマージ処理の説明図である。 ブロック内コンパイル処理の1段目のマージ処理の説明図である。 ブロック内コンパイル処理の1段目のマージ処理の説明図である。 ブロック内コンパイル処理の1段目のマージ処理の説明図である。 ブロック内コンパイル処理の2段目のマージ処理の説明図である。 ブロック内コンパイル処理の2段目のマージ処理の説明図である。 ブロック内コンパイル処理の2段目のマージ処理の説明図である。 ブロック内コンパイル処理の2段目のマージ処理の説明図である。 ブロック内コンパイル処理の2段目のマージ処理の説明図である。 ブロック内コンパイル処理の2段目のマージ処理の説明図である。 ブロック内コンパイル処理の3段目のマージ処理の説明図である。 ブロック内コンパイル処理の3段目のマージ処理の説明図である。 ブロック内コンパイル処理の3段目のマージ処理の説明図である。 ブロック内コンパイル処理の3段目のマージ処理の説明図である。 ブロック内コンパイル処理の値リスト作成処理の説明図である。 本発明の一実施形態によるブロック間コンパイル処理におけるマージ処理の概要図である。 本発明の一実施形態によるブロック間コンパイル処理におけるマージ処理の概要図である。 本発明の一実施形態によるブロック間コンパイル処理におけるマージ処理の概要図である。 本発明の一実施形態によるブロック間コンパイル処理が適用されるブロック内コンパイル処理の結果の説明図である。 本発明の一実施形態によるブロック間コンパイル処理が適用されるブロック内コンパイル処理の結果の説明図である。 本発明の一実施形態によるブロック間コンパイル処理における1段目のマージ処理の説明図である。 本発明の一実施形態によるブロック間コンパイル処理における1段目のマージ処理の説明図である。 本発明の一実施形態によるブロック間コンパイル処理における1段目のマージ処理の説明図である。 本発明の一実施形態によるブロック間コンパイル処理における2段目のマージ処理の説明図である。 本発明の一実施形態によるブロック間コンパイル処理における2段目のマージ処理の説明図である。 本発明の一実施形態によるブロック間コンパイル処理における2段目のマージ処理の説明図である。 本発明の一実施形態によるブロック間コンパイル処理における2段目のマージ処理の説明図である。 本発明の一実施形態によるブロック間コンパイル処理における3段目のマージ処理の結果を説明する図である。 本発明の一実施形態によるブロック間コンパイル処理における3段目のマージ処理の結果を説明する図である。 本発明の一実施形態によるブロック間コンパイル処理における分配処理の説明図である。 本発明の一実施形態によるブロック間コンパイル処理における分配処理の結果を説明する図である。 本発明の代替的な実施形態によるブロック間コンパイル処理におけるブロックグループ化処理の説明図である。 本発明の代替的な実施形態によるブロック間コンパイル処理におけるブロックグループ化処理の結果を説明する図である
符号の説明
100 マルチコア型処理装置
101 マルチコア型プロセッサチップ
110,120,130,140 演算ユニット
111,121,131,141 コア
112,122,132,142 ローカルメモリ
150 チップ内バス
160,161,162,163 バス
170,171,172,173 グローバルメモリ
200 コンピュータシステム
202 マルチコア型処理装置
210 CPU
212 RAM
214 ROM
216 固定記憶装置
218 CD−ROM
220 CD−ROMドライバ
222 I/F
224 入力装置
226 表示装置
228 バス
500 表形式データ
501 データ項目「School」
502 データ項目「Age」
510 レコード0
511 レコード14
520,521,・・・,527 ブロック
530 順序情報
531 項目情報「School」
532 項目情報「Age」
540 ブロック番号配列
551−0,551−1,・・・,551−7 レコード順序番号配列
552−0,552−1,・・・,552−7 項目値アクセス情報配列
560−0,560−1,・・・,560−7 ブロック情報「School」
561−0,561−1,・・・,561−7 ローカル項目値番号配列「School」
562−0,562−1,・・・,562−7 項目値指定ポインタ配列「School」
570 グローバル項目値配列「School」
580−0,580−1,・・・,580−7 ブロック情報「Age」
581−0,581−1,・・・,581−7 ローカル項目値番号配列「Age」
582−0,582−1,・・・,582−7 項目値指定ポインタ配列「Age」
590 グローバル項目値配列「Age」
以下、本発明を実施するための種々の形態を図面と共に詳細に説明する。
[マルチコア型処理装置]
最初に、本発明の一実施例によるデータ処理を実現するマルチコア型処理装置について説明する。図1はマルチコア型処理装置の一実施形態の概略図である。マルチコア型処理装置100は、マルチコア型プロセッサチップ101上に複数台(たとえば、2台、4台、8台等、本例では4台)の演算ユニット110、120、130、140が設けられている。各演算ユニット110、120、130、140は、データ処理用のコア111、121、131、141とコア専用のローカルメモリ112、122、132、142とを含む。各演算ユニット110、120、130、140は、チップ内のバス150によって接続されている。このバス150は、好ましくは、リング型バスである。演算ユニットは、チップ内のバス150によって接続されているので、高速にデータ通信することが可能である。さらに、各演算ユニット110、120、130、140は、DMA転送をサポートするバス160、161、162、163を介して、チップ101に外付けされたグローバルメモリ170、171、172、173と接続されている。
チップ内のローカルメモリ112、122、132、142の記憶容量は、たとえば、256KB(キロバイト)程度であり、一方、グローバルメモリ170、171、172、173は数十GB(ギガバイト)の大容量メモリである。同図では、グローバルメモリ170、171、172、173が区別して記載されている。これは、各コアからグローバルメモリへ1本のバスでアクセスすると、バスの通信性能がボトルネックとなるので、各コアに専用のメモリインターフェイス(図示せず)を設け、外付けのグローバルメモリへはこのメモリインターフェイスを介してアクセスすることを示している。もちろん、このような構成であっても、NUMA(不均一メモリアクセス)方式のように、グローバルメモリが全体として論理的に連続した1つのメモリとして見えるように管理することは可能である。代替的な実施形態では、各演算ユニットは、1つのバスを介して物理的に一体的な外付けのグローバルメモリに接続される。
さらに、上記のCell Broadband EngineTMのようなプロセッサでは、1チップ内には、汎用プロセッサコアと、演算用プロセッサコアとが搭載されている。汎用プロセッサコアは複数台の演算用プロセッサコアの動作を制御することが可能である。したがって、マルチコア型プロセッサは、好ましくは、汎用プロセッサコアのような制御ユニットを備えるが、制御ユニットは、チップ内に搭載する必要はなく、チップの外部に設けられることもある。
制御ユニットと演算ユニット、又は、演算ユニット同士は、たとえば、メールボックスやシグナル機構を用いて通信することが可能である。
[コンピュータシステム構成]
図2は、本発明の一実施形態による表形式データを操作するコンピュータシステム200の概略図である。コンピュータシステム200は、データ項目に対応した項目値を含むレコードの配列として表される表形式データを複数台の演算ユニットによって分担して操作する、図1に示されているような、マルチコア型処理装置202を備えている。図2に示されているように、コンピュータシステム200は、さらに、プログラムを実行することによりシステム全体および個々の構成部分を制御するCPU210と、ワークデータ等を記憶する、たとえば、RAM(Random Access Memory)のようなメモリ212と、プログラム等を記憶するROM(Read Only Memory)214と、ハードディスク等の固定記憶媒体216と、CD−ROM218をアクセスするためのCD−ROMドライバ220と、CD−ROMドライバ220及び外部ネットワーク等(図示せず)へ繋がれた外部端子に接続されているインタフェース(I/F)222と、キーボード及びマウス等のような入力装置224と、コンピュータモニターのような表示装置226とを備えている。マルチコア型処理装置210、RAM212、ROM214、外部記憶媒体216、I/F222、入力装置224及び表示装置226は、バス228を介して相互に接続されている。
表形式データの操作をコンピュータシステム200のマルチコア型処理装置202とCPU210に実行させるプログラムは、CD−ROM218に収容され、CD−ROMドライバ220に読取られても良いし、ROM214に予め記憶されていても良い。また、いったんCD−ROM218から読み出したものを、外部記憶媒体216の所定の領域に記憶しておいても良い。或いは、上記プログラムは、ネットワーク(図示せず)、外部端子、及び、I/F220を介して、外部から供給されるものであっても良い。
また、本発明の一実施形態によるマルチコア型プロセッサシステムは、コンピュータシステム200に表形式データを操作するプログラムを実行させることにより実現される。
図2に示されているコンピュータシステム200では、マルチコア型処理装置202の他にCPU210が設けられ、システム全体及び個々の構成部分を制御している。しかし、本発明は、このような実施形態に限定されることはなく、代替的な実施形態では、マルチコア型処理装置202に含まれている制御ユニットがシステム全体及び個々の構成部品を制御する。
[情報ブロックに基づくデータ管理機構]
図3は本発明の一実施形態の基礎となるデータ管理機構を説明するための表形式データの一例を表す図である。この表形式データは、上述の国際公開第WO00/10103号に提案したデータ管理機構を用いることにより、コンピュータ内では図4に示されるようなデータ構造として記憶される。このデータ構造は、市販されているコンピュータ、たとえば、パーソナルコンピュータのハードウェア資源、特に、プロセッサ及びメモリを使用して大規模な表形式データの検索、ソート、集計等を実現するために提案された、コンピュータのメモリ上に置かれる表形式データのデータ構造であることに注意すべきである。
なお、「元の表形式データ中でレコードが収容されている位置を表す情報レコード番号(すなわち、原始レコード位置番号)」と「レコードの並び順を表す情報(すなわち、レコード順序番号)」とが本文書中では明確に区別されている。すべてのレコードには原始レコード位置番号が関連付けられている。この原始レコード位置番号は、データ項目に対応した項目値を含む個々のレコードを特定するために利用される仮想的な情報である。一般に、表形式データは、レコードが常に原始レコード位置番号の順番に配列されているとは限らない。たとえば、元の表形式データをある項目の項目値に関して昇順にソートすると、得られる表形式データのレコードの並び順は元の表形式データのレコードの並び順とは異なる。但し、元々の表形式データ中のレコードは、レコードが原始レコード位置番号の順番に並べられていることがあり、この場合には、原始レコード位置番号とレコード順序番号とが初期的に一致している。
図4に示すように、表形式データの各レコードの並び順の番号(レコード順序番号)と、原始レコード位置番号は、レコード順序指定配列401(以下、この配列を「OrdSet」のように略記する。)によって対応付けられる。レコード順序指定配列401は、レコード順序番号の順に原始レコード位置番号を格納している。図4の例では、レコードは原始レコード位置番号の順番に並べられている。
ここで、本明細書中での配列の記法について説明する。一般に、配列Aは、添字をiとすると、配列の要素がA[i]のように表記できるが、図面中では、配列は、配列の要素A[i]は、実線で囲まれた領域内に示され、要素A[i]と要素A[i+1]の境界は点線で示されている。また、要素A[i]の添字iが要素A[i]の左側に示されている。また、配列の添字iは0から始まる整数で表されている。
もう一度図4に戻ると、性別に関しては、表形式データのレコード順序番号=0に対応する原始レコード位置番号は、配列OrdSet[0]から「0」であることがわかる。原始レコード位置番号が「0」であるレコードに関する実際の性別の値、即ち、「男」又は「女」は、実際の値が所定の順序(たとえば、昇順又は降順)に従ってソートされた値リストである項目値配列403(以下、項目値配列、すなわち、値リストを「VL」のように略記する。)へのポインタ配列である項目値番号配列402(以下、項目値番号配列、すなわち、ポインタ配列を「VNo」のように略記する。)を参照することによって取得できる。ポインタ配列402は、配列OrdSet401に格納されている原始レコード位置番号の順番に従って、実際の値リスト403中の要素を指し示すポインタを格納している。これにより、表形式データのレコード「0」に対応する性別の項目値は、(1)配列OrdSet401からレコード順序番号=0に対応する原始レコード位置番号=0を取り出し、(2)値リストへのポインタ配列402から原始レコード位置番号=0に対応する要素「1」を取り出し、(3)値リスト403から、値リストへのポインタ配列302から取り出された要素「1」によって指し示される要素「女」を取り出すことにより取得できる。
他のレコードに対しても、また、年齢及び身長に関しても同様に項目値を取得することができる。
このように表形式データは、値リストVLと、値リストへのポインタ配列VNoの組合せにより表現され、この組合せを、特に、「情報ブロック」と称する。図4には、性別、年齢及び身長に関する情報ブロックがそれぞれ情報ブロック408、409及び410として示されている。
単一のコンピュータが単一のメモリ(物理的には複数であっても良いが、単一のアドレス空間に配置されアクセスされるという意味で単一のメモリ)を有するならば、単一のコンピュータは、当該メモリに、順序集合の配列OrdSet、各情報ブロックを構成する値リストVLおよびポインタ配列VNoとを記憶しておけばよい。しかしながら、本発明の種々の実施形態では、表形式データの操作は、小容量の専用のローカルメモリを伴う複数台の演算ユニットにより構成されたマルチコア型処理装置によって行われる。そのため、効率的な並列処理を実現するために、表形式データを保持する新たな仕組みが提案されている。
[マルチコア型処理装置向けデータ構造]
次に、本発明の一実施形態によるマルチコア型処理装置向けデータ構造について説明する。図5A乃至5Dは本発明の一実施形態によるデータ構造の説明図である。図5Aは、元々の表形式データの一例を示している。図5Aに示された表形式データ500は、「School」というデータ項目501に対応した項目値(たとえば、「West」、「South」、「North」及び「East」と、「Age」というデータ項目502に対応した項目値(たとえば、「12」、「8」、「11」、「10」など)とを含むレコードの配列として表される。この元々の表形式データ500は、説明を簡単にするため、レコードが原始レコード位置番号の順番に並んでいる、すなわち、レコードを特定する原始レコード位置番号と、レコードの並び順を表すレコード順序番号とが一致しているものと仮定する。配列の先頭に位置するレコード510は、原始レコード位置番号0が付与されたレコードである。レコード510のデータ項目「School」の項目値は「West」であり、データ項目「Age」の項目値は「12」である。
本発明の一実施形態によるマルチコア型処理装置向けデータ構造では、この表形式データのレコードは、ブロック番号(本例では、0から7の8個のブロック番号)によって識別されるブロック520、521、・・・、527に分割される。初期的には、このブロックは、このブロックに含まれるレコードの処理を担当するマルチコア型処理装置の演算ユニットに対応している。
マルチコア型処理装置向けデータ構造は、レコードの並び順(すなわち、レコード順序番号)と、データ構造内の項目値の格納場所とを対応付ける順序に関する情報(順序情報)と、データ項目毎の項目値に関する情報(項目情報)とによって構成される。順序情報は、機能的に上記の本発明の一実施形態の基礎となるデータ管理機構におけるレコード順序指定配列OrdSetに対応し、項目情報は、同様に情報ブロックに対応している。順序情報と項目情報は、共にグローバルメモリに保持され、必要に応じて、それらの一部が各演算ユニットのローカルメモリへ転送される。図5Bは順序情報530を示し、図5C及び5Dは、それぞれ、データ項目「School」及びデータ項目「Age」の項目情報531及び532を示している。
順序情報530は、ブロック番号がレコード順序番号の順番に、格納されているブロック番号配列540を含む。本実施形態のデータ構造では、レコード毎に当該レコードの操作を担当する演算ユニットが定められる。よって、(複数の)レコードは、各演算ユニットが担当するレコード、すなわち、担当レコードに分割され、担当レコード毎にブロック番号が割り当てられる。ブロック番号配列をBlkNo、レコード順序番号をiとすると、BlkNo[i]は、レコード順序番号iをもつレコードが属するブロックのブロック番号がBlkNo[i]であることを表している。ブロック番号配列540は、レコードの個数に等しいサイズを有する整数型の配列である。また、ブロック番号配列540は第2のタイプのデータである。たとえば、図5A乃至5Dの例では、レコード順序番号0から3のレコードはブロック番号0のブロックに含まれ、レコード順序番号4から7のレコードはブロック番号1のブロックに含まれ、以下同様である。
本実施形態のデータ構造によれば、全レコードはブロックに対応した担当レコードに分割されるので、ブロック毎に、担当レコードのそれぞれを元の表形式データのレコードと対応付ける情報が必要になる。そのため、順序情報530は、ブロック毎に、担当レコードのレコード順序番号がレコード順序番号の順番に格納されているレコード順序番号配列551−1、551−2、・・・、551−7を含む。レコード順序番号配列は、以下では、GOrdという名前で呼ばれることがある。たとえば、図5A乃至5Dの例では、ブロック番号0というブロックに属する担当レコードのレコード順序番号は、0、1、2、3であり、ブロック番号1というブロックに属する担当レコードのレコード順序番号は、4、5、6、7であり、以下同様である。レコード順序番号配列は、各ブロックに属する担当レコードの数と同じサイズを有し、整数型の配列である。また、レコード順序番号配列は、各演算ユニットのローカルメモリに収容可能なサイズに分割されているので、第1のタイプのデータである。したがって、レコード順序番号配列は、必要に応じて、グローバルメモリから各演算ユニット内のローカルメモリへ転送される。
さらに、各レコードに含まれる項目値は、後述する項目情報の形で保持されているので、各演算ユニットは、担当レコードに含まれる項目値をアクセスするためのアドレス情報、すなわち、項目値アクセス情報を取得することが必要である。よって、本実施形態のデータ構造によれば、順序情報530は、ブロック毎に、担当レコードの項目値アクセス情報がレコード順序番号の順番に格納されている項目値アクセス情報配列552−1、552−2、・・・、552−7をさらに含む。この項目値アクセス情報配列は整数型の配列であり、項目値アクセス情報配列のサイズは担当レコードのレコード数に一致する。項目値アクセス情報配列もまた、第1のタイプのデータであり、必要に応じて、グローバルメモリから各演算ユニット内のローカルメモリへ転送される。項目値アクセス情報配列は、LOrdという名前で呼ばれることもある。たとえば、図5A乃至5Dの例では、ブロック番号0というブロックに含まれるレコード順序番号が0というレコードに含まれる項目値は、このブロック番号0に関して、0という項目値アクセス情報によってアクセス可能であり、ブロック番号1というブロックに含まれるレコード順序番号が5というレコードに含まれる項目値は、このブロック番号1に関して、1という項目値アクセス情報によってアクセス可能である。
次に、本実施形態によれば、項目情報は、データ項目毎の項目情報として保持される。たとえば、図5A乃至5Dの例では、データ項目「School」に関する項目情報531とデータ項目「Age」に関する項目情報532とがグローバルメモリに構築される。そして、ブロック毎の担当レコードに含まれる項目値は、データ項目毎に各演算ユニットが項目値アクセス情報配列を用いてアクセスすることができるようにグローバルメモリに保持され、必要に応じて、グローバルメモリから各演算ユニット内のローカルメモリへ転送される。項目値そのものは、データ項目毎に、一意の項目値が所定の順序(昇順又は降順)に格納されているグローバル項目値配列としてグローバルメモリ上に構築されている。たとえば、図5A乃至5Dの例では、データ項目「School」に関する項目値は、グローバル項目値配列570としてグローバルメモリに保持され、データ項目「Age」に関する項目値は、グローバル項目値配列590としてグローバルメモリに保持されている。このグローバル項目値配列は第2のタイプのデータである。なお、グローバル項目値配列は、項目値そのものを格納する配列であるため、整数型、浮動小数点型、文字列型などの様々なデータ型をとる。
項目情報は、担当レコードに関連した項目値アクセス情報を用いて、グローバル項目値配列に格納されている項目値を特定できるように構成されている。そのため、項目情報は、データ項目毎に、担当レコードに含まれる項目値を特定するローカル項目値番号が原始レコード位置番号の順番に格納されているローカル項目値番号配列と、ローカル項目値番号によって表される項目値がグローバル項目値配列中に格納されている位置を指定する項目値指定ポインタがローカル項目値番号の順番に格納されている項目値指定ポインタ配列とを含む。ローカル項目値番号配列及び項目値指定ポインタ配列はブロック毎に設けられる。ローカル項目値番号配列は、担当レコードのレコード数に一致するサイズを有する整数型配列であり、第1のタイプのデータであり、VNoという名前で呼ばれることもある。項目値指定ポインタ配列は、担当レコードに含まれる一意の項目値の数と同じサイズを有する整数型配列であり、第1のタイプのデータであり、LVLという名前で呼ばれることもある。ローカル項目値番号配列及び項目値指定ポインタ配列は、共に第1のタイプのデータであるため、ブロック毎にグローバルメモリ上に構築され、必要に応じて、グローバルメモリから各演算ユニット内のローカルメモリへ転送される。
図5A乃至5Dの例では、データ項目「School」に関して、項目情報531は、ローカル項目値番号配列561−0、561−1、・・・、561−7と、項目値指定ポインタ配列562−0、562−1、・・・、562−7と、グローバル項目値配列590とを含む。ローカル項目値番号配列と項目値指定ポインタ配列は、ブロック毎に分割されている。同図において、たとえば、ローカル項目値番号配列VNoの先頭の要素の値は「1」である。これは、値が「0」である項目値アクセス情報によって指定されたレコードに含まれる項目値の項目値番号が「1」であることを意味する。項目値番号が「1」である項目値は、項目値指定ポインタ配列LVLの2番目の要素、すなわち、LVL[1]を参照することにより、グローバル項目値配列GVLの3番目の要素、すなわち、GVL[2]であることがわかる。その他のブロックに関しても、また、その他のデータ項目に関しても、同様である。
このように、本実施形態のデータ構造によれば、各ブロックに属するレコードに含まれる項目値は、ブロック内で各項目値に付けられたローカル項目値番号と、このローカル項目値番号とグローバル項目値配列中の項目値とを対応付ける項目値指定ポインタと、グローバル項目値配列とによって表現されている。
[マルチコア型処理装置向けデータ構造の構築]
図6は、本発明の一実施形態によるマルチコア型処理装置向けデータ構造をグローバルメモリ上に構築する方法のフローチャートである。本方法によれば、マルチコア型処理装置の制御ユニットは、表形式データレコードをマルチコア型処理装置の各演算ユニットが担当する担当レコードを含むブロックに分割し、各レコードに対応するブロック番号を表形式データ中のレコード順に格納するブロック番号配列を作成し、グローバルメモリに格納する(ステップ602)。次に、複数台の演算ユニットが並列的に、担当レコードのレコード順序番号をレコード順序番号の順番に格納するレコード順序番号配列を、各演算ユニット内のローカルメモリ上に作成し、グローバルメモリへ転送する(ステップ604)。この処理は、たとえば、制御ユニットから各演算ユニットへ、各演算ユニットの担当レコードの先頭のレコード順序番号と担当レコードのレコード数とを通知することによって、簡単に実現される。その後、複数台の演算ユニットが並列的に動作して、担当レコードに含まれる項目値にアクセスする項目値アクセス情報をレコード順序番号の順番に格納する項目値アクセス情報配列を各演算ユニット内のローカルメモリ上に作成し、グローバルメモリへ転送するステップ(ステップ606)。各演算ユニットは、0から始まる連番を、担当レコードのレコード数に一致する個数だけ、項目値アクセス情報配列に格納すればよい。最後に、複数台の演算ユニットが並列的に動作して、担当レコードに含まれる項目値が項目値アクセス情報を用いてアクセスされるように、データ項目毎に項目値を各演算ユニット内のローカルメモリ上に展開し、展開された項目値をグローバルメモリへ転送する(ステップ608)。たとえば、演算ユニットは、協働して、データ項目毎に、ブロック内で各項目値に付けられたローカル項目値番号を原始レコード位置番号の順番に格納するローカル項目値番号配列と、このローカル項目値番号とグローバル項目値配列中の項目値とを対応付ける項目値指定ポインタをローカル項目値番号の順番に格納する項目値指定ポインタ配列とをローカルメモリ上に作成し、グローバルメモリへ転送し、全レコードに含まれる一意の項目値が所定の順序(昇順又は降順)で格納されたグローバル項目値配列をグローバルメモリ上に作成する。
なお、ステップ602とステップ604の順序は入れ換え可能である。また、担当レコード数が比較的少なく、各演算ユニットがレコード順序番号配列と項目値アクセス情報配列を同時にローカルメモリに格納可能であれば、各演算ユニットは、両方の配列を同時に作成し、その後、グローバルメモリへ転送してもよい。或いは、制御ユニットが、ブロック毎のレコード順序番号配列及び項目値アクセス情報配列をグローバルメモリ上に直接作成しても構わない。
なお、上記説明では、原始レコード位置番号とレコード順序番号とが一致していると仮定しているが、原始レコード位置番号とレコード順序番号が一致していなくてもかまわない。たとえば、元の表形式データのレコードがソートされ、原始レコード位置番号と初期のレコード順序番号とが一致していなくても、マルチコア型処理装置向けデータ構造を構築することが可能である。具体的には、制御ユニットは、表形式データのレコードを各演算ユニットが担当する担当レコードを含むブロックに分割し、各レコードに対応するブロック番号を表形式データのレコードのレコード順序番号の順番に格納するブロック番号配列を作成し、グローバルメモリに格納すればよい。
[項目値の取得処理]
次に、本発明の一実施形態によるマルチコア型処理装置向けデータ構造における表形式データの項目値の取得について説明する。図7は、本発明の一実施形態による項目値取得方法のフローチャートである。項目値は、図5A乃至5Dを参照して説明したように、データ項目毎に、項目情報の形でグローバルメモリ上に保持されている。よって、たとえば、制御ユニットは、唯一のレコードに含まれる項目値を容易に取得することができる。しかし、制御ユニットは、多数のレコードに含まれる項目値を同時に取得するには適していない。したがって、本実施形態では、多数の演算ユニットが同時に動作することにより、多数のレコードに含まれる項目値を同時に取得するような状況を考慮している。このような状況においても、項目値取得の基本動作は、ある特定の演算ユニットが担当レコード中のあるレコードに含まれる項目値を取得する処理であることが理解されるであろう。多数の演算ユニットが同時に動作できるようにするため、各演算ユニットは、項目値を取得するために必要な情報をグローバルメモリからローカルメモリへ転送し、ローカルメモリ上で各種の演算を実行する。
図7に示されているように、最初に、制御ユニットが、グローバルメモリ上のブロック番号配列を参照して、項目値が取得されるべき所定のレコードが含まれるブロックのブロック番号と、このブロックを担当する演算ユニットとを決定する(ステップ702)。次に、制御ユニットは、決定されたブロック番号によって識別される演算ユニットへ所定のレコードのレコード順序番号を通知する(ステップ704)。その後、演算ユニットは、この演算ユニットの担当レコードに関するレコード順序番号配列及び項目値アクセス情報配列を、グローバルメモリからこの演算ユニットのローカルメモリへ転送する(ステップ706)。続いて、演算ユニットは、通知されたレコード順序番号が格納されている位置をローカルメモリへ転送されたレコード順序番号配列中で特定する(ステップ708)。その後、演算ユニットは、特定された位置によって指定される項目値アクセス情報をローカルメモリへ転送された項目値アクセス情報配列中で特定する(ステップ710)。最後に、演算ユニットは、データ項目毎に、グローバルメモリに保持されたグローバル項目値配列の中から特定された項目値アクセス情報によって指定される項目値を取得し、取得された項目値をグローバルメモリへ転送する(ステップ712)。
本実施形態によるデータ取得の一例を、図5A乃至5Dに示されたデータ構造を用いて、より詳細に説明する。たとえば、レコード順序番号=14であるレコード、図5A乃至5Dでは、符号511で示されたレコードの項目値を取得することを考える。制御ユニットは、ブロック番号配列540の添字=14の要素の値、すなわち、BlkNo[14]=3を読み出す。これにより、対象レコードに対応するブロック番号は3であることがわかる。そこで、制御ユニットは、ブロック番号3に含まれるレコードを担当する演算ユニットへ対象レコードのレコード順序番号である14を通知する。ブロック番号と演算ユニットとの対応関係は、たとえば、制御ユニットによって管理されている。その後、レコード順序番号14を通知された演算ユニットは、グローバルメモリから、ブロック番号=3であるブロックに関するレコード順序番号配列551−3をローカルメモリへロードする。代替的な実施形態では、制御ユニットがブロック番号=3であるブロックに関するレコード順序番号配列551−3をグローバルメモリから演算ユニットのローカルメモリへ転送する。
次に、演算ユニットは、レコード順序番号配列551−3の中で、レコード順序番号=14が格納されている位置を検索する。この格納位置は、この演算ユニットの担当レコード中での対象レコードの順位(ランク)とも称される。レコード順序番号配列は、本実施形態では、昇順の配列であるため、この格納位置は、周知の2分割法などによって効率的に見つけられる。本例では、格納位置=2である。
次に、演算ユニットは、グローバルメモリから、ブロック番号=3であるブロックに関する項目値アクセス情報配列552−3をローカルメモリへ転送する。代替的な実施形態では、項目値アクセス情報配列552−3は、制御ユニットによって、グローバルメモリから演算ユニットのローカルメモリへ転送される。さらに別の実施形態では、項目値アクセス情報配列552−3は、レコード順序番号配列551−3と同時に、グローバルメモリから演算ユニットのローカルメモリへ転送される。なお、以下では、繰り返して説明しないが、グローバルメモリからローカルメモリへのデータの転送は、特に断らない限り、制御ユニットと演算ユニットのどちらが行ってもよい。さらに、転送されるべきデータ量と比べて、演算ユニットのローカルメモリの容量に余裕がある場合には、2つ以上のデータを一括して、グローバルメモリからローカルメモリへ転送してもよい。演算ユニットは、項目値アクセス情報配列552−3の中で、対象レコードの順位で示される位置に格納されている値、すなわち、LOrd[2]=2を取得する。
次に、演算ユニットは、グローバルメモリから、データ項目=“School”に関して、かつ、ブロック番号=3であるブロックに関して、ローカル項目値番号配列561−3をローカルメモリへロードする。演算ユニットは、先に取得した値、すなわち、LOrd[2]=2の値を、ローカル項目値番号配列561−3からローカル項目値を取得するためのオフセット値として使用する。すなわち、演算ユニットは、ローカル項目値配列561−3から、VNo[2]=0を取得する。
次に、演算ユニットは、グローバルメモリから、データ項目=“School”に関して、かつ、ブロック番号=3であるブロックに関して、項目値指定ポインタ配列562−3をローカルメモリへ転送する。演算ユニットは、項目値指定ポインタ配列562−3から、先に取得されたローカル項目値=0によって指定されている項目値指定ポインタ、すなわち、LOrd[0]=1を取得する。
最後に、演算ユニットは、データ項目=“School”に関して、グローバルメモリに保持されているグローバル項目値配列570を参照して、対象レコードに含まれる項目値、すなわち、GVL[1]=“North”を取得する。代替的な実施形態では、演算ユニットは、先に取得された項目値指定ポインタ=1を制御ユニットへ通知し、制御ユニットがグローバル項目値配列570から、通知された項目値指定ポインタによって指定される項目値を取得する。
引き続き、演算ユニットは、データ項目=“School”に関して実行した処理と同様の動作を、データ項目=“Age”に関して実行することにより、対象レコードに含まれる項目値=9を取得する。
[表形式データのコンパイル処理]
次に、本発明の一実施形態による表形式データからマルチコア型処理装置向けデータを作成するコンパイル処理について説明する。以下では、図5A乃至5Dに示されたデータ構造に関連して、本発明の一実施形態によるコンパイル処理が記述される。図8は、本発明の一実施形態によるコンパイル処理の概略的なフローチャートである。
順序情報作成:本実施形態によれば、最初に、ブロック番号配列、レコード順序番号配列及び項目値アクセス情報配列からなる順序情報がグローバルメモリ上に作成される(ステップ802)。上述のように、ブロック番号配列は制御ユニットによって作成され、レコード順序番号配列及び項目値アクセス情報配列は、複数台の演算ユニットによって並列的に作成され、グローバルメモリへ転送される。
ブロック内コンパイル:次に、複数台の演算ユニットが並列的に動作して、データ項目毎に、単一のブロックに含まれる担当レコードの原始レコード位置番号の順番に、ローカル項目値番号を格納するローカル項目値番号配列を作成し、グローバルメモリへ転送する(ステップ804)。このとき、同時に、複数台の演算ユニットは、担当レコードに含まれる項目値のうちの一意の値を所定の順序(たとえば、昇順又は降順)に格納するローカル項目値作業配列も作成し、グローバルメモリへ転送する。
ブロック間コンパイル1(マージ):次に、複数台の演算ユニットが並列的かつ階層的に動作して、データ項目毎に、2個のブロックに関連した、ブロック番号作業配列、ローカル項目値作業配列、及び、項目値がローカル項目値作業配列中に格納されている位置を指定するポインタがローカル項目値番号の順番に格納されているローカル項目値指定ポインタ作業配列からなる1対の組から、2個のブロックをマージしたブロックに関連した、ブロック番号作業配列、ローカル項目値作業配列、及び、ローカル項目値指定ポインタ作業配列からなる組を作成するマージ処理を実行する。演算ユニットは、最終的に1個のブロックにマージされるまでこのマージ処理を繰り返し実行し、最終的なブロック番号作業配列、最終的なローカル項目値作業配列、及び、最終的なローカル項目値指定ポインタ配列をグローバルメモリへ転送する(ステップ806)。最終的なローカル項目値作業配列はグローバル項目値配列に一致する。
ブロック間コンパイル2(分配):最後に、複数台の演算ユニットが並列的に動作して、データ項目毎に、最終的なローカル項目値指定ポインタ作業配列中の要素を最終的なブロック番号作業配列中の対応する要素によって指定されたブロック番号毎に分配し所定の順番に並べることにより、ローカル項目値番号によって表される項目値が、最終的なローカル項目値作業配列、すなわち、グローバル項目値配列中で格納されている位置を指定するポインタを格納する項目値指定ポインタ配列を作成し、グローバルメモリへ転送する(ステップ808)。
以上のステップにより、図5Aに示された表形式データから、図5Bに示されたブロック番号配列、レコード順序番号配列及び項目値アクセス情報配列と、図5Cに示された、データ項目=“School”に関するローカル項目値番号配列、項目値指定ポインタ配列及びグローバル項目値配列と、図5Dに示された、データ項目=“Age”に関するローカル項目値番号配列、項目値指定ポインタ配列及びグローバル項目値配列とがグローバルメモリ上に作成される。
このようなマルチコア型処理装置向けデータ構造を採用することにより、以下のような利点が得られる。
利点1:省メモリ
グローバル項目値配列、すなわち、値リストに同一値が重複して格納されないので、省メモリになる。
利点2:演算の高速性
ブロック間ソートでは、算出した順位が全てのブロックにとって有効である。
利点3:演算ユニット間通信によるグローバルメモリアクセスの低減
ブロック間ソートの第1フェーズが最も沢山のO(n*log(n))のグローバルメモリアクセスを必要とする。それ以外の処理のグローバルメモリアクセスはO(n)である。ブロック間通信を使うと、グローバルメモリアクセス量をちょうど1/3にすることができる。
以下、図5A乃至5Dに示された表形式データに関連して、本発明の一実施形態によるコンパイル処理をより詳細に説明する。図9A及び9Bは本発明の一実施形態による順序情報作成処理の説明図である。図9A及び9Bに示されたデータは図5A乃至5Dに示されたデータと同じデータであり、図9Aの表形式データ500から、図9Bの順序情報530が作成される。順序情報作成処理については上述の通りである。
図10A乃至10Cは、本発明の一実施形態によるブロック内コンパイル処理の概要図である。ブロック内コンパイル処理によれば、図10Aに示された表形式データから、図10B及び図10Cに示されたデータ項目=“School”に関する項目情報及びデータ項目=“Age”に関する項目情報が作成される。同図に示されているように、項目情報には、ローカル項目値番号配列VNoとローカル項目値作業配列wVLとが含まれている。ブロック内コンパイル処理は、Block−0、Block−1、・・・、Block−7というブロック毎に、各演算ユニットによって並列に実行される。
ここで、1つのブロックについてのブロック内コンパイル処理の一実施例について説明する。図11は、ブロック内コンパイル処理の一実施例の概要図である。本例では、データ項目=“School”に関する5行(レコード数=5)のブロックSchool(すなわち、原始レコード位置番号の順序に項目値が格納されている項目値配列School)から、ローカル項目値番号配列VNoとローカル項目値作業配列wVLを作成する。ローカル項目値作業配列wVLは、項目値配列Schoolに含まれている項目値から抽出された一意の項目値が所定の順序(たとえば、昇順又は降順)に格納されている値のリストである。一方、ローカル項目値番号配列VNoは、iが原始レコード位置番号を表すとき、元の項目値配列Schoolの要素であるSchool[i]とローカル項目値作業配列wVL[j]との間に、
School[i]=wVL[VNo[i]]
という関係が成り立つような配列である。なお、以下の処理は、演算ユニットが演算ユニットのローカルメモリを使用して実行する。
最初に、作業用データが初期化される。図12は、ブロック内コンパイル処理の初期化処理の説明図である。ローカル項目値番号配列VNoのサイズはブロックの行数に等しく、VNo[i]=i(i=0、1、2・・・)のように0から始まる整数で初期化される。変換配列TRはローカル項目値番号配列を変換するための配列であり、VNoと同じサイズである。ポインタ配列PTRは、項目値の並び順を表現する配列であり、配列PTRの要素は項目値の配列School中での項目値の位置を表している。ポインタ配列PTRと元の項目値配列Schoolのペアは、所定の順序に並べられた項目値のリストを表現している。作業ポインタ配列wPTRは、元の項目値配列Schoolと組み合わされて、ブロック内のペアを併合した後の項目値のリストを表現するために利用される。
ブロック内コンパイル処理は、ブロック内のペアを順番にマージすることによって実現される。たとえば、ブロック内に5個のレコードが存在するときに、最初に1番目のレコードと2番目のレコードのペア(第1ペア)と、3番目のレコードと4番目のレコードのペア(第2ペア)と、5番目のレコードのペア(ペアを構成する相手は存在しないが、便宜的に第3ペアと称する)の3組のペアの間で項目値の大小関係を比較する。これは、1段目のマージ処理である。次に、第3のペアと第2のペアの間の比較処理、及び、第1のペアの間(第1のペアと対になるペアは存在しない)の比較処理を実行する。これは、2段目のマージ処理である。このようにして、最後に1組のペアになるまで段階的にマージ処理を繰り返すことにより、最終的に、ブロック内でマージされたローカル項目値番号配列VNoとローカル項目値作業配列wVLが得られる。
図13A乃至13Gは、ブロック内コンパイル処理の1段目のマージ処理の説明図である。図13Aには、1番目のペアの1回目の比較処理、すなわち、School[PTR[0]]とSchool[PTR[1]]の比較処理が示されている。この例では、ポインタ配列PTRによって指示された項目値配列Schoolの2個の値(すなわち、ペア)の大小を比較し、小さい方を指示するポインタ配列PTRの要素と同じ位置にある変換配列TRの要素に作業ポインタ配列wPTRの添字を格納する。より具体的には、文字列の大小関係をアルファベット順に比較すると仮定するならば、
School[PTR[0]]=School[0]=“West”

School[PTR[1]]=School[1]=“South”
を比較すると、
“West”>“South”
であるため、
wPTR[0]=PTR[1]=1
TR[1]=0
となる。すなわち、i、jが0から始まる整数として、一般的に、
IF School[PTR[i]]>School[PTR[j]]
THEN wPTR[i]=PTR[j]
TR[j]=i
ELSE IF School[PTR[i]]<School[PTR[j]]
THEN wPTR[j]=PTR[i]
TR[i]=j
と記述できる。この処理では、小さい方が比較処理を通過し、大きい方はもう一度次の相手と比較される。
図13Bは、1番目のペアの2回目の比較処理の説明図である。1番目の2回目の比較処理の対象は、1回目の比較処理で小さい方ではない、と判定されたSchool[PTR[0]]である。このとき、比較相手は存在しないので、School[PTR[0]]は小さい方であると判定され、
wPTR[1]=PTR[0]=0
TR[0]=1
となる。
同様に、図13Cは2番目のペアの1回目の比較処理を示し、図13Dは2番目のペアの2回目の比較処理を示し、図13Eは3番目のペアの1回目の比較処理を示している。3番目のペアは、実際には、ペアを構成せず、比較対象が1つしか存在しないので、School[PTR[4]]はそのまま小さい方であると判定される。
図13F及び13Gは、ブロック内コンパイル処理の1段目のマージ処理の後処理の説明図である。後処理では、最初に、ローカル項目値番号配列VNoが更新される。具体的には、
VNo[i]=TR[VNo[i]]
によってローカル項目値番号が変換される。これは、ペアの比較処理によって、小さいと判定された項目値に対応するローカル項目値番号がローカル項目値番号配列VNo中で前方に配置されることを意味している。次に、ポインタ配列PTRが更新される。具体的には、
PTR[i]=wPTR[i]
に従って、ポインタ配列PTRに作業ポインタ配列wPTRを上書きすることによって、ポインタ配列PTRが更新される。
続いて、ブロック内コンパイル処理の2段目のマージ処理について説明する。2段目のマージ処理では、1段目のマージ処理で利用された3番目のペアと2番目のペアとによって、2段目の第1のペアが形成され、1段目の1番目のペア単独で2段目の第2のペアが形成される。本発明の好ましい実施形態によれば、このように、2段目のペアリングを1段目のペアリングと逆順に(すなわち、後方から)実行される。その理由は、処理量をバランスさせるためである。もちろん、1段目と同様に前方からペアリングを行っても構わない。
2段目のマージ処理では、たとえば、1段目のマージ処理の一方のペアの項目値がa1及びa2(a1<a2)であり、もう一方のペアの項目値がb1及びb2(b1<b2)であるならば、最初にa1とb1を比較し、次に、もし、a1<b1であるならば、a2とb1を比較することにより、a1、a2、b1、b2の大小関係が決定される。また、もし、b1=a2のように同一値が存在するならば、対応するポインタ配列PTRの要素の値が小さい方を選択することにより、重複を排除する。
図14A乃至14Fはブロック内コンパイル処理の2段目のマージ処理の説明図である。図14Aは、2段目のマージ処理の1番目のペアの1回目の比較処理を示している。同図の例では、1段目の第2ペアからのSchool[PTR[2]]=“South”と、第3ペアからのSchool[PTR[4]]=“South”の比較処理が行われる。本例では、同一値であるため、i、j(i<j)を0から始まる整数として、一般的に、
IF School[PTR[i]]=School[PTR[j]]
THEN wPTR[i]=PTR[i]
IF PTR[i]<PTR[j]
THEN TR[i]=PTR[i]
TR[j]=PTR[i]
ELSE TR[i]=PTR[j]
TR[j]=PTR[j]
に従って、
wPTR[2]=3
TR[2]=2
TR[4]=2
のように設定される。
図14Bは、2段目のマージ処理の1番目のペアの2回目の比較処理を示している。具体的には、School[PTR[3]]=“West”の単独の比較処理が行われる。比較相手が存在しないので、School[PTR[3]]は小さい方であると判定され、図13Bに関して説明した処理と同様の処理が行われる。
以下、図14Cは2段目のマージ処理の2番目のペアの1回目の比較処理を示し、図14Dは2段目のマージ処理の2番目のペアの2回目の比較処理を示している。何れの比較処理も比較相手が存在しないので、それぞれ、School[PTR[1]]及びSchool[PTR[0]]が小さい方であると判定され、上述と同様の処理が行われる。
図14E及び14Fは、ブロック内コンパイル処理の2段目のマージ処理の後処理の説明図である。1段目のマージ処理の後処理と同様に、2段目のマージ処理の後処理では、最初に、ローカル項目値番号配列VNoが更新される。具体的には、
VNo[i]=TR[VNo[i]]
によってローカル項目値番号が変換される。次に、
PTR[i]=wPTR[i]
に従って、ポインタ配列PTRに作業ポインタ配列wPTRを上書きすることによって、ポインタ配列PTRが更新される。
続いて、ブロック内コンパイル処理の3段目のマージ処理について説明する。3段目のマージ処理では、2段目のマージ処理で利用された1番目のペアと2番目のペアとによって、3段目の第1のペアが形成される。本発明の好ましい実施形態によれば、このように、3段目のペアリングは2段目のペアリングと逆順に(すなわち、後方から)実行される。本例では、1組のペアしか残っていないのでペアリングの順序を考慮する必要はない。
図15A乃至15Dは、ブロック内コンパイル処理の3段目のマージ処理の説明図である。3段目のマージ処理では、1段目及び2段目のマージ処理と同様の処理が行われる。但し、比較対象のデータの数は、一般に、段数が増加すると共に増加する。本例では、図15A及び(B)に示されているように、同一値が頻繁に出現するため、3段目においても比較処理は2回で終了する。図15C及び15Dには、3段目のマージ処理の後処理が示されている。このように、最終的なローカル項目値番号配列VNoと最終的なポインタ配列PTRとが得られる。ポインタ配列中、格納値が存在しない要素は*によって示されている。
最後に、本発明の一実施形態によるブロック内コンパイル処理によれば、最終的なローカル項目値作業配列wVL、すなわち、値リストが作成される。図16は、ブロック内コンパイル処理における値リスト作成処理の説明図である。値リストwVLは、ポインタ配列PTRの要素の値をポインタとして項目値配列Schoolから値を読み出し、ポインタ配列PTRの要素の順に値リストwVLに格納することによって得られる。具体的には、本例では、
wVL[0]=School[PTR[0]]=School[1]=“South”
wVL[1]=School[PTR[1]]=School[0]=“West”
である。
以上のブロック内コンパイル処理によって、ローカル項目値番号配列VNoと最終的なローカル項目値作業配列wVLが得られる。
次に、本発明の一実施形態によるブロック間コンパイル処理について説明する。ブロック間コンパイル処理は、複数台の演算ユニットが並列的かつ階層的に動作して、データ項目毎に、最終的に1個のブロックにマージされるまで、1対のブロックをマージする処理を繰り返し、最終的なブロック番号作業配列と最終的なローカル項目値作業配列と最終的なローカル項目値指定ポインタ配列とを生成するマージ処理と、マージ処理によって生成された最終的なブロック番号作業配列及び最終的なローカル項目値指定ポインタから、項目値指定ポインタ配列を生成する分配処理とを含む。マージ処理によって生成された最終的なローカル項目値作業配列は、グローバル項目値配列に一致する。
マージ処理では、各演算ユニットが、1対のブロックに関する情報をマージして、マージされたより高い層の1個のブロックに関する情報を生成する。よって、マージ処理は、複数台の演算ユニットの並列動作によって実現される。また、各演算ユニットは、同じ層に属するマージされたよりブロックの対に関する情報をマージし、マージされたさらに高い層の1個のブロックに関する情報を生成する。このようにマージ処理を並列的かつ階層的に繰り返すことにより、最終的に最上層の1個のブロックに関する情報が生成される。最上層の1個のブロックとは、レコード全体を含むブロックである。
たとえば、2−1台の演算ユニットが存在し、各演算ユニットが2個のブロックに関する情報を入力し、それらをマージして、1個のブロックに関する情報を出力すると仮定すると、各演算ユニットが1回ずつマージ処理を実行することによって、n段(層)のマージ処理が実現される。この場合、全演算プロセッサによる全データ通信量のうち、演算プロセッサがグローバルメモリとの間で行う通信が占める割合は、1/nである。演算ユニット間の通信量は、全データ通信量の(n−1)/nである。
図17A乃至17Cはブロック間コンパイル処理におけるマージ処理の概要図である。同図の例では、たとえば、少なくとも7台の演算ユニットSPU−0、SPU−1、・・・、SPU−6が、ブロックBlock−0からブロックBlock−127までの128ブロックのマージ処理を実行している。
図17Aの1回目の処理は、ブロックBlock−0からブロックBlock−7までのマージと、ブロックBlock−8からブロックBlock−15までのマージと、以下同様に、ブロックBlock−120からブロックBlock−127までのマージの16回のマージ、すなわち、8個のブロックを1個のブロックにマージする処理を16回に亘って逐次的に実行する。たとえば、1段目では、SPU−0がブロック0とブロック1をマージしてブロック0〜1を出力し、SPU−1がBlock−2とBlock−3をマージしてブロック2〜3を出力する。ここで、ブロック0〜1のようなブロックA〜Bという表記は、ブロックAからブロックBまでをマージした結果として得られるブロックを表している。次に、2段目において、SPU−4がSPU−0によってマージされたブロック0〜1と、SPU−1によってマージされたブロック2〜3とをマージして、ブロック0〜3を出力する。同様に、SPU−4はブロック4〜7を出力する。3段目のSPU−6は、SPU−4によって出力されたブロック0〜3と、SPU−5によって出力されたブロック4〜7とをマージして、ブロック0〜7を出力する。このような3段回のマージ処理が、さらに繰り返し実行されることによって、ブロック0〜7、ブロック8〜15、・・・、ブロック120〜127の16個のブロックが出力される。尚、図中、白抜きの矢印は、グローバルメモリと演算ユニット内のローカルメモリとの間の入出力を表し、黒色の矢印は、チップ内バスを経由する演算ユニット内のローカルメモリ間のデータ転送を表している。
図17Bの2回目の処理は、1回目の処理によって出力された16個のブロックのうち、ブロック0〜7、・・・、ブロック56〜63の8個のブロックをマージして、ブロック0〜63を出力し、ブロック64〜71、・・・、ブロック120〜127の8個のブロックをマージして、ブロック64〜127を出力する。
さらに、図17Cの3回目の処理では、SPU−0が、ブロック0〜63とブロック64〜127をマージして、最終的な1個のブロック0〜127を出力する。
次に、本発明の一実施形態によるブロック間コンパイルにおけるマージ処理をより詳細に説明する。図18A及び18Bは、本発明の一実施形態によるブロック間コンパイル処理が適用されるブロック内コンパイル処理の結果の説明図である。たとえば、図18Aは、データ項目=“School”に関して、ブロック内コンパイル処理の結果として生成された、ブロック0からブロック7までの8個のブロックの項目情報を示し、図18Bは、データ項目=“Age”に関して生成されたブロックの項目情報を示している。項目情報は、ローカル項目値番号配列VNoと、ブロック番号作業配列BlkNoと、ローカル項目値指定ポインタ作業配列LVLと、ローカル項目値作業配列wVLとを含む。本例は、図17Aに示されたブロック0からブロック7までの8個のブロックから、SPU−0からSPU−6までの7台の演算ユニットを使用して、1個のブロック0〜7を生成するマージ処理に相当する。
最初に、SPU−0がブロック0とブロック1をマージする例を説明する。図19A乃至19Cは、ブロック間コンパイル処理における1段目のマージ処理の説明図である。SPU−0は、ブロック0及びブロック1に関する項目情報をグローバルメモリからローカルメモリへ転送すると共に、さらなるブロック番号作業配列BlkNo’、さらなるローカル項目値指定ポインタ作業配列LVL’、及び、さらなるローカル項目値作業配列wVL’を初期化する。また、ローカル項目値作業配列wVLからの読み出し用ポインタも初期化される。以下、特に断らない限り、動作の主体は演算ユニットSPU−0である。
次に、両方のブロックからのローカル項目値作業配列wVLの格納値が比較され、小さい方の格納値が、さらなるローカル項目値作業配列wVL’へ、先頭から順番に転送される。小さい方の格納値に対応するブロック番号作業配列BlkNoの内容がさらなるブロック番号作業配列BlkNo’へ転送される。たとえば、配列LVLに同じ値が連続して格納されているならば、その同じ値が格納されている回数だけブロック番号作業配列BlkNoからさらなるブロック番号作業配列BlkNo’への転送が繰り返される。そして、さらなるブロック番号作業配列BlkNo’へ値が書き込まれた回数と同じ個数の順序番号(初期値=0)がさらなるローカル項目値指定ポインタ作業配列LVL’に格納される。
最後に、小さい方の値が格納されていたローカル項目値番号作業配列wVLからの読み出し用ポインタが1つ後へシフトさせられる。
もし、両方のブロックからのローカル項目値作業配列wVLの格納値が同一であるならば、いずれかの格納値がさらなるローカル項目値作業配列wVL’へ転送される。次に、両方のブロックからのブロック番号作業配列BlkNoの内容のうち、値の小さい方のブロック番号がさらなるブロック番号作業配列BlkNo’へ転送される。この場合も、配列LVLに同じ値が連続して格納されているならば、その個数分だけブロック番号作業配列BlkNoからさらなるブロック番号作業配列BlkNo’への転送が繰り返される。続いて、両方のブロックからのブロック番号作業配列BlkNoの内容のうち、値の大きい方のブロック番号もまた同様に、さらなるブロック番号作業配列BlkNo’へ転送される。ローカル項目値指定ポインタ作業配列に同じ値が連続して格納されているならば、その個数分だけブロック番号の転送が繰り返されることも同様である。そして、さらなるブロック番号作業配列BlkNo’へ値が書き込まれた回数と同じ個数の順序番号がさらなるローカル項目値指定ポインタ作業配列LVL’に格納される。最後に、小さい方の値が格納されていたローカル項目値番号作業配列wVLからの読み出し用ポインタが1つ後へシフトさせられる。
図19A乃至19Cに戻ると、図19Aでは、ブロック0のwVL[0]=“South”とブロック1のwVL[0]=“North”とが比較される。“North”の方が小さいので、wVL’[0]=wVL[0]=“North”のように、項目値が転送される。そして、ブロック1のブロック番号作業配列の内容BlkNo[0]=1が、さらなるブロック番号作業配列BlkNo’[0]へ転送され、すなわち、BlkNo’[0]=1となる。LVL’[0]には順序番号=0が格納される。その後、ブロック1側のwVLの読み出し用ポインタが後へシフトさせられる。
同様に、図19Bでは、ブロック0のwVL[0]とブロック1のwVL[1]とが比較される。両方の値は、共に“South”であり、一致する。よって、wVL’[1]=“South”、BlkNo’[1]=0、BlkNo’[2]=1となる。さらに、LVL’[1]=1、LVL’[2]=1のように設定される。最後に、ブロック1側と、ブロック2側の両方のwVLからの読み出し用ポインタが進められる。
同様に、図19Cでは、ブロック0のwVL[1]とブロック1のwVL[2]とが比較される。両方の値は一致するので、図19Bと同様の処理が行われる。
このようにして、図19Bに示されるように、SPU−0がブロック0とブロック1をマージすることにより、さらなるブロック番号配列BlkNo’と、さらなる項目値指定ポインタ配列LVL’と、さらなる項目値作業配列wVL’とからなる組が生成される。
以上の処理により、ブロック0とブロック1の2つのブロックからのBlkNo、LVL及びwVLの組のペアは、1組のBlkNo’、LVL’及びwVL’に変換されていることがわかる。この処理を並列的かつ階層的に繰り返すことにより、BlkNo、LVL及びwVLの多数の組が、1組のBlkNo’、LVL’及びwVL’にマージされ得ることが明らかである。ここで、注意すべき点は、図19A乃至19Cに関して説明した操作は、シーケンシャルアクセスだけを使って実現できることである。これにより、ブロック番号配列BlkNo、ローカル項目値指定ポインタ作業配列LVL、及び、ローカル項目値作業配列wVL’のサイズが大きくなっても、演算ユニット内のローカルメモリで処理可能である。また、さらなるブロック番号配列BlkNo’は、さらなるローカル項目値指定ポインタ作業配列LVL’に格納される値が同一である限り、必ず昇順になることに注意すべきである。
今度は、演算ユニットSPU−4が、SPU−0から出力されたブロック0〜1と、SPU−11から出力されたブロック2〜3を1つのブロックにマージする2段目のマージ処理について説明する。図20A乃至20Dは、本発明の一実施形態によるブロック間コンパイルにおける2段目のマージ処理の説明図である。2段目のマージ処理は、入力される情報が他の演算ユニットのローカルメモリから転送される点を除いて、1段目のマージ処理と同様である。この処理を簡単に説明すると、最初、2つのブロックからのwVLの読み出し用ポインタが先頭に設定される。wVLから値を読み出して、比較した後、大きくない方の値がwVL’に設定される。その後、BlkNoからBlkNo’へのブロック番号の転送と、LVL’への順序番号の書き込みが行われる。最後に、大きくない方の値が読み出されたwVL’からの読み出し用ポインタが進められる。図20A、20B、20C及び20Dには、この処理の過程と、得られたさらなるブロック番号配列BlkNo’と、さらなるローカル項目値指定ポインタ作業配列LVL’と、ローカル項目値作業配列wVL’とが示されている。
ブロック間コンパイル処理の1段目のマージ処理と2段目のマージ処理を終えると、ブロック0からブロック3までがマージされたブロック0〜3と、ブロック4からブロック7までがマージされたブロック4〜7が得られる。SPU−6は、SPU−4によって出力されるブロック0〜3と、SPU−5によって出力されるブロック4〜7とを受信し、2つのブロックのマージ処理を同様に実行する。これにより、最終的な1個のブロックであるBlock0〜7が得られる。図21A及び21Bは、本発明の一実施形態によるブロック間コンパイル処理における3段目のマージ処理の結果を説明する図である。図21Aは、データ項目「School」に関するマージ前のブロック毎の情報を表し、図21Bは、データ項目「School」に関するブロック間コンパイルによるマージ処理の結果を表している。
ここで、最終的なさらなるローカル項目値作業配列wVL’は、グローバル項目値配列に一致することに注意すべきである。図21Bのブロック番号作業配列BlkNo’と、ローカル項目値指定ポインタ配列LVL’と、ローカル項目値作業配列wVL’との組と、図21Aのブロック毎の情報との間の関連性について説明する。図21Aは、たとえば、ブロック0の情報を参照すると、ブロック0内に含まれる項目値の値リストwVLと、ブロック0内での項目値のランクを表している。つまり、ブロック0において、ランク=0の項目値は”South”であり、ランク=1の項目値は“West”である。一方、図21Bを参照すると、BlkNo’[0]=2と、LVL’[0]=0と、wVL[LVL[0]]=“East”は、ブロック番号=2には、項目値=“East”が含まれていることがわかる。さらに、BlkNo’[0]は、配列BlkNo’の中でブロック番号=2が最初に出現する要素であることから、ブロック番号=2のブロックにおける値リストの先頭の項目値は“East”であることもわかる。また、LVL’を先頭から走査すると、LVL’[0]=LVL’[1]=LVL’[2]=LVL’[3]=0から、BlkNo’[0]=2とBlkNo’[1]=4とBlkNo’[2]=5とBlkNo’[3]=7の4個のブロック、すなわち、ブロック2、ブロック4、ブロック5及びブロック7のブロックにおける値リストの先頭の項目値は、wVL’「0」=“East”であることもわかる。
本発明の一実施形態によるブロック間コンパイル処理は、マージ処理の後に、分配処理を実行する。分配処理では、複数台の演算ユニットが並列的に動作して、データ項目毎に、最終的なローカル項目値指定ポインタ作業配列中の要素を最終的なブロック番号作業配列中の対応する要素によって指定されたブロック番号毎に分配し所定の順番に並べることにより、ローカル項目値番号によって表される上記項目値が最終的なローカル項目値作業配列(すなわち、グローバル項目値配列)中で格納されている位置を指定するポインタを格納する項目値指定ポインタ配列を作成しグローバルメモリへ転送する。たとえば、図21Aに示された例では、ブロック0内のLVL[0]=0によって指定される項目値wVL[0]=”South”がグローバル項目値配列wVL’の何番目の要素であるかを指定する項目値ポインタ配列が獲得される。
このため、本発明の一実施形態によるブロック間コンパイル処理における分配では、図21Bに示されたデータが取得されているならば、たとえば、
for (i=0;i<19;i++) {
index[i]=0;

for (i=0;i<19;i++) {
LVL[BlkNo’[i]][index[i]]=LVL’[i];
index[i]++;

によって記述される操作にしたがって、ローカル項目値指定ポインタをブロック番号毎に分配される。これにより得られた配列LVLは、まさに項目値指定ポインタ配列である。上記の分配処理は1台のプロセッサで操作を実施する場合の操作に対応している。しかし、本発明の一実施形態によれば、好ましくは、複数台の演算ユニットを用いて、配列LVLが生成される。そのため、ブロック番号作業配列BlkNo’とローカル項目値指定ポインタ作業配列LVL’を分割して、複数台の演算ユニットに割り当てる。次に、各演算ユニットが、担当するBlkNo’とLVL’とに関して、ブロック番号毎にローカル項目値指定ポインタを分配する。最後に、各演算ユニットに分散して保持されているローカル項目値指定ポインタを、ブロック番号毎に1つに統合する。これにより、項目値指定ポインタ配列LVLが得られる。
図22は、本発明の一実施形態によるブロック間コンパイル処理における分配処理の説明図である。同図に示されるように、配列BlkNo’と配列LVL’は、複数台の演算ユニット(本例では、SPU−0からSPU−7の8台の演算ユニット)に割り当てられる。たとえば、SPU−0は、0≦i≦2の範囲内で、BlkNo’[i]及びLVL’[i]の処理を担当する。BlkNo’[0]=2であり、LVL’[0]=0であるので、SPU−0のローカルメモリ内のwLVL−2[0]にLVL’[0]=0を設定する。同様に、SPU−1は、3≦i≦4の範囲内で、BlkNo’[i]及びLVL’[i]の処理を担当する。BlkNo’[3]=7であり、LVL’[3]=0であるので、SPU−1のローカルメモリ内のwLVL−2[0]にLVL’[0]=0を設定する。この処理をすべての演算ユニットが並列的に実行される。本例では、演算ユニット毎に、ブロック0からブロック7までの配列wLVL−0からwLVL−7が使用されている。この場合、演算ユニットの台数(=8個)倍の作業領域がローカルメモリとグローバルメモリに確保されることになる。この作業領域をコンパクトにするため、リンクリストを使用しても構わない。重要なことは、作業領域がローカルメモリに格納できる間は、その作業領域をローカルメモリに収容し、作業領域がローカルメモリに収容できなくことが分かった時点で、ローカルメモリ中の作業領域の全部又は一部をある程度まとめてグローバルメモリへ転送することによって、グローバルメモリへのメモリアクセスを一括化することが可能である。
図23は、本発明の一実施形態によるブロック間コンパイル処理における分配処理の結果を示す図である。たとえば、ブロック番号1に関して、SPU−1のwLVL−1に値1が格納され、SPU−4のwLVL−1に値2が格納され、SPU−6のwLVL−1に値3が格納されている。これらを1つに結合することによって、ブロック1に関する項目値指定ポインタ配列LVL−1が得られる。具体的には、ポインタ値の小さい順に、すなわち、SPU−0からSPU−7の順に、wLVL−1に格納されている値を取り出し、その値をLVL−1の先頭から順に格納すればよい。この操作は、たとえば、いずれか1台の演算ユニット、又は、制御ユニットが実行可能であるが、ブロック番号毎に、複数台の演算ユニットが並列的に、WLVLから値を取り出し、LVLへ書き込むようにしてもよい。
図22及び23の例では、ブロック数が増加すると、ローカルメモリ上の作業領域も増大する。そのため、本発明の代替的な実施形態では、特に、ブロック数が多い場合に、処理を効率化するために、複数のブロックをグループ化した後に、グループ毎に分配処理を実施する。たとえば、ブロック番号を4で除算することにより、上位ブロック番号と、下位ブロック番号に分離し(グループ化し)、上位ブロック番号と下位ブロック番号に関して別々に分配処理を適用する。具体的には、ブロック間コンパイル処理におけるマージ処理によって得られたブロック番号作業配列BlkNo’とローカル項目値指定ポインタ作業配列LVL’の組から、上位ブロック番号用のブロック番号作業配列BlkNo’とローカル項目値指定ポインタ作業配列LVL’の組と、下位ブロック番号用のブロック番号作業配列BlkNo’とローカル項目値指定ポインタ作業配列LVL’の組が生成される。この処理もまた、複数台の演算ユニットが並列的に動作して、実行可能である。
図24は、本発明の代替的な実施形態によるブロック間コンパイル処理におけるブロックグループ化処理の説明図である。たとえば、BlkNo’[0]〜BlkNo’[2]はSPU−0の担当範囲に属する。BlkNo’[0]=2は、3以下の値であり、下位ブロック番号に含まれるので、SPU−0は、ローカルメモリ中の下位ブロック番号用のBlkNo及びLVL−1にBlkNo[0]=BlkNo`[0]及びLVL−0[0]=LVL’[0]を設定する。一方、SPU−3は、BlkNo’[13]〜BlkNo’[14]を担当する。BlkNo’[13]=6は、4以上の値であり、上位ブロック番号に含まれるので、SPU−3は、ローカルメモリ中の上位ブロック番号用のBlkNo及びLVL−1にBlkNo[0]=BlkNo`[13]及びLVL−1[0]=LVL’[13]を設定する。このような処理を続けることにより、ブロックがグループ化される。
図25は、本発明の代替的な実施形態によるブロック間コンパイル処理におけるブロックグループ化処理の結果を示す図である。たとえば、SPU−0からSPU−7が作成した下位ブロック番号用のBlkNoとLVL−0の要素を順番に抽出し、BlkNo’とLVL’の先頭から順に格納すると、下位ブロック番号用のBlkNo’及びLVL’が得られる。同様に、SPU−0からSPU−7が作成した上位ブロック番号用のBlkNoとLVL−1の要素を順番に抽出し、BlkNo’とLVL’の先頭から順に格納すると、上位ブロック番号用のBlkNo’及びLVL’が得られる。この結合処理は、たとえば、制御ユニットによって実行してもよく、或いは、演算ユニットによって実行してもよい。このようにして得られた、下位ブロック番号用のBlkNo’及びLVL’と、上位ブロック番号用のBlkNo’及びLVL’は、図22を参照して説明した、本発明の一実施形態によるブロック間コンパイル処理における分配処理が適用され、ブロック番号毎に項目値指定ポインタ配列が得られる。
本発明は、以上の実施の形態に限定されることなく、特許請求の範囲に記載された発明の範囲内で、種々の変更が可能であり、それらも本発明の範囲内に包含されるものであることは言うまでもない。

Claims (13)

  1. 専用のローカルメモリを含む複数台の演算ユニットと、
    上記複数台の演算ユニットに接続されているグローバルメモリと、
    上記複数台の演算ユニットを接続するバスと、
    上記グローバルメモリ及び上記複数台の演算ユニットに接続されている少なくとも1台の制御ユニットと、
    を備えるマルチコア型処理装置において、
    データ項目に対応した項目値を含むレコードの配列として表され、上記複数台の演算ユニットによって分担して操作される表形式データを、上記グローバルメモリに構築する方法であって、
    上記制御ユニットが、上記レコードを各演算ユニットが担当する担当レコードを含むブロックに分割し、各レコードに対応するブロック番号を上記表形式データ中の原始レコード位置番号の順番に格納するブロック番号配列を作成し、上記グローバルメモリに格納するステップと、
    上記複数台の演算ユニットが並列的に動作して、上記担当レコードの上記原始レコード位置番号をレコード順序番号の順番に格納するレコード順序番号配列を各演算ユニット内の上記ローカルメモリ上に作成し、上記グローバルメモリへ転送するステップと、
    上記複数台の演算ユニットが並列的に動作して、上記担当レコードに含まれる上記項目値にアクセスする項目値アクセス情報を上記レコード順序番号の順番に格納する項目値アクセス情報配列を各演算ユニット内の上記ローカルメモリ上に作成し、上記グローバルメモリへ転送するステップと、
    上記複数台の演算ユニットが並列的に動作して、上記担当レコードに含まれる上記項目値が上記項目値アクセス情報を用いてアクセスされるように、データ項目毎に上記項目値を各演算ユニット内の上記ローカルメモリ上に展開し、上記展開された項目値を上記グローバルメモリへ転送するステップと、
    を備える方法。
  2. 上記制御ユニットが、上記グローバルメモリ上の上記ブロック番号配列を参照して、所定のレコードが含まれるブロックのブロック番号と上記所定のレコードを担当する上記演算ユニットとを決定するステップと、
    上記制御ユニットが、上記決定された演算ユニットへ上記所定のレコードのレコード順序番号を通知するステップと、
    上記レコード順序番号を通知された演算ユニットが、当該演算ユニットの上記担当レコードに関する上記レコード順序番号配列及び前記項目値アクセス情報配列を、上記グローバルメモリから当該演算ユニットの上記ローカルメモリへ転送するステップと、
    上記レコード順序番号を通知された演算ユニットが、上記通知されたレコード順序番号が格納されている位置を上記転送されたレコード順序番号配列中で特定するステップと、
    上記レコード順序番号を通知された演算ユニットが、上記特定された位置によって指定される項目値アクセス情報を上記転送された項目値アクセス情報配列中で特定するステップと、
    上記レコード順序番号を通知された演算ユニットが、データ項目毎に、上記グローバルメモリに保持されている上記項目値の中から、上記特定された項目値アクセス情報によって指定される項目値を取得し、上記取得された項目値を上記グローバルメモリへ転送するステップと、
    をさらに備える、
    請求項1に記載の方法。
  3. 上記複数台の演算ユニットが並列的に動作して、データ項目毎に上記項目値を各演算ユニット内の上記ローカルメモリに展開し、上記展開された項目値を上記グローバルメモリに格納するステップが、
    上記複数台の演算ユニットが並列的に動作して、データ項目毎に、単一のブロックに含まれる上記項目値を上記グローバルメモリから上記ローカルメモリへ転送し、上記単一のブロックに含まれる項目値のうちの一意の値を所定の順序で格納するローカル項目値作業配列、及び、上記単一のブロックに含まれる上記担当レコードの上記原始レコード位置番号の順番に、上記担当レコードに含まれる項目値が上記ローカル項目値作業配列中に格納されている位置を指定するローカル項目値番号を格納するローカル項目値番号配列を上記ローカルメモリ上に作成し、上記グローバルメモリへ転送するステップと、
    上記複数台の演算ユニットが並列的に動作して、データ項目毎に、1対のブロックに関連した、上記ブロックに含まれる上記項目値のうちの一意の値に対応する上記ブロック番号を格納したブロック番号作業配列と、上記ローカル項目値作業配列と、上記ブロックに含まれる上記項目値が上記ローカル項目値作業配列中で格納されている位置を指定するポインタを格納するローカル項目値指定ポインタ作業配列とからなる1対の組から、上記1対のブロックがマージされたブロックに関連した、さらなるブロック番号作業配列と、さらなるローカル項目値作業配列と、さらなるローカル項目値指定ポインタ作業配列とからなる組を作成するマージ処理を実行するステップと、
    上記複数台の演算ユニットが並列的かつ階層的に動作して、データ項目毎に、最終的な1個のブロックにマージされるまで上記マージ処理を繰り返し、得られた最終的なブロック番号作業配列と、最終的なローカル項目値作業配列と、最終的なローカル項目値指定ポインタ作業配列とを上記グローバルメモリへ転送するステップと、
    上記複数台の演算ユニットが並列的に動作して、データ項目毎に、上記最終的なローカル項目値指定ポインタ作業配列中の要素を上記最終的なブロック番号作業配列中の対応する要素によって指定されたブロック番号毎に分配し所定の順番に並べることにより、上記ローカル項目値番号によって表される上記項目値が、上記項目値を所定の順序で格納するグローバル項目値配列に一致する、上記最終的なローカル項目値作業配列中で格納されている位置を指定するポインタを格納する項目値指定ポインタ配列を作成し上記グローバルメモリへ転送するステップと、
    を含む、
    請求項1に記載の方法。
  4. 専用のローカルメモリを含む複数台の演算ユニットと、
    上記複数台の演算ユニットに接続されているグローバルメモリと、
    上記複数台の演算ユニットを接続するバスと、
    上記グローバルメモリ及び上記複数台の演算ユニットに接続されている少なくとも1台の制御ユニットと、
    を備え、
    データ項目に対応した項目値を含むレコードの配列として表され、上記複数台の演算ユニットによって分担して操作される表形式データを上記グローバルメモリに構築するマルチコア型処理装置であって、
    上記制御ユニットが、上記レコードを各演算ユニットが担当する担当レコードを含むブロックに分割し、各レコードに対応するブロック番号を上記表形式データ中の原始レコード位置番号の順番に格納するブロック番号配列を作成し、上記グローバルメモリに格納する手段を含み、
    各演算ユニットが、
    他の演算ユニットと並列的に動作して、上記担当レコードの上記原始レコード位置番号をレコード順序番号の順番に格納するレコード順序番号配列を各演算ユニット内の上記ローカルメモリ上に作成し、上記グローバルメモリへ転送する手段と、
    他の演算ユニットと並列的に動作して、上記担当レコードに含まれる上記項目値にアクセスする項目値アクセス情報を上記レコード順序番号の順番に格納する項目値アクセス情報配列を各演算ユニット内の上記ローカルメモリ上に作成し、上記グローバルメモリへ転送する手段と、
    他の演算ユニットと並列的に動作して、上記担当レコードに含まれる上記項目値が上記項目値アクセス情報を用いてアクセスされるように、データ項目毎に上記項目値を各演算ユニット内の上記ローカルメモリ上に展開し、上記展開された項目値を上記グローバルメモリへ転送する手段と、
    を含む、
    マルチコア型処理装置。
  5. 上記制御ユニットが、
    上記グローバルメモリ上の上記ブロック番号配列を参照して、所定のレコードが含まれるブロックのブロック番号と上記所定のレコードを担当する上記演算ユニットとを決定する手段と、
    上記決定された演算ユニットへ上記所定のレコードのレコード順序番号を通知する手段と、
    をさらに含み、
    上記レコード順序番号を通知された演算ユニットが、
    当該演算ユニットの上記担当レコードに関する上記レコード順序番号配列及び前記項目値アクセス情報配列を、上記グローバルメモリから当該演算ユニットの上記ローカルメモリへ転送する手段と、
    上記通知されたレコード順序番号が格納されている位置を上記転送されたレコード順序番号配列中で特定する手段と、
    上記特定された位置によって指定される項目値アクセス情報を上記転送された項目値アクセス情報配列中で特定する手段と、
    データ項目毎に、上記グローバルメモリに保持されている上記項目値の中から、上記特定された項目値アクセス情報によって指定される項目値を取得し、上記取得された項目値を上記グローバルメモリへ転送する手段と、
    をさらに含む、
    請求項4に記載のマルチコア型処理装置。
  6. 各演算ユニットが、
    他の演算ユニットと並列的に動作して、データ項目毎に上記項目値を各演算ユニット内の上記ローカルメモリに展開し、上記展開された項目値を上記グローバルメモリに格納する手段と、
    他の演算ユニットと並列的に動作して、データ項目毎に、単一のブロックに含まれる上記項目値を上記グローバルメモリから上記ローカルメモリへ転送し、上記単一のブロックに含まれる項目値のうちの一意の値を所定の順序で格納するローカル項目値作業配列、及び、上記単一のブロックに含まれる上記担当レコードの上記原始レコード位置番号の順番に、上記担当レコードに含まれる項目値が上記ローカル項目値作業配列中に格納されている位置を指定するローカル項目値番号を格納するローカル項目値番号配列を上記ローカルメモリ上に作成し、上記グローバルメモリへ転送する手段と、
    他の演算ユニットと並列的に動作して、データ項目毎に、1対のブロックに関連した、上記ブロックに含まれる上記項目値のうちの一意の値に対応する上記ブロック番号を格納したブロック番号作業配列と、上記ローカル項目値作業配列と、上記ブロックに含まれる上記項目値が上記ローカル項目値作業配列中で格納されている位置を指定するポインタを格納するローカル項目値指定ポインタ作業配列とからなる1対の組から、上記1対のブロックがマージされたブロックに関連した、さらなるブロック番号作業配列と、さらなるローカル項目値作業配列と、さらなるローカル項目値指定ポインタ作業配列とからなる組を作成するマージ処理を実行する手段と、
    他の演算ユニットと並列的かつ階層的に動作して、データ項目毎に、最終的な1個のブロックにマージされるまで上記マージ処理を繰り返し、得られた最終的なブロック番号作業配列と、最終的なローカル項目値作業配列と、最終的なローカル項目値指定ポインタ作業配列とを上記グローバルメモリへ転送する手段と、
    他の演算ユニットと並列的に動作して、データ項目毎に、上記最終的なローカル項目値指定ポインタ作業配列中の要素を上記最終的なブロック番号作業配列中の対応する要素によって指定されたブロック番号毎に分配し所定の順番に並べることにより、上記ローカル項目値番号によって表される上記項目値が、上記項目値を所定の順序で格納するグローバル項目値配列に一致する、上記最終的なローカル項目値作業配列中で格納されている位置を指定するポインタを格納する項目値指定ポインタ配列を作成し上記グローバルメモリへ転送する手段と、
    をさらに含む、
    請求項4に記載のマルチコア型処理装置。
  7. 専用のローカルメモリを含む複数台の演算ユニットと、
    上記複数台の演算ユニットに接続されているグローバルメモリと、
    上記複数台の演算ユニットを接続するバスと、
    上記グローバルメモリ及び上記複数台の演算ユニットに接続されている少なくとも1台の制御ユニットと、
    を備えるコンピュータにロードされ、データ項目に対応した項目値を含むレコードの配列として表され、上記複数台の演算ユニットによって分担して操作される表形式データを、上記グローバルメモリに構築する処理を、上記コンピュータに実行させるコンピュータ読み取り可能なプログラムであって、前記処理が、
    上記制御ユニットが、上記レコードを各演算ユニットが担当する担当レコードを含むブロックに分割し、各レコードに対応するブロック番号を上記表形式データ中の原始レコード位置番号の順番に格納するブロック番号配列を作成し、上記グローバルメモリに格納するステップと、
    上記複数台の演算ユニットが並列的に動作して、上記担当レコードの上記原始レコード位置番号をレコード順序番号の順番に格納するレコード順序番号配列を各演算ユニット内の上記ローカルメモリ上に作成し、上記グローバルメモリへ転送するステップと、
    上記複数台の演算ユニットが並列的に動作して、上記担当レコードに含まれる上記項目値にアクセスする項目値アクセス情報を上記レコード順序番号の順番に格納する項目値アクセス情報配列を各演算ユニット内の上記ローカルメモリ上に作成し、上記グローバルメモリへ転送するステップと、
    上記複数台の演算ユニットが並列的に動作して、上記担当レコードに含まれる上記項目値が上記項目値アクセス情報を用いてアクセスされるように、データ項目毎に上記項目値を各演算ユニット内の上記ローカルメモリ上に展開し、上記展開された項目値を上記グローバルメモリへ転送するステップと、
    を含むプログラム。
  8. 上記制御ユニットが、上記グローバルメモリ上の上記ブロック番号配列を参照して、所定のレコードが含まれるブロックのブロック番号と上記所定のレコードを担当する上記演算ユニットとを決定するステップと、
    上記制御ユニットが、上記決定された演算ユニットへ上記所定のレコードのレコード順序番号を通知するステップと、
    上記レコード順序番号を通知された演算ユニットが、当該演算ユニットの上記担当レコードに関する上記レコード順序番号配列及び前記項目値アクセス情報配列を、上記グローバルメモリから当該演算ユニットの上記ローカルメモリへ転送するステップと、
    上記レコード順序番号を通知された演算ユニットが、上記通知されたレコード順序番号が格納されている位置を上記転送されたレコード順序番号配列中で特定するステップと、
    上記レコード順序番号を通知された演算ユニットが、上記特定された位置によって指定される項目値アクセス情報を上記転送された項目値アクセス情報配列中で特定するステップと、
    上記レコード順序番号を通知された演算ユニットが、データ項目毎に、上記グローバルメモリに保持されている上記項目値の中から、上記特定された項目値アクセス情報によって指定される項目値を取得し、上記取得された項目値を上記グローバルメモリへ転送するステップと、
    をさらに含む、
    請求項7に記載のプログラム。
  9. 上記複数台の演算ユニットが並列的に動作して、データ項目毎に上記項目値を各演算ユニット内の上記ローカルメモリに展開し、上記展開された項目値を上記グローバルメモリに格納するステップが、
    上記複数台の演算ユニットが並列的に動作して、データ項目毎に、単一のブロックに含まれる上記項目値を上記グローバルメモリから上記ローカルメモリへ転送し、上記単一のブロックに含まれる項目値のうちの一意の値を所定の順序で格納するローカル項目値作業配列、及び、上記単一のブロックに含まれる上記担当レコードの上記原始レコード位置番号の順番に、上記担当レコードに含まれる項目値が上記ローカル項目値作業配列中に格納されている位置を指定するローカル項目値番号を格納するローカル項目値番号配列を上記ローカルメモリ上に作成し、上記グローバルメモリへ転送するステップと、
    上記複数台の演算ユニットが並列的に動作して、データ項目毎に、1対のブロックに関連した、上記ブロックに含まれる上記項目値のうちの一意の値に対応する上記ブロック番号を格納したブロック番号作業配列と、上記ローカル項目値作業配列と、上記ブロックに含まれる上記項目値が上記ローカル項目値作業配列中で格納されている位置を指定するポインタを格納するローカル項目値指定ポインタ作業配列とからなる1対の組から、上記1対のブロックがマージされたブロックに関連した、さらなるブロック番号作業配列と、さらなるローカル項目値作業配列と、さらなるローカル項目値指定ポインタ作業配列とからなる組を作成するマージ処理を実行するステップと、
    上記複数台の演算ユニットが並列的かつ階層的に動作して、データ項目毎に、最終的な1個のブロックにマージされるまで上記マージ処理を繰り返し、得られた最終的なブロック番号作業配列と、最終的なローカル項目値作業配列と、最終的なローカル項目値指定ポインタ作業配列とを上記グローバルメモリへ転送するステップと、
    上記複数台の演算ユニットが並列的に動作して、データ項目毎に、上記最終的なローカル項目値指定ポインタ作業配列中の要素を上記最終的なブロック番号作業配列中の対応する要素によって指定されたブロック番号毎に分配し所定の順番に並べることにより、上記ローカル項目値番号によって表される上記項目値が、上記項目値を所定の順序で格納するグローバル項目値配列に一致する、上記最終的なローカル項目値作業配列中で格納されている位置を指定するポインタを格納する項目値指定ポインタ配列を作成し上記グローバルメモリへ転送するステップと、
    を含む、
    請求項7に記載のプログラム。
  10. 専用のローカルメモリを含む複数台の演算ユニットと、
    上記複数台の演算ユニットに接続されているグローバルメモリと、
    上記複数台の演算ユニットを接続するバスと、
    上記グローバルメモリ及び上記複数台の演算ユニットに接続されている少なくとも1台の制御ユニットと、
    を備えるコンピュータにロードされ、データ項目に対応した項目値を含むレコードの配列として表され、上記複数台の演算ユニットによって分担して操作される表形式データを、上記グローバルメモリに構築する請求項1乃至3のうち何れか1項に記載の方法を上記コンピュータに実行させるためのコンピュータプログラムが記録された記憶媒体。
  11. 上記制御ユニットが、上記グローバルメモリ上の上記ブロック番号配列を参照して、所定のレコードが含まれるブロックのブロック番号と上記所定のレコードを担当する上記演算ユニットとを決定するステップと、
    上記制御ユニットが、上記決定された演算ユニットへ上記所定のレコードのレコード順序番号を通知するステップと、
    上記レコード順序番号を通知された演算ユニットが、当該演算ユニットの上記担当レコードに関する上記レコード順序番号配列及び前記項目値アクセス情報配列を、上記グローバルメモリから当該演算ユニットの上記ローカルメモリへ転送するステップと、
    上記レコード順序番号を通知された演算ユニットが、上記通知されたレコード順序番号が格納されている位置を上記転送されたレコード順序番号配列中で特定するステップと、
    上記レコード順序番号を通知された演算ユニットが、上記特定された位置によって指定される項目値アクセス情報を上記転送された項目値アクセス情報配列中で特定するステップと、
    上記レコード順序番号を通知された演算ユニットが、データ項目毎に、上記グローバルメモリから、上記特定された項目値アクセス情報によって指定される上記項目値を取得するステップと、
    をさらに備える、
    請求項1に記載の方法。
  12. 上記制御ユニットが、
    上記グローバルメモリ上の上記ブロック番号配列を参照して、所定のレコードが含まれるブロックのブロック番号と上記所定のレコードを担当する上記演算ユニットとを決定する手段と、
    上記決定された演算ユニットへ上記所定のレコードのレコード順序番号を通知する手段と、
    をさらに含み、
    上記レコード順序番号を通知された演算ユニットが、
    当該演算ユニットの上記担当レコードに関する上記レコード順序番号配列及び前記項目値アクセス情報配列を、上記グローバルメモリから当該演算ユニットの上記ローカルメモリへ転送する手段と、
    上記通知されたレコード順序番号が格納されている位置を上記転送されたレコード順序番号配列中で特定する手段と、
    上記特定された位置によって指定される項目値アクセス情報を上記転送された項目値アクセス情報配列中で特定する手段と、
    データ項目毎に、上記グローバルメモリから、上記特定された項目値アクセス情報によって指定される上記項目値を取得する手段と、
    をさらに含む、
    請求項4に記載のマルチコア型処理装置。
  13. 上記制御ユニットが、上記グローバルメモリ上の上記ブロック番号配列を参照して、所定のレコードが含まれるブロックのブロック番号と上記所定のレコードを担当する上記演算ユニットとを決定するステップと、
    上記制御ユニットが、上記決定された演算ユニットへ上記所定のレコードのレコード順序番号を通知するステップと、
    上記レコード順序番号を通知された演算ユニットが、当該演算ユニットの上記担当レコードに関する上記レコード順序番号配列及び前記項目値アクセス情報配列を、上記グローバルメモリから当該演算ユニットの上記ローカルメモリへ転送するステップと、
    上記レコード順序番号を通知された演算ユニットが、上記通知されたレコード順序番号が格納されている位置を上記転送されたレコード順序番号配列中で特定するステップと、
    上記レコード順序番号を通知された演算ユニットが、上記特定された位置によって指定される項目値アクセス情報を上記転送された項目値アクセス情報配列中で特定するステップと、
    上記レコード順序番号を通知された演算ユニットが、データ項目毎に、上記グローバルメモリから、上記特定された項目値アクセス情報によって指定される上記項目値を取得するステップと、
    をさらに含む、
    請求項7に記載のプログラム。
JP2009529900A 2007-08-28 2007-08-28 表形式データを操作するマルチコア対応データ処理方法、マルチコア型処理装置、及び、プログラム Expired - Fee Related JP5208117B2 (ja)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/JP2007/066672 WO2009028050A1 (ja) 2007-08-28 2007-08-28 表形式データを操作するマルチコア対応データ処理方法、マルチコア型処理装置、及び、プログラム

Publications (2)

Publication Number Publication Date
JPWO2009028050A1 JPWO2009028050A1 (ja) 2010-11-25
JP5208117B2 true JP5208117B2 (ja) 2013-06-12

Family

ID=40386794

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2009529900A Expired - Fee Related JP5208117B2 (ja) 2007-08-28 2007-08-28 表形式データを操作するマルチコア対応データ処理方法、マルチコア型処理装置、及び、プログラム

Country Status (2)

Country Link
JP (1) JP5208117B2 (ja)
WO (1) WO2009028050A1 (ja)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP5687219B2 (ja) * 2012-01-20 2015-03-18 日本電信電話株式会社 データ検索システム、データ検索方法及びデータ検索プログラム

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2001147800A (ja) * 1999-11-22 2001-05-29 Taabo Data Laboratory Kk 情報処理システム、並びに、この情報処理システムを利用したソート方法、コンパイル方法およびジョイン方法
WO2005041067A1 (ja) * 2003-10-27 2005-05-06 Shinji Furusho 分散メモリ型情報処理システム
WO2006126467A1 (ja) * 2005-05-24 2006-11-30 Turbo Data Laboratories Inc. マルチプロセッサシステム及びその情報処理方法

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2001147800A (ja) * 1999-11-22 2001-05-29 Taabo Data Laboratory Kk 情報処理システム、並びに、この情報処理システムを利用したソート方法、コンパイル方法およびジョイン方法
WO2005041067A1 (ja) * 2003-10-27 2005-05-06 Shinji Furusho 分散メモリ型情報処理システム
WO2006126467A1 (ja) * 2005-05-24 2006-11-30 Turbo Data Laboratories Inc. マルチプロセッサシステム及びその情報処理方法

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
CSND200501100001; 'Cell誕生<設計思想をひも解く>埋め込まれた遺伝子で変化自在に進化' 日経エレクトロニクス 第894号, 20050228, p.100〜109, 日経BP社 *
JPN6009052170; 'Cell誕生<設計思想をひも解く>埋め込まれた遺伝子で変化自在に進化' 日経エレクトロニクス 第894号, 20050228, p.100〜109, 日経BP社 *

Also Published As

Publication number Publication date
JPWO2009028050A1 (ja) 2010-11-25
WO2009028050A1 (ja) 2009-03-05

Similar Documents

Publication Publication Date Title
US9262500B2 (en) Memory system including key-value store
JP4848317B2 (ja) データベースのインデックス作成システム、方法及びプログラム
JP4339381B2 (ja) 共有メモリ型マルチプロセッサシステム及びその情報処理方法
US20230359435A1 (en) Sorting for data-parallel computing devices
JP5460486B2 (ja) データをソートする装置及び方法
Liu et al. GPU-accelerated BWT construction for large collection of short reads
JP4511469B2 (ja) 情報処理方法及び情報処理システム
WO2015098707A1 (ja) 情報検索機能を備えたメモリ、その利用方法、装置、情報処理方法。
JP4673299B2 (ja) 情報処理方法及び情報処理システム
US11030714B2 (en) Wide key hash table for a graphics processing unit
US20230385258A1 (en) Dynamic random access memory-based content-addressable memory (dram-cam) architecture for exact pattern matching
JP2007299021A (ja) インデクス更新方法及びそのシステム
JP5208117B2 (ja) 表形式データを操作するマルチコア対応データ処理方法、マルチコア型処理装置、及び、プログラム
JPWO2009044486A1 (ja) 表形式データをソートする方法、マルチコア型装置、及び、プログラム
JP6006740B2 (ja) インデックス管理装置
WO2011099114A1 (ja) ハイブリッド型データベースシステム及びその動作方法
JP4511464B2 (ja) 情報処理システムおよび情報処理方法
JPWO2005041066A1 (ja) 情報処理システムおよび情報処理方法
WO2010013320A1 (ja) 表形式データを操作する方法、分散メモリ型マルチプロセッサ、及び、プログラム
JP4559971B2 (ja) 分散メモリ型情報処理システム
JP4772506B2 (ja) 情報処理方法、情報処理システムおよびプログラム
JPWO2008155852A1 (ja) メモリ共有型並列処理システムにおいて表形式データを集計する方法及び装置
JPWO2014168199A1 (ja) 論理演算方法および情報処理装置
JP4995724B2 (ja) 情報処理システムおよび情報処理方法
de Oliveira et al. BDDBlast—A Memory Efficient Architecture for Pairwise Alignments

Legal Events

Date Code Title Description
A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20121030

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20121227

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20130205

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20130219

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20160301

Year of fee payment: 3

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees