JP2015143949A - 演算プログラム、演算装置および演算方法 - Google Patents

演算プログラム、演算装置および演算方法 Download PDF

Info

Publication number
JP2015143949A
JP2015143949A JP2014017265A JP2014017265A JP2015143949A JP 2015143949 A JP2015143949 A JP 2015143949A JP 2014017265 A JP2014017265 A JP 2014017265A JP 2014017265 A JP2014017265 A JP 2014017265A JP 2015143949 A JP2015143949 A JP 2015143949A
Authority
JP
Japan
Prior art keywords
value data
data
divided
subtracted
digit
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.)
Pending
Application number
JP2014017265A
Other languages
English (en)
Inventor
いづほ 皆木
Izuho Minaki
いづほ 皆木
雅樹 西垣
Masaki Nishigaki
雅樹 西垣
尚洋 伊藤
Naohiro Ito
尚洋 伊藤
幸吉 杉山
Kokichi Sugiyama
幸吉 杉山
山本 達也
Tatsuya Yamamoto
達也 山本
亜沙美 長谷川
Asami Hasegawa
亜沙美 長谷川
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.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
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 Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2014017265A priority Critical patent/JP2015143949A/ja
Priority to US14/602,573 priority patent/US20150220306A1/en
Publication of JP2015143949A publication Critical patent/JP2015143949A/ja
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/50Adding; Subtracting
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/52Multiplying; Dividing

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Pure & Applied Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Optimization (AREA)
  • Computing Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)

Abstract

【課題】桁位置によって取り得る値の範囲が異なるデータの減算処理の高速化を図る。
【解決手段】演算装置100は、被減算値データ110および減算値データ120をバイト単位で大小を比較する。演算装置100は、比較結果に応じて、データ111〜118の桁情報から定まる繰り下がり値データ131〜138を、データ111〜118にそれぞれ加算する。演算装置100は、桁位置が対応する、繰り下がり値データ131〜138が加算されたデータ111〜118から、データ121〜128をそれぞれ減算する。
【選択図】図1

Description

本発明は、演算プログラム、演算装置および演算方法に関する。
データベースシステムでは、高速かつ利便性の高いデータ操作が求められており、利用者が扱うデータの形に対応したデータ型という概念を使用して内部的にデータ形式を規定し、ディスクへの格納、データの比較、演算処理を実現している。データ型としては、例えば、日時や時刻を扱う型、数値を扱う型、文字を扱う型などがある。
関連する先行技術としては、イベントが発生した際に、基準日時と発生日時を用いて、発生日時が後であるほど得られる演算結果が小さくなるように、イベントレコードに日時変換演算を行って変換レコードに変換し、履歴情報データベースに格納する技術がある。
特開2006−146509号公報
しかしながら、従来技術では、日付や時刻を表すデータのように、桁位置によって取り得る値の範囲(値域)が異なるデータの減算処理に時間がかかる。例えば、桁位置によって値域が異なると、データの減算において、繰り下がりが生じる場合に、それぞれの桁位置に応じた繰り下がり処理が必要となる。この場合、例えば、OSのアーキテクチャをそのまま利用することができず、ソフトウェア側で対応することになるため減算処理にかかる処理時間の増加を招いてしまう。
一つの側面では、本発明は、桁位置によって取り得る値の範囲が異なるデータの減算処理の高速化を図ることができる演算プログラム、演算装置および演算方法を提供することを目的とする。
本発明の一側面によれば、被減算値データおよび減算値データを、1バイト単位でそれぞれ複数に分割し、桁位置が対応する、前記分割された被減算値データおよび前記分割された減算値データそれぞれの大小を比較し、前記比較結果に応じて、前記分割された被減算値データの桁情報から定まる繰り下がり値データを、前記分割された被減算値データにそれぞれ加算し、桁位置が対応する、前記繰り下がり値データが加算された前記分割された被減算値データから、前記分割された減算値データをそれぞれ減算する演算プログラム、演算装置および演算方法が提案される。
本発明の一態様によれば、桁位置によって取り得る値の範囲が異なるデータの減算処理の高速化を図ることができるという効果を奏する。
図1は、実施の形態にかかる演算方法の一実施例を示す説明図である。 図2は、データベースシステム200のシステム構成例を示す説明図である。 図3は、データベースサーバ201のハードウェア構成例を示すブロック図である。 図4は、データベースサーバ201の機能的構成例を示すブロック図である。 図5は、SIMD COMPARE 命令の概要を示す説明図である。 図6は、TIMESTAMP型データのデータ形式を示す説明図である。 図7は、TIMESTAMP型データの演算処理例を示す説明図(その1)である。 図8は、TIMESTAMP型データの演算処理例を示す説明図(その2)である。 図9は、TIMESTAMP型データの演算処理例を示す説明図(その3)である。 図10は、TIMESTAMP型データの演算処理例を示す説明図(その4)である。 図11は、TIMESTAMP型データの演算処理例を示す説明図(その5)である。 図12は、TIME型データのデータ形式を示す説明図である。 図13は、TIME型データの演算処理例を示す説明図(その1)である。 図14は、TIME型データの演算処理例を示す説明図(その2)である。 図15は、TIME型データの演算処理例を示す説明図(その3)である。 図16は、TIME型データの演算処理例を示す説明図(その4)である。 図17は、TIME型データの演算処理例を示す説明図(その5)である。 図18は、DATE型データのデータ形式を示す説明図である。 図19は、DATE型データの演算処理例を示す説明図(その1)である。 図20は、DATE型データの演算処理例を示す説明図(その2)である。 図21は、DATE型データの演算処理例を示す説明図(その3)である。 図22は、DATE型データの演算処理例を示す説明図(その4)である。 図23は、DATE型データの演算処理例を示す説明図(その5)である。 図24は、データベースサーバ201の演算処理手順の一例を示すフローチャート(その1)である。 図25は、データベースサーバ201の演算処理手順の一例を示すフローチャート(その2)である。
以下に図面を参照して、本発明にかかる演算プログラム、演算装置および演算方法の実施の形態を詳細に説明する。
(演算方法の一実施例)
図1は、実施の形態にかかる演算方法の一実施例を示す説明図である。図1において、演算装置100は、被減算値データから減算値データの減算を行うコンピュータである。ここで、被減算値データは、減算される値を示すデータである。減算値データは、減算する値を示すデータである。
被減算値データおよび減算値データは、日時や時刻を表すデータであり、それぞれ異なる意味を持つ数字を示すデータを並べたものである。例えば、被減算値データおよび減算値データは、TIMESTAMP型データ、TIME型データ、DATE型データなどである。
TIMESTAMP型データは、年、月、日、時、分および秒それぞれを示すデータを並べたものである。TIME型データは、時、分および秒それぞれを示すデータを並べたものである。DATE型データは、年、月および日それぞれを示すデータを並べたものである。
なお、TIMESTAMP型データ、TIME型データおよびDATE型データのデータ形式についての詳細な説明は、図6、図12および図18を用いて後述する。
被減算値データの具体例としては、例えば、商品(食品)の賞味期限を示すデータが挙げられる。減算値データの具体例としては、例えば、商品の製造日時を示すデータが挙げられる。この場合、被減算値データから減算値データの減算を行うことで、賞味期限と製造日時との日時間隔を求めることができ、例えば、割引対象とする商品や陳列対象から除外する商品の判別などに役立てることができる。
ここで、日時や時刻を表すデータは、桁位置によって取り得る値の範囲(値域)が異なる。桁位置は、並べたデータの位置を示す。このため、日時や時刻を表すデータの減算においては、それぞれの桁位置に応じた繰り下がり処理が必要となる。繰り下がりとは、ある桁位置の減算される値が、減算する値よりも小さいとき、減算される値に、その桁位置の値として取り得る値の個数分加えた結果、隣接する上位の桁位置の値が1小さくなることである。
一例として、TIMESTAMP型データを例に挙げると、「時」を示すデータについては、「0〜23」を値域として持つ。このため、12時から14時を減算する場合には、上位の桁位置の「日」を示すデータから、1日を繰り下げて(1を減算し)、1(日)×24(時)+12(時)−14(時)=22(時)と計算することになる。一方、「分」を示すデータになると、0〜59を値域として持つため、「時」を示すデータとは異なる処理となる。
このように、日時や時刻を表すデータの減算においては、それぞれの桁位置に応じた繰り下がり処理が必要となるため、OSのアーキテクチャをそのまま利用することができず、ソフトウェア側で対応することになる。ところが、例えば、日時や時刻を表すデータの桁位置ごとに、大小比較を繰り返し行って、繰り下がりに伴う減算および加算を繰り返し行うと、データの減算処理にかかるステップ数が増加してしまう。
そこで、本実施の形態では、演算装置100は、被減算値データおよび減算値データを、1バイト単位でそれぞれ複数に分割し、桁位置が対応する、分割された被減算値データおよび分割された減算値データそれぞれの大小比較を一括して行う。これにより、日時や時刻を表すデータの各桁位置の大小比較にかかる処理ステップ数を削減するとともに、各桁位置に応じた繰り下がり処理や減算処理を並列実行可能にして、日時や時刻を表すデータの減算処理の高速化を図る。以下、演算装置100の演算処理例について説明する。
(1)演算装置100は、被減算値データ110および減算値データ120をバイト単位で大小を比較する。ここで、被減算値データ110および減算値データ120は、それぞれ8バイトのTIMESTAMP型データである。TIMESTAMP型データは、年、月、日、時、分および秒それぞれを示すバイト単位のデータを並べたデータである。
より詳細に説明すると、被減算値データ110および減算値データ120の0バイト目は、NULL indを示す。NULL indは、データが不定であるか否かを識別する情報である。NULL indが「0」の場合はデータが不定ではないことを示し、NULL indが「1」の場合はデータが不定であることを示す。
また、1バイト目および2バイト目は「年」を示す。ここでは、「年」を西暦で表現するため、1バイト目が「HI年(年の上位2桁)」を示し、2バイト目が「LO年(年の下位2桁)」を示す。3バイト目は「月」を示す。4バイト目は「日」を示す。5バイト目は「時」を示す。6バイト目は「分」を示す。7バイト目は「秒」を示す。
具体的には、例えば、演算装置100は、被減算値データ110および減算値データ120を、1バイト単位でそれぞれ複数に分割する。図1の例では、被減算値データ110が、1バイト単位のデータ111〜118に分割される。また、減算値データ120が、1バイト単位のデータ121〜128に分割される。
そして、演算装置100は、桁位置が対応する、データ111〜118およびデータ121〜128それぞれの大小を比較する。より具体的には、例えば、演算装置100は、SIMD(Single Instruction Multiple Data) COMPARE 命令により、桁位置が対応する、データ111〜118およびデータ121〜128それぞれの大小を一括比較する。
ここで、SIMD COMPARE 命令は、1命令で複数のデータの比較処理を同時に行うものである。SIMD COMPARE 命令によれば、一つの命令で複数のデータの比較処理を一括して行うことができ処理性能の向上を図ることができる。SIMD COMPARE 命令についての詳細な説明は、図5を用いて後述する。
(2)演算装置100は、比較結果に応じて、データ111〜118の桁情報から定まる繰り下がり値データ131〜138を、データ111〜118にそれぞれ加算する。ここで、桁情報は、各データ111〜118に対応する桁位置の値として取り得る値の範囲(値域)を示す情報である。
例えば、データ112に対応する桁位置1の値として取り得る値の範囲は「0〜99」である。また、データ114に対応する桁位置3の値として取り得る値の範囲は「1〜12」である。また、データ117に対応する桁位置6の値として取り得る値の範囲は「0〜59」である。
具体的には、例えば、演算装置100は、桁位置に応じて、データ111〜118よりもデータ121〜128が大きくなる桁位置の値に該桁位置の値として取り得る値の個数を加算し、該桁位置に隣接する上位の桁位置の値から「1」を減算するための繰り下がり値データ131〜138をそれぞれ生成する。
図1の例では、データ114よりもデータ124が大きい。ここで、データ114に対応する桁位置3の値の範囲は「1〜12」であり、桁位置3の値として取り得る値の個数は「12」である。このため、演算装置100は、桁情報を参照して、データ114に対応する桁位置3の値に「12」を加算するための繰り下がり値データ134を生成する。また、演算装置100は、データ114に対応する桁位置3に隣接する上位の桁位置2の値から「1」を減算するための繰り下がり値データ133を生成する。
また、データ116よりもデータ126が大きい。ここで、データ116に対応する桁位置5の値の範囲は「0〜23」であり、桁位置5の値として取り得る値の個数は「24」である。このため、演算装置100は、桁情報を参照して、データ116に対応する桁位置5の値に「24」を加算するための繰り下がり値データ136を生成する。また、演算装置100は、データ116に対応する桁位置5に隣接する上位の桁位置4の値から「1」を減算するための繰り下がり値データ135を生成する。
また、演算装置100は、桁位置3,5および桁位置3,5に隣接する上位の桁位置2,4とは異なる桁位置0,1,6,7に「0」を加算するための繰り下がり値データ131,132,137,138をそれぞれ生成する。
そして、演算装置100は、桁位置が対応する、データ111〜118に、生成された繰り下がり値データ131〜138をそれぞれ加算する。図1の例では、例えば、データ113に繰り下がり値データ133が加算され、「LO年」が「11」となる。また、例えば、データ114に繰り下がり値データ134が加算され、「月」が「18」となる。
(3)演算装置100は、桁位置が対応する、繰り下がり値データ131〜138が加算されたデータ111〜118から、データ121〜128をそれぞれ減算する。また、演算装置100は、1バイト単位でそれぞれ減算した結果を結合する。この結果、被減算値データ110から減算値データ120を減算した結果を示す時間間隔データ140を取得することができる。
このように、実施の形態にかかる演算装置100によれば、桁位置が対応する、1バイト単位で分割された被減算値データおよび分割された減算値データそれぞれの大小を一括して比較することができる。これにより、日時や時刻を表すデータの各桁位置の大小比較にかかる処理ステップ数を1回に削減することができる。また、1バイト単位の比較結果に応じて、各桁位置の繰り下がり処理および減算処理を並列に行うことが可能となる。
これらのことから、演算装置100によれば、日付や時刻を表すデータのように、桁位置によって取り得る値の範囲が異なるデータの減算処理の高速化を図ることができる。
(データベースシステム200のシステム構成例)
つぎに、実施の形態にかかるデータベースシステム200のシステム構成例について説明する。ここでは、図1に示した演算装置100をデータベースシステム200内のデータベースサーバ201に適用する場合を例に挙げて説明する。
図2は、データベースシステム200のシステム構成例を示す説明図である。図2において、データベースシステム200は、データベースサーバ201と、クライアント装置202と、を含む。データベースシステム200において、データベースサーバ201およびクライアント装置202は、有線または無線のネットワーク210を介して接続される。ネットワーク210は、例えば、LAN(Local Area Network)、WAN(Wide Area Network)、インターネット、移動体通信網などである。
データベースサーバ201は、データベース220およびログ230にアクセス可能なコンピュータである。データベース220は、複数のアプリケーションや利用者により共有されるデータを記憶する。ログ230は、トランザクションの更新情報を記憶する。ログ230は、例えば、システムダウン等の異常時に、データベース220を復旧するために使用される。
クライアント装置202は、データベースシステム200の利用者が使用するコンピュータである。クライアント装置202は、データベースサーバ201に対して、データベース220への検索要求または更新要求を行う。具体的には、例えば、クライアント装置202は、PC(Personal Computer)、ノートPC、タブレット型PC、スマートフォンなどである。
ここで、データベースサーバ201は、受付部241と、データ操作部242と、レコード操作部243と、バッファ管理部244と、トランザクション管理部245と、ログ管理部246と、データベースバッファ247と、を含む。
受付部241は、クライアント装置202から検索要求または更新要求を受け付ける。データ操作部242は、データベース定義情報を参照して、受付部241が受け付けた検索要求または更新要求に対応するデータ操作命令を解釈して実行する。レコード操作部243は、データベース220の検索や更新、ログの採取を行う。
バッファ管理部244は、レコード操作部243により要求されたレコードを含むデータベースバッファ247の情報を返却する。バッファ管理部244は、データベースバッファ247上に目的のレコードが存在しない場合は、データベース220から該当データを読み込み、データベースバッファ247上に展開する。データベースバッファ247は、例えば、後述の図3に示すメモリ302により実現される。
トランザクション管理部245は、トランザクションを管理する。トランザクション管理部245は、トランザクションが確定した場合は、データベースバッファ247上の更新データをデータベース220に書き出す。一方、トランザクションが取り消された場合は、トランザクション管理部245は、データベースバッファ247上の更新データを無効にする。ログ管理部246は、トランザクションの更新情報をログ230に記録する。
(データベースサーバ201のハードウェア構成例)
図3は、データベースサーバ201のハードウェア構成例を示すブロック図である。図3において、データベースサーバ201は、CPU(Central Processing Unit)301と、メモリ302と、I/F(Interface)303と、磁気ディスクドライブ304と、磁気ディスク305と、を有する。また、各構成部は、バス300によってそれぞれ接続される。
ここで、CPU301は、データベースサーバ201の全体の制御を司る。メモリ302は、例えば、ROM(Read Only Memory)、RAM(Random Access Memory)およびフラッシュROMなどを有する。具体的には、例えば、フラッシュROMやROMが各種プログラムを記憶し、RAMがCPU301のワークエリアとして使用される。メモリ302に記憶されるプログラムは、CPU301にロードされることで、コーディングされている処理をCPU301に実行させる。
I/F303は、通信回線を通じてネットワーク210に接続され、ネットワーク210を介して他のコンピュータ(例えば、図2に示したクライアント装置202)に接続される。そして、I/F303は、ネットワーク210と内部のインターフェースを司り、他のコンピュータからのデータの入出力を制御する。I/F303には、例えば、モデムやLANアダプタなどを採用することができる。
磁気ディスクドライブ304は、CPU301の制御にしたがって磁気ディスク305に対するデータのリード/ライトを制御する。磁気ディスク305は、磁気ディスクドライブ304の制御で書き込まれたデータを記憶する。
なお、データベースサーバ201は、上述した構成部のほか、例えば、SSD(Solid State Drive)、キーボード、マウス、ディスプレイなどを有することにしてもよい。また、図2に示したクライアント装置202についても、上述したデータベースサーバ201と同様のハードウェア構成例により実現することができる。
(データベースサーバ201の機能的構成例)
図4は、データベースサーバ201の機能的構成例を示すブロック図である。図4において、データベースサーバ201は、取得部401と、比較部402と、生成部403と、演算部404と、出力部405と、を含む構成である。各機能部は、具体的には、例えば、図3に示したメモリ302、磁気ディスク305などの記憶装置に記憶されたプログラムをCPU301に実行させることにより、または、I/F303により、その機能を実現する。また、各機能部は、例えば、ハードウェアにより実現されてもよい。具体的には、例えば、各機能部は、論理積回路であるAND、否定論理回路であるINVERTER、論理和回路であるOR、論理和否定回路であるNORや、ラッチ回路であるFF(Flip Flop)などの素子によって形成されてもよい。各機能部の処理結果は、例えば、メモリ302、磁気ディスク305などの記憶装置に記憶される。
取得部401は、被減算値データおよび減算値データを取得する。ここで、被減算値データおよび減算値データは、例えば、データベース220(図2参照)に格納されたレコードを含む8バイトのデータである。具体的には、例えば、取得部401は、データベースバッファ247(図2参照)に読み込まれたデータから、被減算値データおよび減算値データを取得する。
比較部402は、被減算値データおよび減算値データをバイト単位で大小を比較する。具体的には、例えば、比較部402は、被減算値データをレジスタr1にセットする。また、分割部は、減算値データをレジスタr2にセットする。レジスタr$は、CPU301内部に設けられる8バイトの記憶装置である($=1,2,…)。
つぎに、比較部402は、レジスタr1,r2にセットした被減算値データおよび減算値データを、1バイト単位でそれぞれ複数に分割する。そして、比較部402は、SIMD COMPARE 命令により、桁位置が対応する、分割された被減算値データおよび分割された減算値データそれぞれの大小を一括比較する。
以下の説明では、分割された被減算値データのうち、桁位置#に対応するデータを「データa#」と表記する場合がある(#=0,1,…,7)。また、分割された減算値データのうち、桁位置#に対応するデータを「データb#」と表記する場合がある。
生成部403は、比較結果に応じて、分割されたデータa#の桁情報から定まる繰り下がり値データc#をそれぞれ生成する。ここで、桁情報は、データa#に対応する桁位置#の値として取り得る値の範囲(値域)を示す情報であり、例えば、後述する日数換算マスク、時間換算マスクに相当する。桁情報は、例えば、被減算値データおよび減算値データのデータ型に対応付けてメモリ302に記憶されている。
具体的には、例えば、生成部403は、桁位置#に応じて、データa#よりもデータb#が大きくなる桁位置#の値に、桁位置#の値として取り得る値の個数を加算するための繰り下がり加算値データd#をそれぞれ生成する。また、生成部403は、桁位置#に応じて、データa#よりもデータb#が大きくなる桁位置#に隣接する上位の桁位置(#−1)の値から1を減算するための繰り下がり減算値データe(#−1)をそれぞれ生成する。
そして、生成部403は、桁位置#が対応する、繰り下がり加算値データd#および繰り下がり減算値データe#をそれぞれ加算することにより、繰り下がり値データc#をそれぞれ生成する。これにより、データa#よりもデータb#が大きくなる桁位置#の値に桁位置#の値として取り得る値の個数を加算し、上位の桁位置(#−1)の値から1を減算するための繰り下がり値データc#をそれぞれ生成することができる。
演算部404は、桁位置#が対応する、データa#に、生成された繰り下がり値データc#をそれぞれ加算する。そして、演算部404は、桁位置#が対応する、繰り下がり値データc#が加算されたデータa#から、データb#をそれぞれ減算する。
出力部405は、演算された結果を出力する。具体的には、例えば、出力部405は、繰り下がり値データc#が加算されたデータa#からデータb#をそれぞれ減算した結果を結合した演算結果を出力する。これにより、被減算値データと減算値データとの時間間隔を示すデータを取得することができる。
出力部405の出力形式としては、例えば、メモリ302、磁気ディスク305などの記憶装置への記憶、I/F303による外部のコンピュータへの送信、不図示のディスプレイへの表示、不図示のプリンタへの印刷出力などがある。
(SIMD COMPARE 命令)
ここで、SIMD COMPARE 命令について説明する。
図5は、SIMD COMPARE 命令の概要を示す説明図である。図5において、レジスタr1は、8バイトで構成されるレジスタであり、比較対象となる一方のデータを格納する。レジスタr2は、8バイトで構成されるレジスタであり、比較対象となる他方のデータを格納するレジスタである。
レジスタr1とレジスタr2に対して、SIMD COMPARE 命令を適用すると、レジスタr1のデータとレジスタr2のデータとがバイト単位で一括比較され、バイト単位の比較結果がレジスタrの先頭1バイト域に格納される。このように、SIMD COMPARE 命令によれば、一つの命令で複数のデータの比較処理を一括して行うことができ処理性能の向上を図ることができる。
(TIMESTAMP型データの演算処理例)
つぎに、図6〜図11を用いて、被減算値データおよび減算値データがTIMESTAMP型データの場合のデータベースサーバ201の演算処理例について説明する。まず、データベースサーバ201で内部処理する際のTIMESTAMP型データのデータ形式について説明する。
図6は、TIMESTAMP型データのデータ形式を示す説明図である。図6において、TIMESTAMP型データは、NULL ind、年、月、日、時、分および秒のフィールドを有し、1レコードが8バイトのデータである。
ここで、TIMESTAMP型データの0バイト目のデータは、NULL indを示す。1バイト目のデータは「HI年」を示す。2バイト目のデータは「LO年」を示す。3バイト目のデータは「月」を示す。4バイト目のデータは「日」を示す。5バイト目のデータは「時」を示す。6バイト目のデータは「分」を示す。7バイト目のデータは「秒」を示す。
図6の例では、TIMESTAMP型の被減算値データとして、「2012年6月25日3時48分21秒」を示すビット列がレジスタr1にセットされている。また、TIMESTAMP型の減算値データとして、「2010年9月10日22時10分21秒」を示すビット列がレジスタr2にセットされている。
図7〜図11は、TIMESTAMP型データの演算処理例を示す説明図である。ここでは、レジスタr1にセットした左辺の被減算値データから、レジスタr2にセットした右辺の減算値データを減算して、「2012年6月25日3時48分21秒」と「2010年9月10日22時10分21秒」との日時間隔を取得する場合を想定する。
図7において、(i)比較部402は、SIMD COMPARE 命令を実行することにより、レジスタr1の被減算値データとレジスタr2の減算値データとをバイト単位で一括比較して、比較結果をレジスタr3の先頭1バイト域に格納する。ここでは、SIMD COMPARE 命令のオプションに従って、左辺よりも右辺が大きい場合に、結果バイト(レジスタr3の先頭1バイト域)において、比較対象のバイト位置に対応したビット域が設定(ON)される。
図7の例では、3バイト目が左辺よりも右辺が大きいため、レジスタr3の先頭1バイト域において、3バイト目に対応する3ビット目のビット域に「1」が設定される。また、5バイト目が左辺よりも右辺が大きいため、レジスタr3の先頭1バイト域において、5バイト目に対応する5ビット目のビット域に「1」が設定される。これにより、桁位置0〜7のうち、左辺よりも右辺が大きい桁位置3,5を特定することができる。
図8において、(ii)生成部403は、レジスタr3の先頭1バイト域の結果バイト「00010100」をコピーして、レジスタr4に結果バイト「00010100」を8バイト分セットする。以下の説明では、1バイトのデータ(例えば、結果バイト)を、レジスタr$に8バイト分セットしたものを「8バイトMEMSETデータ」と表記する場合がある。
そして、生成部403は、レジスタr4の8バイトMEMSETデータとレジスタr5の桁マスクとの並列論理積(AND)を求めて、結果をレジスタr6に格納する。桁マスクは、バイト単位で各桁の値を取り出すためのビットマスクである。これにより、1バイトの結果バイト「00010100」をSIMD命令で扱うことができる8バイトのデータに拡張することができる。なお、並列論理積(AND)は、バイト単位で論理積(AND)をとることである。
図9において、(iii)生成部403は、レジスタr3の先頭1バイト域の結果バイト「00010100」を1ビット左にシフトさせる。これにより、左辺から右辺の減算に伴って繰り下がりが発生する繰り下がり箇所を示す結果バイト「00101000」を生成することができる。そして、生成部403は、レジスタr3の先頭1バイト域の結果バイト「00101000」をコピーして、レジスタr7に結果バイト「00101000」を8バイト分セットする。
つぎに、生成部403は、レジスタr7の8バイトMEMSETデータとレジスタr5の桁マスクとの並列論理積(AND)を求めて、結果をレジスタr8に格納する。これにより、1バイトの結果バイト「00101000」をSIMD命令で扱うことができる8バイトのデータに拡張することができる。
そして、生成部403は、レジスタr8の結果とレジスタr9の桁マスク(負)との並列論理積(AND)を求めて、結果をレジスタr10に格納する。桁マスク(負)は、バイト単位の値に負符号(−)を付加するためのビットマスクである。これにより、繰り下がり箇所の値から1を減算するための繰り下がりマスクを生成することができる。レジスタr10の繰り下がりマスクは、上述した繰り下がり減算値データe0〜e7に対応する。
図10において、(iv)生成部403は、TIMESTAMP型データに対応する日数換算マスクをレジスタr11にセットする。日数換算マスクは、TIMESTAMP型データの各フィールドに対応する桁位置ごとに、該桁位置の値として取り得る値の個数を示すものである。日数換算マスクは、例えば、メモリ302に記憶されている。
ここで、「年」に対応する桁位置1,2の値として取り得る値の範囲はそれぞれ「0〜99」であり、桁位置1,2の値として取り得る値の個数はそれぞれ「100」である。また、「月」に対応する桁位置3の値として取り得る値の範囲は「1〜12」であり、桁位置3の値として取り得る値の個数は「12」である。
また、「日」に対応する桁位置4の値として取り得る値の範囲は「1〜31」であり、桁位置4の値として取り得る値の個数は「31」である。また、「時」に対応する桁位置5の値として取り得る値の範囲は「0〜23」であり、桁位置5の値として取り得る値の個数は「24」である。
また、「分」に対応する桁位置6の値として取り得る値の範囲は「0〜59」であり、桁位置6の値として取り得る値の個数は「60」である。また、「秒」に対応する桁位置7の値として取り得る値の範囲は「0〜59」であり、桁位置7の値として取り得る値の個数は「60」である。
ただし、桁位置4の値として取り得る値の個数は、被減算値データの桁位置3の値に応じて切り替わる。具体的には、被減算値データの桁位置3の値が1,2,4,6,8,9,11のいずれかであれば、桁位置4の値として取り得る値の個数は「31」となる。また、被減算値データの桁位置3の値が5,7,10,12のいずれかであれば、桁位置4の値として取り得る値の個数は「30」となる。
また、被減算値データの桁位置3の値が3であれば、桁位置4の値として取り得る値の個数は「28」となる。さらに、被減算値データの年が閏年を示す場合は、被減算値データの桁位置3の値が3であれば、桁位置4の値として取り得る値の個数は「29」となる。また、NULL indに対応する桁位置0の値として取り得る値の個数は「0」とする。
つぎに、生成部403は、レジスタr11の日数換算マスクとレジスタr6の結果との並列論理積(AND)を求めて、結果をレジスタr12に格納する。これにより、繰り下がりに伴って左辺よりも右辺が大きい桁位置に加算する値を示すデータを生成することができる。レジスタr12の結果は、上述した繰り下がり加算値データd0〜d7に対応する。
そして、生成部403は、レジスタr12の結果とレジスタr10の繰り下がりマスクとを加算して、結果をレジスタr13に格納する。これにより、左辺よりも右辺が大きい桁位置に加算する値および繰り下がり箇所に減算する値を示す繰り下がり値データを生成することができる。レジスタr13の結果は、上述した繰り下がり値データc0〜c7に対応する。
図11において、(v)生成部403は、レジスタr13の繰り下がり値のデータとレジスタr1の被減算値データとを加算して、結果をレジスタr14に格納する。これにより、繰り下がり処理された被減算値データを生成することができる。繰り下がり処理とは、左辺よりも右辺が大きい桁位置への加算および繰り下がり箇所への減算を行う処理である。
そして、生成部403は、レジスタr14の繰り下がり処理された被減算値データからレジスタr2の減算値データを減算して、結果をレジスタr15に格納する。これにより、「2012年6月25日3時48分21秒」と「2010年9月10日22時10分21秒」との日時間隔「1年9ヶ月14日5時間38分0秒」を取得することができる。
(TIME型データの演算処理例)
つぎに、図12〜図17を用いて、被減算値データおよび減算値データがTIME型データの場合のデータベースサーバ201の演算処理例について説明する。まず、データベースサーバ201で内部処理する際のTIME型データのデータ形式について説明する。
図12は、TIME型データのデータ形式を示す説明図である。図12において、TIME型データは、NULL ind、時、分、秒および4つのpaddingのフィールドを有し、1レコードが8バイトのデータである。
ここで、TIME型データの0バイト目のデータは、NULL indを示す。1バイト目のデータは「時」を示す。2バイト目のデータは「分」を示す。3バイト目のデータは「秒」を示す。4〜7バイト目のデータは「padding」を示す。「padding」は、被減算値データおよび減算値データを8バイトの固定長で扱うために追加する無意味なデータを示す。
データベース220において、TIME型データは、時、分、秒の各々が1バイトの長さで構成され、全体が3バイトとなる。ここでは、SIMD COMPARE 命令を利用するため、演算を行う領域を8バイトとさせる。具体的には、データベースサーバ201は、NULL indを除く、8バイトに満たない部分の右側4バイトはゼロパディングして演算する。
図12の例では、TIME型の被減算値データとして、「23時17分56秒」を示すビット列がレジスタr1にセットされている。また、TIME型の減算値データとして、「9時43分28秒」を示すビット列がレジスタr2にセットされている。
図13〜図17は、TIME型データの演算処理例を示す説明図である。ここでは、レジスタr1にセットした左辺の被減算値データから、レジスタr2にセットした右辺の減算値データを減算して、「23時17分56秒」と「9時43分28秒」との時間間隔を取得する場合を想定する。
図13において、(i)比較部402は、SIMD COMPARE 命令を実行することにより、レジスタr1の被減算値データとレジスタr2の減算値データとをバイト単位で一括比較して、比較結果をレジスタr3の先頭1バイト域に格納する。
図13の例では、2バイト目が左辺よりも右辺が大きいため、レジスタr3の先頭1バイト域において、2バイト目に対応する2ビット目のビット域に「1」が設定される。これにより、桁位置0〜7のうち、左辺よりも右辺が大きい桁位置2を特定することができる。
図14において、(ii)生成部403は、レジスタr3の先頭1バイト域の結果バイト「00100000」をコピーして、レジスタr4に結果バイト「00100000」を8バイト分セットする。そして、生成部403は、レジスタr4の8バイトMEMSETデータとレジスタr5の桁マスクとの並列論理積(AND)を求めて、結果をレジスタr6に格納する。これにより、1バイトの結果バイト「00100000」をSIMD命令で扱うことができる8バイトのデータに拡張することができる。
図15において、(iii)生成部403は、レジスタr3の先頭1バイト域の結果バイト「00100000」を1ビット左にシフトさせる。これにより、左辺から右辺の減算に伴って繰り下がりが発生する繰り下がり箇所を示す結果バイト「01000000」を生成することができる。そして、生成部403は、レジスタr3の先頭1バイト域の結果バイト「01000000」をコピーして、レジスタr7に結果バイト「01000000」を8バイト分セットする。
つぎに、生成部403は、レジスタr7の8バイトMEMSETデータとレジスタr5の桁マスクとの並列論理積(AND)を求めて、結果をレジスタr8に格納する。これにより、1バイトの結果バイト「01000000」をSIMD命令で扱うことができる8バイトのデータに拡張することができる。
そして、生成部403は、レジスタr8の拡張結果とレジスタr9の桁マスク(負)との並列論理積(AND)を求めて、結果をレジスタr10に格納する。これにより、繰り下がり箇所の値から1を減算するための繰り下がりマスクを生成することができる。レジスタr10の繰り下がりマスクは、上述した繰り下がり減算値データe0〜e7に対応する。
図16において、(iv)生成部403は、TIME型データに対応する時間換算マスクをレジスタr11にセットする。時間換算マスクは、TIME型データの各フィールドに対応する桁位置ごとに、該桁位置の値として取り得る値の個数を示すものである。時間換算マスクは、例えば、メモリ302に記憶されている。
ここで、「時」に対応する桁位置1の値として取り得る値の範囲は「0〜23」であり、桁位置1の値として取り得る値の個数は「24」である。また、「分」に対応する桁位置2の値として取り得る値の範囲は「0〜59」であり、桁位置2の値として取り得る値の個数は「60」である。また、「秒」に対応する桁位置3の値として取り得る値の範囲は「0〜59」であり、桁位置3の値として取り得る値の個数は「60」である。
ただし、NULL indに対応する桁位置0の値として取り得る値の個数は「0」とする。同様に、paddingに対応する桁位置4〜7の値として取り得る値の個数は「0」とする。
つぎに、生成部403は、レジスタr11の時間換算マスクとレジスタr6の結果との並列論理積(AND)を求めて、結果をレジスタr12に格納する。これにより、繰り下がりに伴って左辺よりも右辺が大きい桁位置に加算する値を示すデータを生成することができる。レジスタr12の結果は、上述した繰り下がり加算値データd0〜d7に対応する。
そして、生成部403は、レジスタr12の結果とレジスタr10の繰り下がりマスクとを加算して、結果をレジスタr13に格納する。これにより、左辺よりも右辺が大きい桁位置に加算する値および繰り下がり箇所に減算する値を示す繰り下がり値のデータを生成することができる。レジスタr13の結果は、上述した繰り下がり値データc0〜c7に対応する。
図17において、(v)生成部403は、レジスタr13の繰り下がり値のデータとレジスタr1の被減算値データとを加算して、結果をレジスタr14に格納する。これにより、繰り下がり処理された被減算値データを生成することができる。
そして、生成部403は、レジスタr14の繰り下がり処理された被減算値データからレジスタr2の減算値データを減算して、結果をレジスタr15に格納する。これにより、「23時17分56秒」と「9時43分28秒」との時間間隔「13時間34分28秒」を取得することができる。
(DATE型データの演算処理例)
つぎに、図18〜図23を用いて、被減算値データおよび減算値データがDATE型データの場合のデータベースサーバ201の演算処理例について説明する。まず、データベースサーバ201で内部処理する際のDATE型データのデータ形式について説明する。
図18は、DATE型データのデータ形式を示す説明図である。図18において、DATE型データは、NULL ind、HI年、LO年、月、日および3つのpaddingのフィールドを有し、1レコードが8バイトのデータである。
ここで、DATE型データの0バイト目のデータは、NULL indを示す。1バイト目のデータは「HI年」を示す。2バイト目のデータは「LO年」を示す。3バイト目のデータは「月」を示す。4バイト目のデータは「日」を示す。5〜7バイト目のデータは「padding」を示す。
データベース220において、DATE型データは、年が2バイト、月、日の各々が1バイトの長さで構成され、全体が4バイトとなる。ここでは、SIMD COMPARE 命令を利用するため、演算を行う領域を8バイトとさせる。具体的には、データベースサーバ201は、NULL indを除く、8バイトに満たない部分の右側3バイトはゼロパディングして演算する。
図18の例では、DATE型の被減算値データとして、「2013年7月17日」を示すビット列がレジスタr1にセットされている。また、DATE型の減算値データとして、「2012年10月25日」を示すビット列がレジスタr2にセットされている。
図19〜図23は、DATE型データの演算処理例を示す説明図である。ここでは、レジスタr1にセットした左辺の被減算値データから、レジスタr2にセットした右辺の減算値データを減算して、「2013年7月17日」と「2012年10月25日」との時間間隔を取得する場合を想定する。
図19において、(i)比較部402は、SIMD COMPARE 命令を実行することにより、レジスタr1の被減算値データとレジスタr2の減算値データとをバイト単位で一括比較して、比較結果をレジスタr3の先頭1バイト域に格納する。
図19の例では、3,4バイト目が左辺よりも右辺が大きいため、レジスタr3の先頭1バイト域において、3,4バイト目に対応する3,4ビット目のビット域に「1」が設定される。これにより、桁位置0〜7のうち、左辺よりも右辺が大きい桁位置3,4を特定することができる。
図20において、(ii)生成部403は、レジスタr3の先頭1バイト域の結果バイト「00011000」をコピーして、レジスタr4に結果バイト「00011000」を8バイト分セットする。そして、生成部403は、レジスタr4の8バイトMEMSETデータとレジスタr5の桁マスクとの並列論理積(AND)を求めて、結果をレジスタr6に格納する。これにより、1バイトの結果バイト「00011000」をSIMD命令で扱うことができる8バイトのデータに拡張することができる。
図21において、(iii)生成部403は、レジスタr3の先頭1バイト域の結果バイト「00011000」を1ビット左にシフトさせる。これにより、左辺から右辺の減算に伴って繰り下がりが発生する繰り下がり箇所を示す結果バイト「00110000」を生成することができる。そして、生成部403は、レジスタr3の先頭1バイト域の結果バイト「00110000」をコピーして、レジスタr7に結果バイト「00110000」を8バイト分セットする。
つぎに、生成部403は、レジスタr7の8バイトMEMSETデータとレジスタr5の桁マスクとの並列論理積(AND)を求めて、結果をレジスタr8に格納する。これにより、1バイトの結果バイト「00110000」をSIMD命令で扱うことができる8バイトのデータに拡張することができる。
そして、生成部403は、レジスタr8の拡張結果とレジスタr9の桁マスク(負)との並列論理積(AND)を求めて、結果をレジスタr10に格納する。これにより、繰り下がり箇所の値から1を減算するための繰り下がりマスクを生成することができる。レジスタr10の繰り下がりマスクは、上述した繰り下がり減算値データe0〜e7に対応する。
図22において、(iv)生成部403は、DATE型データに対応する日数換算マスクをレジスタr11にセットする。日数換算マスクは、DATE型データの各フィールドに対応する桁位置ごとに、該桁位置の値として取り得る値の個数を示すものである。日数換算マスクは、例えば、メモリ302に記憶されている。
ここで、「年」に対応する桁位置1,2の値として取り得る値の範囲はそれぞれ「0〜99」であり、桁位置1,2の値として取り得る値の個数はそれぞれ「100」である。また、「月」に対応する桁位置3の値として取り得る値の範囲は「1〜12」であり、桁位置3の値として取り得る値の個数は「12」である。
また、「日」に対応する桁位置4の値として取り得る値の範囲は「1〜31」であり、桁位置4の値として取り得る値の個数は「31」である。ただし、NULL indに対応する桁位置0の値として取り得る値の個数は「0」とする。同様に、paddingに対応する桁位置5〜7の値として取り得る値の個数は「0」とする。
つぎに、生成部403は、レジスタr11の日数換算マスクとレジスタr6の結果との並列論理積(AND)を求めて、結果をレジスタr12に格納する。これにより、繰り下がりに伴って左辺よりも右辺が大きい桁位置に加算する値を示すデータを生成することができる。レジスタr12の結果は、上述した繰り下がり加算値データd0〜d7に対応する。
そして、生成部403は、レジスタr12の結果とレジスタr10の繰り下がりマスクとを加算して、結果をレジスタr13に格納する。これにより、左辺よりも右辺が大きい桁位置に加算する値および繰り下がり箇所に減算する値を示す繰り下がり値のデータを生成することができる。レジスタr13の結果は、上述した繰り下がり値データc0〜c7に対応する。
図23において、(v)生成部403は、レジスタr13の繰り下がり値のデータとレジスタr1の被減算値データとを加算して、結果をレジスタr14に格納する。これにより、繰り下がり処理された被減算値データを生成することができる。
そして、生成部403は、レジスタr14の繰り下がり処理された被減算値データからレジスタr2の減算値データを減算して、結果をレジスタr15に格納する。これにより、「2013年7月17日」と「2012年10月25日」との時間間隔「8ヶ月22日」を取得することができる。
(データベースサーバ201の演算処理手順)
つぎに、データベースサーバ201の演算処理手順について説明する。ここでは、被減算値データおよび減算値データがTIMESTAMP型データの場合を例に挙げて説明する。
図24および図25は、データベースサーバ201の演算処理手順の一例を示すフローチャートである。図24のフローチャートにおいて、まず、データベースサーバ201は、レジスタr1,r2に被減算値データおよび減算値データをそれぞれ格納する(ステップS2401)。
つぎに、データベースサーバ201は、SIMD COMPARE 命令により、レジスタr1の被減算値データとレジスタr2の減算値データとをバイト単位で大小を一括比較して、比較結果をレジスタr3の先頭1バイト域に格納する(ステップS2402)。
具体的には、データベースサーバ201は、レジスタr3の先頭1バイト域において、左辺よりも右辺が大きいバイト位置に対応するビット域(桁)をON(1)に設定する。また、データベースサーバ201は、レジスタr3の先頭1バイト域において、左辺が右辺以上のバイト位置に対応するビット域(桁)をOFF(0)に設定する。
つぎに、データベースサーバ201は、レジスタr3の先頭1バイト域の結果バイトをコピーして、レジスタr4に結果バイトを8バイト分セットする(ステップS2403)。そして、データベースサーバ201は、レジスタr4のデータ(8バイトMEMSETデータ)とレジスタr5の桁マスクとの並列論理積(AND)をとって、結果をレジスタr6に格納する(ステップS2404)。
具体的には、データベースサーバ201は、レジスタr4とレジスタr5との間でいずれかの値が一致するバイト位置に対応するバイト域(桁)をON(1)に設定する。また、データベースサーバ201は、レジスタr4とレジスタr5との間でいずれの値も一致しないバイト位置に対応するバイト域(桁)をOFF(0)に設定する。
つぎに、データベースサーバ201は、レジスタr3の先頭1バイト域の結果バイトを1ビット左にシフトさせる(ステップS2405)。そして、データベースサーバ201は、1ビット左シフトした結果バイトをコピーして、レジスタr7に結果バイトを8バイト分セットする(ステップS2406)。
つぎに、データベースサーバ201は、レジスタr7のデータ(8バイトMEMSETデータ)とレジスタr5の桁マスクとの並列論理積(AND)をとって、結果をレジスタr8に格納する(ステップS2407)。
つぎに、データベースサーバ201は、レジスタr8の結果とレジスタr9の桁マスク(負)との並列論理積(AND)をとって、結果をレジスタr10に格納して(ステップS2408)、図25に示すステップS2501に移行する。
図25のフローチャートにおいて、まず、データベースサーバ201は、TIMESTAMP型データに対応する日数換算マスクをレジスタr11にセットする(ステップS2501)。そして、データベースサーバ201は、レジスタr11の日数換算マスクとレジスタr6の結果との並列論理積(AND)をとって、結果をレジスタr12に格納する(ステップS2502)。
つぎに、データベースサーバ201は、レジスタr12の結果とレジスタr10の繰り下がりマスクとを加算して、結果をレジスタr13に格納する(ステップS2503)。そして、データベースサーバ201は、レジスタr13の繰り下がり値データとレジスタr1の被減算値データとを加算して、結果をレジスタr14に格納する(ステップS2504)。
つぎに、データベースサーバ201は、レジスタr14の繰り下がり処理された被減算値データからレジスタr2の減算値データを減算して、結果をレジスタr15に格納する(ステップS2505)。そして、データベースサーバ201は、レジスタr15の結果を、日時間隔を示すデータとして出力して(ステップS2506)、本フローチャートによる一連の処理を終了する。
これにより、被減算値データが示す日時と減算値データが示す日時との日時間隔を示すデータを取得することができる。
以上説明したように、実施の形態にかかるデータベースサーバ201によれば、SIMD COMPARE 命令により、桁位置#が対応する、データa#(分割された被減算値データ)およびデータb#(分割された減算値データ)それぞれの大小比較を一括して行うことができる。これにより、日時や時刻を表すデータの各桁位置の大小比較にかかる処理ステップ数を1回に削減することができる。
また、データベースサーバ201によれば、並列処理命令により、データa#よりもデータb#が大きくなる桁位置#の値に、桁位置#の値として取り得る値の個数を加算するための繰り下がり加算値データd#をそれぞれ生成することができる。これにより、繰り下がりに伴って各桁位置に加算する値を示すデータを効率的に生成することができる。
また、データベースサーバ201によれば、並列処理命令により、繰り下がり箇所の桁位置#の値から1を減算するための繰り下がり減算値データe#をそれぞれ生成することができる。これにより、繰り下がりに伴って各桁位置に減算する値を示すデータを効率的に生成することができる。
また、データベースサーバ201によれば、並列処理命令により、桁位置#が対応する、繰り下がり加算値データd#および繰り下がり減算値データe#をそれぞれ加算することにより、繰り下がり値データc#をそれぞれ生成することができる。これにより、繰り下がりに伴って各桁位置に減算および加算する値を示すデータを効率的に生成することができる。
また、データベースサーバ201によれば、並列処理命令により、桁位置#が対応する、データa#に繰り下がり値データc#をそれぞれ加算することができる。これにより、繰り下がり処理された被減算値データを効率的に生成することができる。
また、データベースサーバ201によれば、並列処理命令により、桁位置#が対応する、繰り下がり値データc#が加算されたデータa#から、データb#をそれぞれ減算することができる。これにより、繰り下がり処理された被減算値データが示す時間(日時や時刻)と減算値データが示す時間との時間間隔を示すデータを効率的に取得することができる。
これらのことから、データベースサーバ201によれば、TIMESTAMP型データ、TIME型データおよびDATE型データのように、桁位置によって取り得る値の範囲が異なるデータの減算処理の高速化を図ることができる。
例えば、TIMESTAMP型データの桁位置ごとに、大小比較を繰り返し行って、繰り下がりに伴う減算および加算を繰り返し行うと、全体で42ステップ(減算:6ステップ、減算以外:36ステップ)かかる。これに対して、データベースサーバ201によれば、TIMESTAMP型データの減算にかかる処理ステップ数を全体で11ステップ(一括比較:1ステップ、一括繰り下げ:9ステップ、一括減算:1ステップ)に削減することができ、処理性能の向上を図ることができる。
なお、上述した説明では、データベースサーバ201で内部処理する際の各種データ型のデータ形式として、被減算値データおよび減算値データが8バイトの場合を例に挙げて説明したが、これに限らない。例えば、1命令で処理されるデータのビット長(例えば、16バイト、32バイト)に合わせて、被減算値データおよび減算値データを16バイトや32バイトとして扱うことにしてもよい。
また、上述した説明では、被減算値データおよび減算値データを1バイト単位で分割する場合を例に挙げて説明したが、これに限らない。例えば、1命令で複数のデータを同時に処理する命令の処理単位(例えば、2バイト、3バイト)に合わせて、被減算値データおよび減算値データを2バイト単位や3バイト単位で分割することにしてもよい。
本実施の形態で説明した演算方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本演算プログラムは、ハードディスク、フレキシブルディスク、CD−ROM、MO、DVD等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また、本演算プログラムは、インターネット等のネットワークを介して配布してもよい。
上述した実施の形態に関し、さらに以下の付記を開示する。
(付記1)コンピュータに、
被減算値データおよび減算値データを、1バイト単位でそれぞれ複数に分割し、
桁位置が対応する、前記分割された被減算値データおよび前記分割された減算値データそれぞれの大小を比較し、
前記比較結果に応じて、前記分割された被減算値データの桁情報から定まる繰り下がり値データを、前記分割された被減算値データにそれぞれ加算し、
桁位置が対応する、前記繰り下がり値データが加算された前記分割された被減算値データから、前記分割された減算値データをそれぞれ減算する、
処理を実行させることを特徴とする演算プログラム。
(付記2)前記コンピュータに、
桁位置に応じて、前記分割された被減算値データよりも前記分割された減算値データが大きくなる桁位置の値に該桁位置の値として取り得る値の個数を加算し、該桁位置に隣接する上位の桁位置の値から1を減算するための繰り下がり値データをそれぞれ生成する処理を実行させ、
前記加算する処理は、
桁位置が対応する、前記分割された被減算値データに、前記生成された繰り下がり値データをそれぞれ加算することを特徴とする付記1に記載の演算プログラム。
(付記3)前記コンピュータに、
桁位置に応じて、前記分割された被減算値データよりも前記分割された減算値データが大きくなる桁位置の値に前記桁位置の値として取り得る値の個数を加算するための繰り下がり加算値データをそれぞれ生成し、
桁位置に応じて、前記分割された被減算値データよりも前記分割された減算値データが大きくなる桁位置に隣接する上位の桁位置の値から1を減算するための繰り下がり減算値データをそれぞれ生成する処理を実行させ、
前記繰り下がり値データを生成する処理は、
桁位置が対応する、前記繰り下がり加算値データおよび前記繰り下がり減算値データをそれぞれ加算することにより、前記繰り下がり値データをそれぞれ生成することを特徴とする付記2に記載の演算プログラム。
(付記4)前記被減算値データおよび前記減算値データは、年、月、日、時、分および秒それぞれを示すバイト単位のデータを並べたTIMESTAMP型データであることを特徴とする付記1〜3のいずれか一つに記載の演算プログラム。
(付記5)前記被減算値データおよび前記減算値データは、時、分および秒それぞれを示すバイト単位のデータを並べたTIME型データであることを特徴とする付記1〜3のいずれか一つに記載の演算プログラム。
(付記6)前記被減算値データおよび前記減算値データは、年、月および日それぞれを示すバイト単位のデータを並べたDATE型データであることを特徴とする付記1〜3のいずれか一つに記載の演算プログラム。
(付記7)被減算値データおよび減算値データを、1バイト単位でそれぞれ複数に分割し、桁位置が対応する、前記分割された被減算値データおよび前記分割された減算値データそれぞれの大小を比較する比較部と、
前記比較結果に応じて、前記分割された被減算値データの桁情報から定まる繰り下がり値データを、前記分割された被減算値データにそれぞれ加算し、桁位置が対応する、前記繰り下がり値データが加算された前記分割された被減算値データから、前記分割された減算値データをそれぞれ減算する演算部と、
を有することを特徴とする演算装置。
(付記8)コンピュータが、
被減算値データおよび減算値データを、1バイト単位でそれぞれ複数に分割し、
桁位置が対応する、前記分割された被減算値データおよび前記分割された減算値データそれぞれの大小を比較し、
前記比較結果に応じて、前記分割された被減算値データの桁情報から定まる繰り下がり値データを、前記分割された被減算値データにそれぞれ加算し、
桁位置が対応する、前記繰り下がり値データが加算された前記分割された被減算値データから、前記分割された減算値データをそれぞれ減算する、
処理を実行することを特徴とする演算方法。
(付記9)被減算値データおよび減算値データを、1バイト単位でそれぞれ複数に分割し、
桁位置が対応する、前記分割された被減算値データおよび前記分割された減算値データそれぞれの大小を比較し、
前記比較結果に応じて、前記分割された被減算値データの桁情報から定まる繰り下がり値データを、前記分割された被減算値データにそれぞれ加算し、
桁位置が対応する、前記繰り下がり値データが加算された前記分割された被減算値データから、前記分割された減算値データをそれぞれ減算する、
処理をコンピュータに実行させる演算プログラムを記録したことを特徴とする前記コンピュータに読み取り可能な記録媒体。
100 演算装置
200 データベースシステム
201 データベースサーバ
202 クライアント装置
301 CPU
302 メモリ
303 I/F
304 磁気ディスクドライブ
305 磁気ディスク
401 取得部
402 比較部
403 生成部
404 演算部
405 出力部

Claims (8)

  1. コンピュータに、
    被減算値データおよび減算値データを、1バイト単位でそれぞれ複数に分割し、
    桁位置が対応する、前記分割された被減算値データおよび前記分割された減算値データそれぞれの大小を比較し、
    前記比較結果に応じて、前記分割された被減算値データの桁情報から定まる繰り下がり値データを、前記分割された被減算値データにそれぞれ加算し、
    桁位置が対応する、前記繰り下がり値データが加算された前記分割された被減算値データから、前記分割された減算値データをそれぞれ減算する、
    処理を実行させることを特徴とする演算プログラム。
  2. 前記コンピュータに、
    桁位置に応じて、前記分割された被減算値データよりも前記分割された減算値データが大きくなる桁位置の値に該桁位置の値として取り得る値の個数を加算し、該桁位置に隣接する上位の桁位置の値から1を減算するための繰り下がり値データをそれぞれ生成する処理を実行させ、
    前記加算する処理は、
    桁位置が対応する、前記分割された被減算値データに、前記生成された繰り下がり値データをそれぞれ加算することを特徴とする請求項1に記載の演算プログラム。
  3. 前記コンピュータに、
    桁位置に応じて、前記分割された被減算値データよりも前記分割された減算値データが大きくなる桁位置の値に前記桁位置の値として取り得る値の個数を加算するための繰り下がり加算値データをそれぞれ生成し、
    桁位置に応じて、前記分割された被減算値データよりも前記分割された減算値データが大きくなる桁位置に隣接する上位の桁位置の値から1を減算するための繰り下がり減算値データをそれぞれ生成する処理を実行させ、
    前記繰り下がり値データを生成する処理は、
    桁位置が対応する、前記繰り下がり加算値データおよび前記繰り下がり減算値データをそれぞれ加算することにより、前記繰り下がり値データをそれぞれ生成することを特徴とする請求項2に記載の演算プログラム。
  4. 前記被減算値データおよび前記減算値データは、年、月、日、時、分および秒それぞれを示すバイト単位のデータを並べたTIMESTAMP型データであることを特徴とする請求項1〜3のいずれか一つに記載の演算プログラム。
  5. 前記被減算値データおよび前記減算値データは、時、分および秒それぞれを示すバイト単位のデータを並べたTIME型データであることを特徴とする請求項1〜3のいずれか一つに記載の演算プログラム。
  6. 前記被減算値データおよび前記減算値データは、年、月および日それぞれを示すバイト単位のデータを並べたDATE型データであることを特徴とする請求項1〜3のいずれか一つに記載の演算プログラム。
  7. 被減算値データおよび減算値データを、1バイト単位でそれぞれ複数に分割し、桁位置が対応する、前記分割された被減算値データおよび前記分割された減算値データそれぞれの大小を比較する比較部と、
    前記比較結果に応じて、前記分割された被減算値データの桁情報から定まる繰り下がり値データを、前記分割された被減算値データにそれぞれ加算し、桁位置が対応する、前記繰り下がり値データが加算された前記分割された被減算値データから、前記分割された減算値データをそれぞれ減算する演算部と、
    を有することを特徴とする演算装置。
  8. コンピュータが、
    被減算値データおよび減算値データを、1バイト単位でそれぞれ複数に分割し、
    桁位置が対応する、前記分割された被減算値データおよび前記分割された減算値データそれぞれの大小を比較し、
    前記比較結果に応じて、前記分割された被減算値データの桁情報から定まる繰り下がり値データを、前記分割された被減算値データにそれぞれ加算し、
    桁位置が対応する、前記繰り下がり値データが加算された前記分割された被減算値データから、前記分割された減算値データをそれぞれ減算する、
    処理を実行することを特徴とする演算方法。
JP2014017265A 2014-01-31 2014-01-31 演算プログラム、演算装置および演算方法 Pending JP2015143949A (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2014017265A JP2015143949A (ja) 2014-01-31 2014-01-31 演算プログラム、演算装置および演算方法
US14/602,573 US20150220306A1 (en) 2014-01-31 2015-01-22 Calculation program, calculation device, and calculation method

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2014017265A JP2015143949A (ja) 2014-01-31 2014-01-31 演算プログラム、演算装置および演算方法

Publications (1)

Publication Number Publication Date
JP2015143949A true JP2015143949A (ja) 2015-08-06

Family

ID=53754870

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2014017265A Pending JP2015143949A (ja) 2014-01-31 2014-01-31 演算プログラム、演算装置および演算方法

Country Status (2)

Country Link
US (1) US20150220306A1 (ja)
JP (1) JP2015143949A (ja)

Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS5068749A (ja) * 1973-10-20 1975-06-09
US3987291A (en) * 1975-05-01 1976-10-19 International Business Machines Corporation Parallel digital arithmetic device having a variable number of independent arithmetic zones of variable width and location
JPS5232376A (en) * 1975-09-05 1977-03-11 Toshiba Corp Time calculation apparatus
JPS5316543A (en) * 1976-07-29 1978-02-15 Sharp Corp Time counter unit
JPH047737A (ja) * 1990-04-26 1992-01-13 Casio Comput Co Ltd 可変長10進減算装置
JPH08272591A (ja) * 1995-01-17 1996-10-18 Hewlett Packard Co <Hp> 整数クリップ方法
JPH09222992A (ja) * 1996-02-07 1997-08-26 Internatl Business Mach Corp <Ibm> 演算処理方法
JP2004118470A (ja) * 2002-09-25 2004-04-15 Matsushita Electric Ind Co Ltd プロセッサ

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6036350A (en) * 1995-12-20 2000-03-14 Intel Corporation Method of sorting signed numbers and solving absolute differences using packed instructions

Patent Citations (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS5068749A (ja) * 1973-10-20 1975-06-09
US3935438A (en) * 1973-10-20 1976-01-27 Vereinigte Flugtechnische Werke-Fokker Gmbh. Decimal adder
US3987291A (en) * 1975-05-01 1976-10-19 International Business Machines Corporation Parallel digital arithmetic device having a variable number of independent arithmetic zones of variable width and location
JPS51134539A (en) * 1975-05-01 1976-11-22 Ibm Digital adder
JPS5232376A (en) * 1975-09-05 1977-03-11 Toshiba Corp Time calculation apparatus
JPS5316543A (en) * 1976-07-29 1978-02-15 Sharp Corp Time counter unit
JPH047737A (ja) * 1990-04-26 1992-01-13 Casio Comput Co Ltd 可変長10進減算装置
JPH08272591A (ja) * 1995-01-17 1996-10-18 Hewlett Packard Co <Hp> 整数クリップ方法
JPH09222992A (ja) * 1996-02-07 1997-08-26 Internatl Business Mach Corp <Ibm> 演算処理方法
JP2004118470A (ja) * 2002-09-25 2004-04-15 Matsushita Electric Ind Co Ltd プロセッサ

Also Published As

Publication number Publication date
US20150220306A1 (en) 2015-08-06

Similar Documents

Publication Publication Date Title
JP6160259B2 (ja) 文字列探索方法、文字列探索装置および文字列探索プログラム
JP6989006B2 (ja) 秘密集約関数計算システム、秘密計算装置、秘密集約関数計算方法、およびプログラム
US9864751B2 (en) Establishing governance rules over data assets
JPWO2019208484A1 (ja) 秘密集約総和システム、秘密計算装置、秘密集約総和方法、およびプログラム
WO2017090475A1 (ja) 情報処理システム、関数作成方法および関数作成プログラム
JP6973634B2 (ja) 秘密集約中央値システム、秘密計算装置、秘密集約中央値方法、およびプログラム
JPWO2017072890A1 (ja) データ管理システム、データ管理方法およびプログラム
CN112328621B (zh) Sql转换方法、装置、计算机设备及计算机可读存储介质
JP2015143949A (ja) 演算プログラム、演算装置および演算方法
CN108255819A (zh) 一种基于分析工具spark的增值税数据整合方法及系统
US20220360458A1 (en) Control method, information processing apparatus, and non-transitory computer-readable storage medium for storing control program
JP2018045441A (ja) データ統合方法、データ統合装置、データ処理システム及びコンピュータプログラム
Carmichael et al. A framework for evaluating post hoc feature-additive explainers
JP2018195956A (ja) 符号化プログラム、符号化装置および符号化方法
Haq et al. Computational analysis of complex population dynamical model with arbitrary order
US11301544B2 (en) Computer architecture for performing inversion using correlithm objects in a correlithm object processing system
US11468259B2 (en) Computer architecture for performing division using correlithm objects in a correlithm object processing system
JP2023507688A (ja) プロセスのエッジテーブル表現
JP6336302B2 (ja) 情報処理装置、情報処理方法及びプログラム
Budanaev DATA DEDUPLICATION
Kakubava An alternative transient solution for semi-Markov queuing systems
US10693494B2 (en) Reducing a size of multiple data sets
US20230100289A1 (en) Searchable data processing operation documentation associated with data processing of raw data
JP2018538646A (ja) ログ分析のためのランドマークデリミタを推定するシステムおよび方法
WO2015170517A1 (ja) インメモリ管理システムおよびインメモリ管理用プログラム

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20161004

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20170710

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20170718

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20170919

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20171017