(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2023-01-19
(54)【発明の名称】算術および/またはビット単位ユニットによる条件文の実行
(51)【国際特許分類】
G06F 9/448 20180101AFI20230112BHJP
【FI】
G06F9/448 100
【審査請求】有
【予備審査請求】未請求
(21)【出願番号】P 2021577389
(86)(22)【出願日】2021-05-12
(85)【翻訳文提出日】2022-02-22
(86)【国際出願番号】 US2021031996
(87)【国際公開番号】W WO2022086594
(87)【国際公開日】2022-04-28
(32)【優先日】2020-10-21
(33)【優先権主張国・地域又は機関】US
(81)【指定国・地域】
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
(71)【出願人】
【識別番号】521565235
【氏名又は名称】チャリオット・テクノロジーズ・ラボ・インコーポレイテッド
(74)【代理人】
【識別番号】100108453
【氏名又は名称】村山 靖彦
(74)【代理人】
【識別番号】100110364
【氏名又は名称】実広 信哉
(74)【代理人】
【識別番号】100133400
【氏名又は名称】阿部 達彦
(72)【発明者】
【氏名】ティムール・リスペコフ
(57)【要約】
算術および/またはビット単位ユニットによる条件文の実行のための、コンピュータストレージ媒体上に符号化されたコンピュータプログラムを含む、方法、システム、および装置が提供される。ブール条件を備える条件文を備えるコンピュータプログラムがアクセスされる。ブール条件は、ブール条件の算術および/またはビット単位式に変換される。コンピュータプログラムの算術および/またはビット単位式は、ブール条件の代わりにブール条件の算術および/またはビット単位式を備える。コンピュータプログラムの算術および/またはビット単位式は、プロセッサの算術および/またはビット単位演算ユニットによって実行される。
【特許請求の範囲】
【請求項1】
方法であって、
コンピュータプログラムにアクセスするステップであって、前記コンピュータプログラムがブール条件を備える条件文を備える、ステップと、
前記ブール条件を、前記ブール条件の算術および/またはビット単位式に変換するステップと、
前記ブール条件の代わりに、前記ブール条件の前記算術および/またはビット単位式を備える、前記コンピュータプログラムの算術および/またはビット単位式を生成するステップと、
前記コンピュータプログラムの前記算術および/またはビット単位式を提供するステップであって、前記コンピュータプログラムの前記算術および/またはビット単位式が、プロセッサの算術および/またはビット単位演算ユニットによって実行されるように構成されるステップと
を備える、方法。
【請求項2】
前記ブール条件の前記算術および/またはビット単位式が、
前記ブール条件が検証された場合、前記ブール条件の前記算術および/またはビット単位式が1に等しく、
前記ブール条件が検証されていない場合、前記ブール条件の前記算術および/またはビット単位式が0に等しいことを検証する、請求項1に記載の方法。
【請求項3】
前記ブール条件が、第1の変数Aおよび第2の変数Bを取り、前記ブール条件を前記ブール条件の算術および/またはビット単位式に変換するステップが、
AからBを減算するステップと、
AからBを減算する前記ステップの結果の絶対値を計算するステップと、
AからBを減算する前記ステップの結果の前記絶対値に基づいて指数を計算するステップと、
前記計算された指数による基数のべき乗による指数を計算することと、
前記指数を前記基数で除算した余りに基づいて、前記ブール条件の前記算術および/またはビット単位式を計算するステップと
を備える、請求項1に記載の方法。
【請求項4】
前記ブール条件がA=Bであり、前記ブール条件を前記ブール条件の算術および/またはビット単位式に変換するステップが、
AからBを減算する前記ステップの前記結果の前記絶対値として前記指数を計算するステップと、
前記ブール条件の前記算術および/またはビット単位式を、前記指数を前記基数で前記除算した前記余りとして計算するステップと
を備える、請求項3に記載の方法。
【請求項5】
前記ブール条件がA≧Bであり、前記ブール条件を、前記ブール条件の算術および/またはビット単位式に変換するステップが、
AからBを減算する前記ステップの前記結果の前記絶対値から、AからBを減算する前記ステップの前記結果を減算するステップと、
AからBを減算する前記ステップの前記結果の前記絶対値から、AからBを減算する前記ステップの前記結果を減算する前記ステップの結果の絶対値として前記指数を計算するステップと、
前記ブール条件の前記算術および/またはビット単位式を、前記指数を前記基数で前記除算した前記余りとして計算するステップと
を備える、請求項3に記載の方法。
【請求項6】
前記ブール条件がA<Bであり、前記ブール条件を、前記ブール条件の算術および/またはビット単位式に変換するステップが、
AからBを減算する前記ステップの前記結果の前記絶対値から、AからBを減算する前記ステップの前記結果を減算するステップと、
AからBを減算する前記ステップの前記結果の前記絶対値から、AからBを減算する前記ステップの前記結果を減算する前記ステップの結果の絶対値として前記指数を計算するステップと、
前記指数による前記基数のべき乗による前記指数を計算するステップと、
前記ブール条件の前記算術および/またはビット単位式を、1から前記指数を前記基数で除算した前記余りを引いたものとして計算するステップと
を備える、請求項3に記載の方法。
【請求項7】
前記ブール条件がA=Bであり、前記第1の変数Aおよび第2の変数Bが浮動小数点型データであり、前記ブール条件を、前記ブール条件の算術および/またはビット単位式に変換するステップが、
AからBを減算する前記ステップの前記結果の前記絶対値に適用された天井関数の結果として前記指数を計算するステップと、
前記ブール条件の前記算術および/またはビット単位式を、前記指数を前記基数で前記除算した前記余りとして計算するステップと
を備える、請求項3に記載の方法。
【請求項8】
前記ブール条件がA≧Bであり、前記第1の変数Aおよび第2の変数Bが浮動小数点型データであり、前記ブール条件を、前記ブール条件の算術および/またはビット単位式に変換するステップが、
AからBを減算する前記ステップの前記結果の前記絶対値から、AからBを減算する前記ステップの前記結果を減算するステップと、
AからBを減算する前記ステップの前記結果の前記絶対値から、AからBを減算する前記ステップの前記結果を減算する前記ステップの結果の絶対値に適用された天井関数の結果として前記指数を計算するステップと、
前記ブール条件の前記算術および/またはビット単位式を、前記指数を前記基数で前記除算した前記余りとして計算するステップと
を備える、請求項3に記載の方法。
【請求項9】
前記ブール条件がA<Bであり、前記第1の変数Aおよび第2の変数Bが浮動小数点型データであり、前記ブール条件を、前記ブール条件の算術および/またはビット単位式に変換するステップが、
AからBを減算する前記ステップの前記結果の前記絶対値から、AからBを減算する前記ステップの前記結果を減算するステップと、
AからBを減算する前記ステップの前記結果の前記絶対値から、AからBを減算する前記ステップの前記結果を減算する前記ステップの結果の絶対値に適用された天井関数の結果として前記指数を計算するステップと、
前記指数による前記基数のべき乗による前記指数を計算するステップと、
前記ブール条件の前記算術および/またはビット単位式を、1から前記指数を前記基数で除算した前記余りを引いたものとして計算するステップと
を備える、請求項3に記載の方法。
【請求項10】
前記第1の変数Aおよび第2の変数Bがブール型データであり、前記ブール条件がA=Bであり、前記ブール条件を前記ブール条件の算術および/またはビット単位式に変換するステップが、
AとBの合計を計算するステップと、
前記ブール条件の前記算術および/またはビット単位式を、1から前記合計を前記基数で除算した余りを引いたものとして計算するステップと
を備える、請求項3に記載の方法。
【請求項11】
前記第1の変数Aおよび第2の変数Bが行列型データを備え、前記方法が、
前記第1の変数Aおよび第2の変数Bの各々を、前記第1の変数Aのそれぞれの第1の2つの要素のペアおよび前記第2の変数Bの第2の2つの要素のペアに分割するステップと、
比較のために、数学的シーケンスのメンバー間の差が大きくなる前記数学的シーケンスからの代表的な数を使用して、前記第1の変数Aおよび第2の変数Bの各々のより小さいバージョンを形成するステップであって、
前記第1の変数Aの前記より小さいバージョンの前記代表的な数の各々が、前記第1の変数Aの前記第1の2つの要素のペアのデータ値に等しい前記数学的シーケンスにおけるインデックスを有する前記数学的シーケンスのそれぞれのメンバーから計算され、
前記第2の変数Bの前記より小さいバージョンの前記代表的な数の各々が、前記第2の変数Bの前記第2の2つの要素のペアのデータ値に等しい前記数学的シーケンスにおけるインデックスを有する前記数学的シーケンスのそれぞれのメンバーから計算され、
前記第1の変数Aおよび第2の変数Bの各々が奇数の要素を有する場合、分割する前記ステップの前に、前記第1の変数Aおよび第2の変数Bの各々から単一の要素を削除し、前記第1の変数Aおよび第2の変数Bの各々からの前記単一の要素を、それぞれ前記第1の変数Aおよび第2の変数Bの前記より小さいバージョンに追加する、ステップと
を備える、請求項3に記載の方法。
【請求項12】
形成する前記ステップが、
前記第1の変数Aの前記より小さいバージョンの要素ごとに、前記第1の変数Aの前記第1の2つの要素のペアにおける前記データ値に対応する前記数学的シーケンスの前記それぞれのメンバーのうちの2つを合計することによって、前記第1の変数Aの前記より小さいバージョンの前記代表の数を計算するステップと、
前記第2の変数Bの前記より小さいバージョンの要素ごとに、前記第2の変数Bの前記第2の2つの要素のペアにおける前記データ値に対応する前記数学的シーケンスの前記それぞれのメンバーのうちの2つを合計することによって前記、第2の変数Bの前記より小さいバージョンの前記代表の数を計算するステップと
を備える、請求項11に記載の方法。
【請求項13】
前記第1の変数Aおよび第2の変数Bの各々をソートするステップを備え、行列型データ変数をソートする前記ステップが、
前記行列型データ変数と同じ数の要素を有する新しい変数をインスタンス化するステップと、
前記行列型データ変数を、前記ソートを実施するために使用される処理スレッドの数に等しい数のサブパートに分割するステップと、
前記各処理スレッドの各々によって、前記サブパートの各要素の値を前記行列型データ変数の他のすべての値と比較することと、前記行列型データ変数の前記要素のうち、前記サブパートの前記比較された要素よりも小さい、または、逆の位置インデックスの場合よりも大きい要素の数をカウントすることとによって、前記処理スレッドによって処理される前記サブパートにおける要素ごとの位置インデックスを決定するステップと、
前記新しい変数における値を、前記処理スレッドによって決定された前記位置インデックスに従って、昇順または降順で前記行列型データ変数からの値に置き換えるステップと、
前記ソートが昇順か降順かに応じて、前記新しい変数における残りの変更されていない値を、前記新しい変数における左隣接要素値または右隣接要素値のいずれかに置き換えるステップと
を備え、
前記新しい変数が、前記行列型データ変数のソートされたバージョンとして使用される、請求項11に記載の方法。
【請求項14】
前記第1の変数Aの前記第1の2つの要素のペアの第1の位置変数を計算するステップと、
前記第2の変数Bの前記第2の2つの要素のペアの第2の位置変数を計算するステップと
を備え、
要素のペアの各位置変数を計算するステップが、ブール条件Y>Xの結果による負の1に等しい数のべき乗を備え、Xが要素の前記ペアにおける前記第1の要素であり、Yが要素の前記ペアにおける前記第2の要素であり、
形成する前記ステップが、
前記第1の変数Aの前記より小さいバージョンの前記代表的な数を、前記第1の変数Aの前記より小さいバージョンの要素ごとに、前記第1の位置変数のうちの1つに、前記第1の変数Aの前記第1の2つの要素のペアの前記データ値に対応する前記数学的シーケンスの前記それぞれのメンバーのうちの2つの合計を乗算することによって計算するステップと、
前記第2の変数Bの前記より小さいバージョンの前記代表的な数を、前記第2の変数Bの前記より小さいバージョンの要素ごとに、前記第2の位置変数のうちの1つに、前記第2の変数Bの前記第2の2つの要素のペアの前記データ値に対応する前記数学的シーケンスの前記それぞれのメンバーのうちの2つの合計を乗算することによって計算するステップと
を備える、請求項11に記載の方法。
【請求項15】
前記基数が2に等しく、前記プロセッサが2進法を使用し、前記指数を前記基数で除算した前記余りが前記指数の最後のビットを取ることによって抽出される、請求項3に記載の方法。
【請求項16】
前記プロセッサがバイナリシステムを使用し、前記計算された指数による前記基数の前記べき乗を、1に等しいビットを、前記計算された指数に等しい桁数だけ左にシフトすることによって実施する、請求項3に記載の方法。
【請求項17】
前記ブール条件がA<Bであり、前記ブール条件を、前記ブール条件の算術および/またはビット単位式に変換するステップが、
AからB減算するステップと、
前記ブール条件の前記算術および/またはビット単位式を、AからBを減算する前記ステップの結果の借用値として計算するステップと
を備える、請求項1に記載の方法。
【請求項18】
前記コンピュータプログラムの前記算術および/またはビット単位式を提供するステップが、
前記コンピュータプログラムの前記算術および/またはビット単位式を、算術および/またはビット単位式の複数のフラグメントにフラグメント化するステップを備え、
算術および/またはビット単位式の前記フラグメントが、並列で実行されるように構成される、請求項1に記載の方法。
【請求項19】
前記ブール条件が、算術文として定式化された、結果として生じるタスクを備え、前記コンピュータプログラムの前記算術および/またはビット単位式を生成するステップが、
前記結果として生じるタスクに、前記ブール条件の前記算術および/またはビット単位式を乗算するステップを備える、請求項2に記載の方法。
【請求項20】
前記ブール条件が、算術文として定式化された代替タスクを備えることができ、前記コンピュータプログラムの前記算術および/またはビット単位式を生成するステップが、
前記代替タスクに、1から前記ブール条件の前記算術および/またはビット単位式を引いたものを乗算するステップを備える、請求項19に記載の方法。
【請求項21】
前記ブール条件が、非算術文として定式化された、結果として生じるタスクを備え、前記コンピュータプログラムの前記算術および/またはビット単位式を生成するステップが、
前記コンピュータプログラムの前記算術および/またはビット単位式に、前記ブール条件の前記算術および/またはビット単位式に関連付けられるラベルへの無条件ジャンプを含めるステップを備える、請求項2に記載の方法。
【請求項22】
前記ブール条件の前記算術および/またはビット単位式の値が1に等しい場合、前記ラベルが前記結果として生じるタスクの文の開始と等しくなる、請求項21に記載の方法。
【請求項23】
前記ブール条件が、非算術文として定式化された代替タスクを備え、前記ラベルが、前記ブール条件の前記算術および/またはビット単位式の前記値が0に等しい場合、前記代替タスクの文の開始に等しい、請求項22に記載の方法。
【請求項24】
前記方法が、
前記算術および/またはビット単位演算ユニットによって、前記コンピュータプログラムの前記算術および/またはビット単位式を実行するステップをさらに備える、請求項1に記載の方法。
【請求項25】
少なくとも変換する前記ステップが第1のコンピュータによって実施され、実行する前記ステップが第2のコンピュータによって実施される、請求項24に記載の方法。
【請求項26】
変換する前記ステップおよび実行する前記ステップが、同じコンピュータによって実施される、請求項24に記載の方法。
【請求項27】
少なくとも1つの制御ユニットと、少なくとも1つの算術および/またはビット単位演算ユニットと、少なくとも1つのレジスタユニットとを備える1つまたは複数の命令処理ユニットと、
前記1つまたは複数の命令処理ユニットと結合された1つまたは複数のメモリユニットと
を備え、
前記システムは、コンピュータプログラムにおいて、それぞれがブール条件を備える実質的にすべての条件文を、前記実質的にすべての条件文の前記ブール条件の算術および/またはビット単位式を実行するために前記少なくとも1つの算術および/またはビット単位演算ユニットを使用することによって実施するように構成される、システム。
【請求項28】
前記システムの前記少なくとも1つの制御ユニットまたは別個のデータ処理装置が、請求項1から26のいずれか一項に記載の方法動作を実施するように構成され、
前記プロセッサの前記少なくとも1つの算術および/またはビット単位演算ユニットが、前記コンピュータプログラムの前記算術および/またはビット単位式を実行するように構成された前記1つまたは複数の命令処理ユニットを備える、請求項27に記載のシステム。
【請求項29】
前記少なくとも1つの算術および/またはビット単位演算ユニットが、算術ブロック、ビット単位のシフトブロック、およびビット単位の論理ブロックのうちの1つまたは複数を備え、前記少なくとも1つの算術および/またはビット単位演算ユニットが、デジタルコンパレータを含まない、請求項27に記載のシステム。
【請求項30】
第1の変数Aおよび第2の変数Bを比較するブール条件を備える条件文を備えるコンピュータプログラムにアクセスするステップであって、前記第1の変数Aおよび第2の変数Bの各々が行列型データを備える、ステップと、
前記第1の変数Aおよび第2の変数Bの各々を、前記第1の変数Aのそれぞれの第1の2つの要素のペアおよび前記第2の変数Bの第2の2つの要素のペアに分割するステップと、
比較のために、数学的シーケンスのメンバー間の差が大きくなる前記数学的シーケンスからの代表的な数を使用して、前記第1の変数Aおよび第2の変数Bの各々のより小さいバージョンを形成するステップであって、
前記第1の変数Aの前記より小さいバージョンの前記代表的な数の各々が、前記第1の変数Aの前記第1の2つの要素のペアのデータ値に等しい前記数学的シーケンスにおけるインデックスを有する前記数学的シーケンスのそれぞれのメンバーから計算され、
前記第2の変数Bの前記より小さいバージョンの前記代表的な数の各々が、前記第2の変数Bの前記第2の2つの要素のペアのデータ値に等しい前記数学的シーケンスにおけるインデックスを有する前記数学的シーケンスのそれぞれのメンバーから計算され、
前記第1の変数Aおよび第2の変数Bの各々が奇数の要素を有する場合、
分割する前記ステップの前に、前記第1の変数Aおよび第2の変数Bの各々から単一の要素を削除し、
前記第1の変数Aおよび第2の変数Bの各々からの前記単一の要素を、それぞれ前記第1の変数Aおよび第2の変数Bの前記より小さいバージョンに追加する、ステップと、
前記コンピュータプログラムの実行時に前記条件文の前記ブール条件を評価するために、前記第1の変数Aおよび第2の変数Bの前記より小さいバージョンを比較するステップと
を備える、方法。
【請求項31】
形成する前記ステップが、
前記第1の変数Aの前記より小さいバージョンの要素ごとに、前記第1の変数Aの前記第1の2つの要素のペアにおける前記データ値に対応する前記数学的シーケンスの前記それぞれのメンバーのうちの2つを合計することによって、前記第1の変数Aの前記より小さいバージョンの前記代表の数を計算するステップと、
前記第2の変数Bの前記より小さいバージョンの要素ごとに、前記第2の変数Bの前記第2の2つの要素のペアにおける前記データ値に対応する前記数学的シーケンスの前記それぞれのメンバーのうちの2つを合計することによって前記、第2の変数Bの前記より小さいバージョンの前記代表の数を計算するステップと
を備える、請求項30に記載の方法。
【請求項32】
前記第1の変数Aの前記第1の2つの要素のペアの第1の位置変数を計算するステップと、
前記第2の変数Bの前記第2の2つの要素のペアの第2の位置変数を計算するステップと
を備え、
要素のペアの各位置変数を計算するステップが、ブール条件Y>Xの結果による負の1に等しい数のべき乗を備え、Xが要素の前記ペアにおける前記第1の要素であり、Yが要素の前記ペアにおける前記第2の要素であり、
形成する前記ステップが、
前記第1の変数Aの前記より小さいバージョンの前記代表的な数を、前記第1の変数Aの前記より小さいバージョンの要素ごとに、前記第1の位置変数のうちの1つに、前記第1の変数Aの前記第1の2つの要素のペアの前記データ値に対応する前記数学的シーケンスの前記それぞれのメンバーのうちの2つの合計を乗算することによって計算するステップと、
前記第2の変数Bの前記より小さいバージョンの前記代表的な数を、前記第2の変数Bの前記より小さいバージョンの要素ごとに、前記第2の位置変数のうちの1つに、前記第2の変数Bの前記第2の2つの要素のペアの前記データ値に対応する前記数学的シーケンスの前記それぞれのメンバーのうちの2つの合計を乗算することによって計算するステップと
を備える、請求項30に記載の方法。
【請求項33】
少なくとも1つの制御ユニットと、少なくとも1つの算術および/またはビット単位演算ユニットと、少なくとも1つのレジスタユニットとを備える1つまたは複数の命令処理ユニットと、
前記1つまたは複数の命令処理ユニットと結合された1つまたは複数のメモリユニットと
を備え、
前記1つまたは複数のメモリユニットが、前記1つまたは複数の命令処理ユニットに、請求項30から32のいずれか一項に記載の方法動作を実施させるように構成される、システム。
【請求項34】
行列型データオブジェクトをソートする方法であって、
前記行列型データオブジェクトと同じ数の要素を持つ新しいオブジェクトをインスタンス化するステップと、
前記行列型のデータオブジェクトを、前記ソートを実施するために使用される処理スレッドの数に等しい数のサブパートに分割するステップと、
前記各処理スレッドの各々によって、前記サブパートの各要素の値を前記行列型データオブジェクトの他のすべての値と比較することと、前記行列型データオブジェクトの前記要素のうち、前記サブパートの前記比較された要素よりも小さい、または、逆の位置インデックスの場合よりも大きい要素の数をカウントすることとによって、前記処理スレッドによって処理される前記サブパートにおける要素ごとの位置インデックスを決定するステップであって、決定する前記ステップが、請求項1から12および請求項14から26のいずれか一項に記載の前記方法を実施するステップを備える、ステップと、
前記新しいオブジェクトにおける値を、前記処理スレッドによって決定された前記位置インデックスに従って、昇順または降順で前記行列型データオブジェクトからの値に置き換えるステップと、
前記ソートが昇順か降順かに応じて、前記新しいオブジェクトにおける残りの変更されていない値を、前記新しいオブジェクトにおける左隣接要素値または右隣接要素値のいずれかに置き換えるステップであって、前記新しいオブジェクトが前記行列型データオブジェクトのソートされたバージョンとして使用される、ステップと
を備える、方法。
【請求項35】
少なくとも1つの制御ユニットと、少なくとも1つの算術および/またはビット単位演算ユニットと、少なくとも1つのレジスタユニットとを備える1つまたは複数の命令処理ユニットと、
前記1つまたは複数の命令処理ユニットと結合された1つまたは複数のメモリユニットと
を備え、
前記1つまたは複数のメモリユニットが、前記1つまたは複数の命令処理ユニットに、請求項34に記載の方法動作を実施させるように構成される、システム。
【発明の詳細な説明】
【技術分野】
【0001】
本明細書は、一般にコンピューティングシステムに関し、より詳細には、コンピューティング回路による条件文および式の実行に関する。
【背景技術】
【0002】
コンピュータサイエンスでは、条件文はプログラミング言語の機能であり、指定されたブール条件がTrueまたはFalseのどちらに評価されるかに応じて、様々な計算またはアクションを実施する。
【0003】
条件文の実行には、ブール条件の評価、つまり数の比較が必要である。この比較により、一方の数が他方の数よりも大きいか、等しいか、または小さいかが決定される。ブール条件は、従来、デジタルコンパレータによって評価される。デジタルコンパレータは、2進数の入力として2つの数を取り、一方の数が他方の数よりも大きいか、小さいか、または等しいかを決定するハードウェア電子デバイスである。
【0004】
条件文は、コンピュータコードのいずれかの部分の実行に切り替えるために、デジタルコンパレータの出力を使用する。デジタルコンパレータの各「if-then do」動作全体には、プロセッサの少なくとも2クロックサイクルが必要である。さらに、デジタルコンパレータは、マルチレベルの条件付きタスクの並列実行を実施できないことがよくある。その結果、デジタルコンパレータ(または、ALUの論理ブロック)は、多くの場合、集積回路プロセッサのボトルネックを構成する。
【発明の概要】
【課題を解決するための手段】
【0005】
本明細書は、システムが、算術ブロックおよび/またはプロセッサのビット単位でのみ条件文を備えるコンピュータプログラムを実行する方法を説明する。
【0006】
本明細書に記載されている主題の特定の実施形態は、以下の利点のうちの1つまたは複数を実現するように実装することができる。
【0007】
条件文は、算術演算および/またはビット演算のセットに変換される。したがって、コンピュータプログラムは、プロセッサの算術および/またはビット単位ユニット(arithmetic and/or bitwise unit)によってみ実行することができる。特に、コンピュータプログラムは、デジタルコンパレータを使用せずに実行することができる。上記で説明したように、デジタルコンパレータの各動作全体には、プロセッサの少なくとも2クロックサイクルが必要である。一方、プロセッサの算術演算装置は、1クロックサイクルにおいて大部分の算術計算を実行することができる。このように、本明細書で説明されている技法は、プロセッサによるコンピュータプログラムの実行速度を改善する。デジタルコンパレータは削除することができ、これにより、算術および/またはビット単位演算ユニット(arithmetic and/or bitwise operation unit)用のスペースを増やすことができるようになる。したがって、一定のチップサイズの場合、チップのパワーを上げることができ、その結果、実行速度が向上する。
【0008】
さらに、デジタルコンパレータは、マルチレベルの条件付きタスクの並列実行を実施できないことがよくある。その結果、デジタルコンパレータは、多くの場合、集積回路プロセッサのボトルネックを構成する。算術および/またはビット単位式(arithmetic and/or bitwise expression)は、一方で、複数のフラグメントにフラグメント化することができ、次いで、フラグメントは、複数の算術ブロックおよび/またはビット単位のブロックによって並列に実行することができる。このように、本明細書で説明されている技法は、並列に動作する複数の算術ブロックによってコンピュータプログラムを実行することによって、プロセッサの実行速度をさらに改善させることができる。
【0009】
本方法は、任意の適切なプログラミング言語の様々なレベルにおいて使用することができる。特に、本方法は、任意の適切な低レベル言語(たとえば、アセンブリ言語、または命令セットアーキテクチャ(ISA)のレベル)、ならびに特定のソフトウェアプログラムの任意の適切な高レベルプログラミング言語(たとえば、C++コード、またはJavaなど)において使用することができる。
【0010】
本明細書の主題の1つまたは複数の実施形態の詳細は、添付の図面および以下の説明に記載されている。主題の他の特徴、態様、および利点は、説明、図面、および特許請求の範囲から明らかになるであろう。
【図面の簡単な説明】
【0011】
【
図2】プロセッサの算術および/またはビット単位ユニットのみでコンピュータプログラムを実行するための例示的なプロセスのフローチャートである。
【
図3】if-then(-else)条件文の基本構造を示す擬似コードを示す図である。
【
図4】ブール条件を算術および/またはビット単位式に変換するための例示的なプロセスのフローチャートである。
【
図5】A=Bを算術および/またはビット単位式のA=Bに変換するための例示的なプロセスのフローチャートである。
【
図6】A≧Bを算術および/またはビット単位式のA≧Bに変換するための例示的なプロセスのフローチャートである。
【
図7A】A<Bを算術および/またはビット単位式のA<Bに変換するための例示的なプロセスのフローチャートである。
【
図7B】A<Bを算術および/またはビット単位式のA<Bに変換するための例示的なプロセスのフローチャートである。
【
図8】条件文が算術本体を有する場合に、コンピュータプログラムの算術および/またはビット単位式を生成するための例示的なプロセスのフローチャートである。
【
図9】条件文が非算術本体を有する場合に、コンピュータプログラムの算術および/またはビット単位式を生成するための例示的なプロセスのフローチャートである。
【
図10】コンピュータプログラムの算術および/またはビット単位式を提供するための例示的なプロセスのフローチャートである。
【
図11A】算術本体を有する条件文を備えるC++コンピュータプログラムの例を示す図である。
【
図11B】
図11Aのコンピュータプログラムの変換から生じるC++コンピュータプログラムの例を示す図である。
【
図11C】算術本体を有する条件文を備えるアセンブリ言語コンピュータプログラムの例を示す図である。
【
図11D】
図11Cのコンピュータプログラムの変換から生じるアセンブリ言語コンピュータプログラムの例を示す図である。
【
図12A】非算術本体を有する条件文を備えるC++コンピュータプログラムの例を示す図である。
【
図12B】
図12Aのコンピュータプログラムの変換から生じるC++コンピュータプログラムの例を示す図である。
【
図12C】非算術本体を有する条件文を備えるアセンブリ言語コンピュータプログラムの例を示す図である。
【
図12D】
図12Cのコンピュータプログラムの変換から生じるアセンブリ言語コンピュータプログラムの例を示す図である。
【
図13A】算術および/またはビット単位演算ユニットの集積回路の組合せ論理回路の例を示す図である。
【
図13B】算術および/またはビット単位演算ユニットの集積回路の組合せ論理回路の例を示す図である。
【
図14】行列型データのサイズを縮小するための例示的なプロセスのフローチャートである。
【
図15】行列型データの並列ソートのための例示的なプロセスのフローチャートである。
【発明を実施するための形態】
【0012】
図1は、例示的なシステム100を示す図である。システム100は、本明細書に記載された技法を実装することができるシステムの一例である。
【0013】
システム100は、中央処理装置(CPU)、グラフィックス処理装置(GPU)、ニューラル処理装置(NPU)、テンソルプロセッサ装置(TPU)、または条件付きタスクの実行を可能にする他の任意のタイプの処理装置などのプロセッサ110を含む。プロセッサは、コンピュータプログラム182内の命令によって指定された基本的な算術、論理、制御、および入出力(I/O)動作を実施する。プロセッサ110はマイクロプロセッサであり得、CPUは、単一の金属酸化物半導体(MOS)集積回路(IC)チップ160に含まれている。CPUを含むICはまた、ダイナミックランダムアクセスメモリ(DRAM)などのメモリユニット150、ならびに複数レベルのキャッシュメモリ、および入力デバイス180または出力デバイス190に接続するための周辺機器インターフェースを含むことができる。
【0014】
プロセッサ110は、算術演算およびビット単位の論理演算を実施する1つまたは複数の算術および/またはビット単位演算ユニット(ABU)130を含む、いくつかの機能コンポーネントと、ABU130にオペランドを供給し、ABU動作の結果を記憶する1つまたは複数のレジスタ140と、ABU130、レジスタ140、および他のコンポーネントの協調動作を指示することによって命令の実行を調整する1つまたは複数の制御ユニット(CU)120とを含む。
【0015】
ABU130は、算術および/またはビット単位の論理演算を実施するデジタル回路である。ABU130は、1つまたは複数の算術ブロック131、1つまたは複数のビット単位シフトブロック132、および1つまたは複数のビット単位論理ブロック133を含むことができる。算術ブロック131は、加算、キャリー付き加算、減算、ボロー付き減算などの算術演算を実施する。ビット単位シフトブロック132は、算術シフト、論理シフト、回転、キャリーを通じた回転などのビットシフト動作を実施する。ビット単位論理ブロック133は、AND、OR、排他的論理和などのビット単位の論理演算を実施する。いくつかの実施形態では、ABU130はデジタルコンパレータを含まない。いくつかの実施形態では、プロセッサ110はデジタルコンパレータを含まない。
【0016】
動作中、プロセッサ110は、一連の命令を備えるコンピュータプログラム182にアクセスして実行する。コンピュータプログラム182は、メモリユニット150または入力デバイス180からアクセスすることができる。プロセッサは、フェッチ、デコード、および実行のステップを含む命令サイクルに従うことができる。複数の命令を同時にフェッチ、デコード、および実行することができる。実行ステップは、単一のアクションまたは一連のアクションで構成することができる。各アクションの間、プロセッサの様々な部分が電気的に接続されているため、所望の動作のすべてまたは一部を実施することができ、次いでアクションが完了する。結果は、レジスタ140のうちの1つまたはメモリユニット150に書き込むことができる。
【0017】
CU120は、プロセッサ110の動作を指示する。CU120は、プロセッサによってアクセスされたコンピュータプログラム182に応答するために、メモリ150、ABU130を制御する。特に、CU120は、タイミングおよび制御信号を提供することによって、他のユニットの動作を指示することができる。
【0018】
いくつかの実施形態では、CU120は、コンピュータプログラム182をコンピュータプログラムの算術および/またはビット単位式122に変換する変換ユニット121を備える。変換ユニット121は、コンピュータプログラム182にある条件文を識別し、条件文の算術および/またはビット単位式に変換する。変換ユニット121は、算術演算および/またはビット演算ならびにオペランドに基づいて、コンピュータプログラム182の算術および/またはビット単位式122を生成する。次いで、CU120は、コンピュータプログラム182の算術および/またはビット単位式122をABU130に提供する。他の実施形態では、システムは、コンピュータプログラム182にある条件文を識別し、条件文の算術および/またはビット単位式に変換する別個のデータ処理装置を備える。
【0019】
いくつかの実施形態では、条件文の算術および/またはビット単位式は、算術演算および/またはビット演算のみを備える。いくつかの実施形態では、実質的にすべての条件文(たとえば、50%超、60%超、70%超、80%超、90%超、または95%超)が変換されるが、条件文の定義された適切なサブセットを評価するために使用することができるデジタルコンパクタがプロセッサにまだ含まれている場合は、一部の条件文を変換する必要はない。
【0020】
ABU130は、CU120からコンピュータプログラム182の算術および/またはビット単位式122にアクセスする。ABU130は、レジスタ140またはメモリユニット150からオペランドにアクセスすることができる。オペランドはまた、ABU130自体によって生成される定数でもある。ABU130はまた、前の動作または現在の動作に関する情報を伝達するステータス情報にアクセスし得る。ABU130は、実施された動作の結果を出力する。結果は、データワードおよび/またはステータス情報の両方で構成される。結果は、レジスタ140またはメモリユニット150に記憶することができる。
【0021】
図2は、コンピュータプログラムを実行するための例示的なプロセスのフローチャートである。本プロセスは、1つまたは複数の場所にある1つまたは複数のコンピュータにインストールされ、本明細書に従ってプログラムされた1つまたは複数のコンピュータプログラムによって実装することができる。たとえば、本プロセスは、
図1に示されるシステム100によって実施することができる。便宜上、本プロセスは、1つまたは複数のコンピュータのシステムによって実施されるものとして説明される。いくつかの実施形態は、変換されたコンピュータプログラムがシステム100上で実行される前に、たとえば、完全に異なるコンピュータシステム上で変換を行うためにコンピュータプログラムを前処理することを含む。たとえば、ソースコンパイラは、ターゲットコンピュータのオブジェクトコードおよび/または機械レベルのコードを生成する際に変換を実施することができる。
【0022】
システムは、コンピュータプログラム(たとえば、
図1のコンピュータプログラム182)にアクセスする(210)。システムは、コンピュータプログラムがブール条件を含む少なくとも1つの条件文を含むかどうかを決定する(205)。コンピュータプログラムが少なくとも1つの条件文を含む場合、システムは、ブール条件をブール条件の算術および/またはビット単位式に変換する(220)。コンピュータプログラムが条件文を含まない場合、システムは、実行のために、コンピュータの算術および/またはビット単位式をABU130に提供する(240)。
【0023】
条件文を実行すると、指定されたブール条件がTrueまたはFalseのどちらに評価されるかに応じて、プロセッサは関連付けられるタスクを実施する。タスクは、1つまたは複数の計算および/あるいは1つまたは複数のアクションを含むことができる。指定されたブール条件では、少なくとも変数を値または別の変数のいずれかと比較する必要がある。たとえば、比較により、変数の値(たとえば、A)が別の変数(たとえば、B)の値より大きい(たとえば、A>B)、等しい(たとえば、A=B)、またはより小さい(たとえば、A<B)かどうかを決定することができる。比較の結果は、関連付けられるタスクがプロセッサによって実行されるかどうかを決定する。
【0024】
図3は、if-then(-else)条件文310の基本構造を示す擬似コードを示している。インタプリタがIfを見つけると、ブール条件301を予期し、そのブール条件301を値TrueまたはFalseのいずれかに評価する。条件がTrueの場合、プロセッサは結果として生じるタスク302を実行する。それ以外の場合、実行は次のブランチで続行される。代替タスク303が(たとえば、Elseブロック内に)存在する場合、プロセッサは代替タスク303を実行する。Elseブランチがない場合、プロセッサはEnd Ifに続く文を実行する。いずれかのブランチが実行された後、制御はend If後のポイントに戻る。
【0025】
再び
図2を参照すると、システム(たとえば、変換ユニット121)は、ブール条件をブール条件の算術および/またはビット単位式に変換する(220)。ブール条件の算術および/またはビット単位式は、条件文の変数を変数として取る。いくつかの実装形態では、ブール条件の算術および/またはビット単位式は、ブール条件の算術および/またはビット単位式の出力が次の2つのプロパティを検証するようなものである。変数の値がブール条件を検証する場合、ブール条件の算術および/またはビット単位式は1に等しくなる。変数の値がブール条件を検証しない場合、ブール条件の算術および/またはビット単位式は0に等しくなる。そのため、ブール値TRUEは1に変換され、ブール値FALSEは0に変換される。実行時に、ブール条件の算術および/またはビット単位式は、実行される実行可能コードの部分を維持し、実行されない部分をヌルにする。ブール条件文の算術および/またはビット単位式への変換は、
図4に関連してより詳細に説明されている。
【0026】
変換は、任意の適切なプログラミング言語の様々なレベルにおいて実施することができる。特に、本方法は、任意の適切な低レベル言語(たとえば、アセンブリ言語、または命令セットアーキテクチャ(ISA)のレベル)、ならびに特定のソフトウェアプログラムの任意の適切な高レベルプログラミング言語(たとえば、C++コード、またはJavaなど)において使用することができる。本プロセスは、ソースコードをターゲット機械の実行可能コードにコンパイルする際の前処理ステップとして実施することもでき、コンパイラではなくインタプリタに実装する際のオンザフライ処理として実施することもできる。
【0027】
ブール条件を算術および/またはビット単位式に変換するために使用することができる特定の一般的な変換式の例を以下に示す。
【0028】
特定の変換式の例(asmおよび/またはISAレベル)
整数、文字、またはブール型の特定の変換式
answer=z|k|%z(x=yおよびx>=yの条件の場合)
answer=1-z|k|%z(他の条件の場合)
float型またはdouble型の特定の変換式(浮動小数点型データ)
answer=zceil|(k)|%z(x=yおよびx>=yの条件の場合)
answer=1-zceil|(k)|%z(他の条件の場合)
【0029】
すべてのデータ型(配列および文字列を含む)の一般的な変換式の例
ブール条件の一般的な変換「if(=)」
【0030】
【0031】
ブール条件の一般的な変換「if(>=)」
【0032】
【0033】
ブール条件の一般的な変換「if(<)」
【0034】
【0035】
ブール条件の一般的な変換「if(>)」
【0036】
【0037】
表記:
- zは基数である。
- A、BはN個の要素で構成される配列である。
- A[i]、B[i]は配列の要素である。整数、浮動小数点数などの単一の要素は、要素が1つしかない1次元配列(行ベクトル行列)である。
- answerは、ブール条件の算術および/またはビット単位式である。
- %は除算の余りである。
- ceil(x)は、xをx以上の最小の整数にマッピングする天井関数である。
- ブール条件がx=yの場合、k=x-y
- ブール条件がx≧yの場合、k=(x-y)-(|x-y|)
- x<yは、x≧yの「else」の結果である
【0038】
基数zは、記数法のベースにすることができる。記数法をベースにしたほとんどの算術演算(たとえば、べき関数および除算の余り)は、シフト演算ですぐに計算することができる。特に、プロセッサが2進法を使用している場合、zは2に等しくなる。
【0039】
配列および文字列の場合、配列の要素を正規化することができる。任意の知られている正規化方法を使用することができる。これにより、条件文の実行速度が改善される。
【0040】
図2に戻って参照すると、システム(たとえば、変換ユニット121)は、コンピュータプログラムの算術および/またはビット単位式を生成する(230)。システムは、コンピュータプログラムにおけるブール条件を、ブール条件の算術および/またはビット単位式に置き換える。実行時に、ブール条件の算術および/またはビット単位式は、実行される実行可能コードの部分を維持し、実行されない部分をヌルにする。コンピュータプログラムの算術および/またはビット単位式の生成は、
図8および
図9に関連してより詳細に説明されている。
【0041】
システム(たとえば、CU120)は、実行のために、コンピュータプログラムの算術および/またはビット単位式を、算術および/またはビット単位ユニット(たとえば、ABU130)に提供する(240)。コンピュータプログラムの算術および/またはビット単位式は、任意の適切なプログラミング言語、特に、任意の適切な低レベル言語(たとえば、アセンブリ言語、または命令セットアーキテクチャ(ISA)のレベル)、ならびに特定のソフトウェアプログラムの任意の適切な高レベルプログラミング言語(たとえば、C++コード、またはJavaなど)であることができる。コンピュータプログラムの算術および/またはビット単位式の実行には、数を直接比較する必要はない。したがって、システムは、コンピュータプログラムの算術および/またはビット単位式を、算術および/またはビット単位ユニット、特にデジタルコンパレータを含まない算術および/またはビット単位ユニットに提供することができる。
【0042】
システム(たとえば、ABU130)は、コンピュータプログラムの算術および/またはビット単位式を実行する(250)。条件文の算術および/またはビット単位式を実行すると、数の比較を必要とせずに、条件文の実行と同じ結果が得られる。このように、デジタルコンパレータを含まないプロセッサは、コンピュータプログラムを実行することができる。算術本体を有する条件文の実行は、
図11Aおよび
図11Bに関連してより詳細に説明されている。非算術本体を有する条件文の実行は、
図12Aおよび
図12Bに関連してより詳細に説明されている。
図10に関連してより詳細に説明されるように、コンピュータプログラムの算術および/またはビット単位式はフラグメント化することができ、特にマルチレベルの条件文の場合フラグメントは並列に(たとえば、同時に、または並行して)実行される。
【0043】
図4は、ブール条件を算術および/またはビット単位式に変換する(たとえば、
図2の220)ための例示的なプロセスのフローチャートである。ブール条件は、Aを第1の変数として、Bを第2の変数として取る。
【0044】
システム(たとえば、変換ユニット121)は、AからBを減算する(410)。
【0045】
システム(たとえば、変換ユニット121)は、減算の結果の絶対値を計算する(420)。
【0046】
システム(たとえば、変換ユニット121)は、減算の結果の絶対値に基づいて指数を計算する(430)。
【0047】
システム(たとえば、変換ユニット121)は、計算された指数による基数のべき乗によって指数を計算する(440)。基数は任意の数にすることができる。特に、基数は、プロセッサによって使用される記数法のベースにすることができる。特に、プロセッサが2進法を使用している場合、基数は2に等しくなる。記数法をベースにしたほとんどの算術演算(たとえば、べき関数および除算の余り)は、シフト演算ですぐに計算することができる。特に、計算された指数による基数のべき乗は、1に等しいビットを、計算された指数に等しい桁数だけ左にシフトすることによって実施することができる。これにより、実行速度が改善する。
【0048】
システム(たとえば、変換ユニット121)は、指数を基数で除算した余りとして、ブール条件の算術および/またはビット単位式を計算する(450)。
【0049】
ブール条件が検証された場合、指数は、指数が0に等しくなるように計算される。0で累乗された数は1になる。したがって、ブール条件が検証された場合、指数は0に等しく、ブール条件の算術および/またはビット単位式は1に等しくなる。
【0050】
いくつかの実施形態では、基数は2である。プロセッサが2進法を使用している場合、指数の最後のビットを取ることによって、指数を基数で除算した余りを抽出することができる。これにより、計算の複雑さが軽減される。
【0051】
図5は、ブール条件A=BをA=Bの算術および/またはビット単位式に変換するための例示的なプロセスのフローチャートである。
【0052】
システム(たとえば、変換ユニット121)は、AからBを減算する(510)。
【0053】
システム(たとえば、変換ユニット121)は、510の結果の絶対値として指数を計算する(520)。
【0054】
システム(たとえば、変換ユニット121)は、520において計算された指数による基数のべき乗による指数を計算する(530)。
【0055】
システム(たとえば、変換ユニット121)は、ブール条件の算術および/またはビット単位式を、530において計算された指数を基数で除算した余りとして計算する(540)。
【0056】
A=Bの算術および/またはビット単位式は、次のことが検証されるように計算される。A=Bの場合、指数は0に等しく、A=Bの算術および/またはビット単位式は1に等しくなる。A≠Bの場合、指数は0に等しくなく、A=Bの算術および/またはビット単位式は0に等しくなる。
【0057】
図6は、ブール条件A≧Bを算術および/またはビット単位式のA≧Bに変換するための例示的なプロセスのフローチャートである。
【0058】
システム(たとえば、変換ユニット121)は、AからBを減算する(610)。
【0059】
システム(たとえば、変換ユニット121)は、610の結果の絶対値を計算する(620)。
【0060】
システム(たとえば、変換ユニット121)は、620の結果から610の結果を減算する(630)。
【0061】
システム(たとえば、変換ユニット121)は、630の結果の絶対値として指数を計算する(640)。
【0062】
システム(たとえば、変換ユニット121)は、640において計算された指数による基数のべき乗による指数を計算する(650)。
【0063】
システム(たとえば、変換ユニット121)は、ブール条件の算術および/またはビット単位式を、650において計算された指数を基数で除算した余りとして計算する(660)。
【0064】
A≧Bの算術および/またはビット単位式は、次のことが検証されるように計算される。A≧Bの場合、指数は0に等しく、A≧Bの算術および/またはビット単位式は1に等しくなる。A<Bの場合、指数は0に等しくなく、A≧Bの算術および/またはビット単位式は0に等しくなる。
【0065】
図7Aは、ブール条件A<Bを算術および/またはビット単位式のA<Bに変換するための例示的なプロセスのフローチャートである。
【0066】
システム(たとえば、変換ユニット121)は、AからBを減算する(710)。
【0067】
システム(たとえば、変換ユニット121)は、710の結果の絶対値を計算する(720)。
【0068】
システム(たとえば、変換ユニット121)は、720の結果から710の結果を減算する(730)。
【0069】
システム(たとえば、変換ユニット121)は、730の結果の絶対値として指数を計算する(740)。
【0070】
システム(たとえば、変換ユニット121)は、740において計算された指数による基数のべき乗による指数を計算する(750)。
【0071】
システム(たとえば、変換ユニット121)は、ブール条件の算術および/またはビット単位式を、750において計算された指数を基数で除算した余りとして計算する(760)。
【0072】
A<Bの算術および/またはビット単位式は、次のことが検証されるように計算される。A<Bの場合、指数は0に等しく、ブール条件の算術および/またはビット単位式は1に等しくなる。A≧Bの場合、指数は0に等しくなく、ブール条件の算術および/またはビット単位式は0に等しくなる。
【0073】
図7Bは、ブール条件A<Bを算術および/またはビット単位式のA<Bに変換するための別の例示的なプロセスのフローチャートである。
【0074】
システム(たとえば、変換ユニット121)は、AからBを減算する(710B)。
【0075】
システム(たとえば、変換ユニット121)は、AからBを減算した結果の借用値として、ブール条件の算術および/またはビット単位式を計算する(720B)。
【0076】
A<Bの算術および/またはビット単位式は、次のことが検証されるように計算される。A<Bの場合、AからBを減算した結果の借用値は1に等しく、ブール条件の算術および/またはビット単位式は1に等しくなる。A≧Bの場合、AからBを減算した結果の借用値は0に等しく、ブール条件の算術および/またはビット単位式は0に等しくなる。
【0077】
図8は、条件文が算術本体を有する場合に、コンピュータプログラムの算術および/またはビット単位式を生成する(たとえば、
図2の230)ための例示的なプロセスのフローチャートである。例は、
図11Aおよび
図11Bに関連してより詳細に説明されている。
【0078】
システム(たとえば、変換ユニット121)は、結果として生じるタスク(たとえば、
図3の302)の文に、ブール条件の算術および/またはビット単位式を乗算する(810)。そのため、コンピュータプログラムが実行されると、次のようになる。ブール条件が検証された場合、ブール条件の算術および/またはビット単位式は1に等しく、結果として生じるタスクはブール条件の算術および/またはビット単位式との乗算によって維持され、結果として生じるタスクが実行される。ブール条件が検証されていない場合、ブール条件の算術および/またはビット単位式は0に等しく、結果として生じるタスクは、ブール条件の算術および/またはビット単位式との乗算によって無効になり、結果として生じるタスクは実行されない。
【0079】
条件文が、算術文として定式化された代替タスク(たとえば、
図3の303)を備える場合、システム(たとえば、変換ユニット121)は、算術の結果として生じるタスクに1からブール条件の算術および/またはビット単位式を引いたものを乗算する(820)。そのため、コンピュータプログラムが実行されると、次のようになる。ブール条件が検証された場合、ブール条件の算術および/またはビット単位式は1に等しい。結果として生じるタスクはブール条件の算術および/またはビット単位式との乗算によって維持され、代替タスクは、1からブール条件の算術および/またはビット単位式を引いたものとの乗算によって無効になる。その結果、結果として生じるタスクは実行されるが、代替タスクは実行されない。ブール条件が検証されていない場合、ブール条件の算術および/またはビット単位式は0に等しく、結果として生じるタスクは、ブール条件の算術および/またはビット単位式との乗算によって無効になり、代替タスクは、1からブール条件の算術および/またはビット単位式を引いたものとの乗算によって維持される。その結果、代替タスクは実行されるが、結果として生じるタスクは実行されない。
【0080】
図9は、条件文が非算術本体を有する場合に、コンピュータプログラムの算術および/またはビット単位式を生成する(たとえば、
図2の230)ための例示的なプロセスのフローチャートである。例は、
図12Aおよび
図12Bに関連してより詳細に説明されている。
【0081】
システム(たとえば、変換ユニット121)は、コンピュータプログラムの算術および/またはビット単位式に、ブール条件の算術および/またはビット単位式に関連付けられるラベルへの無条件ジャンプを含む。条件文の算術および/またはビット単位式が1に等しい場合、ラベルが結果として生じるタスク(たとえば、
図3の302)の開始文と等しくなるように、ラベルはブール条件の算術および/またはビット単位式で開始される。そのため、コンピュータプログラムが実行されると、次のようになる。ブール条件が検証された場合、ブール条件の算術および/またはビット単位式は1に等しい。ラベルは結果として生じるタスクの開始文に等しい。無条件のジャンプ文は結果として生じるタスクを指す。実行中に、プロセッサが無条件のジャンプ文を見つけると、プロセッサは結果として生じるタスクを実行する。
【0082】
代替タスク(たとえば、
図3の303)がある場合、ラベルは、条件文の算術および/またはビット単位式が0に等しい場合に、代替タスクの開始文と等しくなるようにさらに開始される。そのため、コンピュータプログラムが実行されると、次のようになる。ブール条件が検証された場合、ブール条件の算術および/またはビット単位式は1に等しく、ラベルは結果として生じるタスクの開始文に等しく、無条件のジャンプ文は結果として生じるタスクを指し、結果として生じるタスクが実行される。条件文が検証されていない場合、ブール条件の算術および/またはビット単位式は0に等しく、ラベルは代替タスクの開始文に等しく、ジャンプ文は代替タスクを指し、代替タスクが実行される。
【0083】
図10は、コンピュータプログラムの算術および/またはビット単位式を提供する(たとえば、
図2の240)ための、および任意で、コンピュータプログラムの算術および/またはビット単位式を実行する(たとえば、
図2の250)ための、例示的なプロセスのフローチャートである。算術および/またはビット単位式はフラグメント化される。次いで、複数のフラグメントは、複数の算術ブロックおよび/またはビット単位のブロックによって並列に実行することができる。このように、並列に動作する複数の演算ブロックによってコンピュータプログラムを実行することによって、プロセッサの実行速度を向上させることができる。さらに、マルチレベルの条件文を並行して実行することができる。
【0084】
システム(たとえば、変換ユニット121)は、コンピュータプログラムの算術および/またはビット単位式を複数のフラグメントにフラグメント化する(1010)。
【0085】
システム(たとえば、ABU130)は、フラグメントを並行して実行する(1020)。特に、ABU130はマルチスレッドを実施することができる。ABU130は、少なくとも2つのフラグメントを並行して実行する。特に、フラグメントは逆ポーランド記法を使用して実行することができる。
【0086】
図11Aは、算術本体を有する条件文1110Aを備えるC++コンピュータプログラムの例を示している。
【0087】
条件文1110Aのブール条件1101Aは、xがyに等しいかどうかである。結果として生じるタスク1102は、zが1に等しいことである。代替タスク1103は、zが0に等しいことである。条件文1110Aは次のように表すことができる。
xがyに等しい場合、zは1に等しくなる。
xがyに等しくない場合、zは0に等しくなる。
したがって、条件文1110Aの実行は、変数xおよびyの比較を必要とする。
【0088】
図11Bは、
図11Aのコンピュータプログラムの変換から生じるC++コンピュータプログラムの例である。
【0089】
条件文1110Aは、算術演算および/またはビット演算のみを備える算術および/またはビット単位式1110Bに変換されている。ブール条件の算術および/またはビット単位式1101Bは、z=1<<(x-y))%2である。したがって、xがyに等しい場合、z=1<<(x-y))%2=1であり、xがyに等しくない場合、z=1<<(x-y))%2=0である。したがって、条件文の算術および/またはビット単位式1101Bを実行すると、条件文1110Aの実行と同じ結果が得られるが、変数xおよびyの比較を必要としない。
【0090】
図11Cは、算術本体を有する条件文を備えるアセンブリ言語コンピュータプログラム1100Cの例を示している。
図11Dは、
図11Cのコンピュータプログラムの変換から生じるアセンブリ言語コンピュータプログラム1100Dの例を示している。
【0091】
図12Aは、非算術本体を有する条件文1210Aを備えるC++コンピュータプログラムの例である。
【0092】
条件文1210Aのブール条件1201Aは、xがyに等しいかどうかである。結果として生じるタスク1201は、「等しい」を出力することである。代替タスク1202は、「等しくない」を出力することである。条件文1210Aは、次のように表すことができる。xがyに等しい場合、プログラムは「等しい」を出力する。xがyと等しくない場合、プログラムは「等しくない」を出力する。
【0093】
図12Bは、
図12Aのコンピュータプログラムの変換から生じるC++コンピュータプログラムの例である。
【0094】
条件文1210Aは、算術演算および/またはビット演算のみを備える算術および/またはビット単位式1210Bに変換されている。ブール条件1201Bの算術および/またはビット単位式はres=(1<<k)%2であり、上式で、k=x-yである。したがって、x=yの場合、res=(1<<k)%2=1でありx≠yの場合、res=(1<<k)%2=0である。無条件ジャンプ文1204は、初期化文1205において初期化される。無条件ジャンプは、ラベルへの無条件ジャンプ(「condition[res]」)を提供する。
【0095】
条件文の算術および/またはビット単位式が1(res=1)に等しい場合、ラベル(「condition[1]」)は結果として生じるタスク1201の開始文(「to_do」)に等しくなる。無条件のジャンプ文は結果として生じるタスク1201を指す。実行中に、プロセッサが無条件ジャンプ文1204を見つけると、プロセッサは、結果として生じるタスク1201を実行する。
【0096】
条件文の算術および/またはビット単位式が0(res=0)に等しい場合、ラベル(「condition[0]」)は代替タスク1202の開始文(「elso_do」)に等しくなる。無条件ジャンプ文は、代替タスク1202を指す。実行中に、プロセッサが無条件ジャンプ文1204を見つけると、プロセッサは、代替タスク1202を実行する。
【0097】
したがって、条件文の算術および/またはビット単位式を実行すると、条件文の実行と同じ結果が得られる。
【0098】
図12Cは、非算術本体を有する条件文を備えるアセンブリ言語コンピュータプログラム1200Cの例である。
図12Dは、
図12Cのコンピュータプログラムの変換から生じるアセンブリ言語コンピュータプログラム1200Dの例である。
【0099】
図13Aは、ABUの集積回路の組合せ論理回路1310Aの例を示している。
【0100】
組合せ論理回路1310Aは、2ビットの減算を実施するために使用される半減算器1302を備える。半減算器は、XORゲート1303、NOTゲート1304、およびANDゲート1305を備える。半減算器1302は、被減数A1311および減数B1312の2つの入力を有する。半減算器1302は、差1313およびボローアウト(borrow out)1314の2つの出力を有する。ボローアウト信号1314は、条件付き論理回路1310Aが複数桁の減算において次の桁からボローする必要があるときに設定される。ボローアウト信号1314は、Aが0に等しく、Bが1に等しい場合にのみ1に等しい。したがって、ボローアウト信号は、A<Bの場合には1に等しく、A≧Bの場合には0に等しい。したがって、ボローアウト信号はブール条件A<Bの評価を提供する。
【0101】
シフト演算子1306は、1に等しいビットを、差信号1313に等しい桁数だけ左にシフトする。これにより、AからBを減算した結果によって基数がべき乗される。シフト演算子1306は、AからBを減算した結果による基数の指数の除算の余りに等しい結果の第1の右ビットを出力する。したがって、シフト演算子1306の出力は、A=Bの場合は1に等しく、A≠Bの場合は0に等しい。したがって、シフト演算子1306の出力は、ブール条件A=Bの評価を提供する。
【0102】
図13Bは、変数AおよびBがそれぞれ1ビットしか含まない場合の、ABUの集積回路の組合せ論理回路1310Bの例を示している。条件付き論理回路1310Bは、NORゲート1320、およびNOTゲート1330を含む。NOTゲート1330の出力は、ブール条件A=Bの評価を提供する。
【0103】
さらに、いくつかの実装形態では、ブール条件が、要素が数および/または文字によって表される行列型データ(配列、リスト、ベクトルなど)の間にある場合に、次の技法が使用される。これらの技法を使用すると、行列型データの比較を改善することができ、したがって、ブール条件をブール条件の算術および/またはビット単位式に変換するプロセスも改善する。
図14に関連して説明されるように、行列型変数AおよびBにおけるそれぞれの数字または文字を(同じ場所で)比較するのではなく、ブール条件をブール条件の算術および/またはビット単位式に変換する効率を改善するために、比較される行列型オブジェクト(たとえば、配列)のサイズを減らすことができる。
【0104】
図14は、たとえば、比較される行列型データのサイズを縮小するための例示的なプロセスのフローチャートである。本プロセスは、1つまたは複数の場所にある1つまたは複数のコンピュータにインストールされ、本明細書に従ってプログラムされた1つまたは複数のコンピュータプログラムによって実装することができる。たとえば、本プロセスは、
図1に示されるシステム100によって実施することができる。便宜上、本プロセスは、1つまたは複数のコンピュータのシステムによって実施されるものとして説明されるが、
図14のプロセスは、変換を行うためのコンピュータプログラムの前処理の一部であることができるので、変換されたコンピュータプログラムを実行するのと同じコンピュータシステム上で実施される必要はない点に留意されたい。さらに、
図14のプロセスは、行列型データ、たとえば、配列、リスト、ベクトルなどのデータオブジェクトを有する単一の変数に関連して説明され、このプロセスは、ブール条件において比較される変数(たとえば、変数Aおよび変数B)の各々に対して実施されることを理解されたい。
【0105】
システムは、変数に奇数の要素があるかどうかを決定する(1400)。奇数の要素がある場合、後続の処理中に変数が分割される(1410)前に、変数から単一の要素を削除する(1405)ことができ、この単一の要素は、形成される変数のより小さいバージョンに追加される。たとえば、新しい行列型変数は、変数のより小さいバージョンに対してインスタンス化することができ、入力変数の要素(たとえば、最後の要素)のデータ値を新しい変数(たとえば、新しい変数の第1の要素)に追加することができ、次いで、その要素を初期変数から削除すると、分割の要素数が偶数になる(1410)。比較されるべきそれぞれの変数から、同じ単一の要素(たとえば、配列内の位置に関して)を削除する必要がある(1405)点に留意されたい(変数のより小さいバージョンに追加するため)。さらに、いくつかの実装形態は変数を適切に処理し、変数の新しいバージョンをインスタンス化する必要はない。したがって、以下の変数への参照には、新しい変数をインスタンス化する実装形態とインスタンス化しない実装形態を含む。最後に、多次元配列は、本明細書で説明したのと同じプロセスを再帰的に実施することによって処理できる点に留意されたい。
【0106】
変数は2つの要素のペアに分割され(1410)、2つの要素のペアの各々におけるデータ値がより小さい変数のデータ値を形成するために使用される。たとえば、第1の2つの要素のペアは入力変数の第1と第2の要素であってよく、第2の2つの要素のペアは入力変数の第3と第4の要素であってよく、第3の2つの要素のペアは入力変数の第5と第6の要素であってよい、などである。また、2つの要素のペアは、他の適切な方法で形成することができる(変数の各要素が1つのペアのみの一部である場合)。ペアへの分割(1410)は、比較される変数の各セットに対して、たとえば、所与のタイプのすべての比較される変数に対して、同じ方法で行われる必要がある点に留意されたい。一般に、ブール条件によって比較される各変数のより小さいバージョンは、数学的シーケンスのメンバー間の差が大きくなる数学的シーケンスからの代表的な数を使用して形成され、それぞれの代表的な数は、2つの要素のペアからの数または文字のペアを表す1つの数字であり、各変数のより小さいバージョンは、入力変数に奇数のデータ要素がある場合、入力変数からの単一の要素(たとえば、最後のデータ要素)を含む。さらに、いくつかの実装形態では、比較される(行列型)変数の各々に対するすべての最適化ステップが完全に同じように実施される。
【0107】
数または文字のペアを1つの数字として表すために、これらのシーケンスのメンバー間の差が大きくなる数学的シーケンスのプロパティを使用でき、つまり、差が大きくなる数学的シーケンスの2つのメンバー(等比数列など)の合計は一意である。したがって、変数の2つの要素のペアにおける要素のペアごとに、数学的シーケンスの対応するメンバーが合計され(1415)、ここで、数学的シーケンスのメンバーは、変数の2つの要素のペアにおける要素のペアに対応し、ここで、要素のペアにおける各データ値は、数学的シーケンスのメンバーのうちのそれぞれの1つの位置インデックスとして使用される。これは、ペアにおける各要素を、シーケンス内のインデックスがペアにおける要素のデータ値に等しい数学的シーケンスのメンバーによって置き換え、次いで、より小さい(縮小サイズの)変数におけるそれぞれの代表的な数を形成するために、変数の2つの要素のペアにおける要素のペアごとの数学的シーケンスの2つのメンバーを合計することとして理解することができる。比較された(行列型)変数の代表的な数を導出する(1415)ために、同じ(選択された)数学的シーケンスが適用され、いくつかの実施形態では、比較されるすべての(行列型)変数に同じ数学的シーケンスが適用される(代表的な数を導出する場合)点に留意されたい。
【0108】
システムはまた、変数における要素の位置が重要であるかどうかを決定することができる(1420)。たとえば、ソートされた配列を操作する場合、位置は重要ではなく(ソートされた配列内の要素の位置はすでに知られているため)、ペア[2、3]がペア[3、2]に等しいと見なされる論理条件を操作する場合、位置は重要ではない。他の場合、たとえば、ペア[2、3]がペア[3、2]と等しいと見なされない場合、位置は重要である。位置が重要でない場合、数学的シーケンスのメンバー番号のそれぞれの合計からの各代表的な数をそのまま使用する準備ができている。しかし、変数における要素の位置が重要である場合、変数の2つの要素のペアにおける要素のペアに対して位置変数が計算される(1425)。要素のペアの各位置変数の計算(1425)は、ブール条件Y>Xの結果による負の1のべき乗を含む場合があり、上式で、Xは要素のペアにおける第1の要素であり、Yは要素のペアにおける第2の要素である。したがって、Y>Xの場合、位置変数は負の1であり、Y≦Xの場合、位置変数は正の1である。さらに、いくつかの実施形態では、逆ブール条件も使用できる点に留意されたい。
【0109】
要素の位置が重要である比較変数の場合、代表的な数は、数学的シーケンスのメンバーの各合計に、変数の2つの要素のペアにおける対応する要素のペアの位置変数を乗算する(1430)ことによってさらに形成される。したがって、選択された数学的シーケンス(シーケンスのメンバー間の差が大きくなる)におけるインデックスによって数を決定する関数としてF(n)を使用すると、xは第1の数とすることができ、yは第2の数とすることができ、およびzは、そこから形成される一意の数(代表的な数)とすることができる。ペアにおける要素の位置が重要な式は次のとおりである。
Z=((-1)^condition(y>x))*F(x)+F(y)
OR
【0110】
【0111】
ペアにおける要素の位置が重要ではない式は次のとおりである。
Z=F(x)+F(y)
これらのシーケンスのメンバー間で差が大きくなる数学的シーケンスは、|a(i+1)-a(i)|>|a(i)-a(i-1)|であるシーケンス、たとえば、等比数列、指数列などである点に留意されたい。上式で、anは、nに等しいシーケンスにおけるインデックス(位置)を有するシーケンスのメンバーである。また、フィボナッチ数列は、進行の第3のメンバーからこのプロパティを受け取る。
【0112】
さらに、代表的な数は、元の変数AとBの間のブール条件の評価する際に使用するため、または、元の変数AとBの間のブール条件の評価前に変数のサイズをさらに縮小する際に使用するために、変数のより小さい(縮小サイズ)バージョンに記憶される(1435)。たとえば、新しい各ペアの代表的な数を、以前の配列のより小さい(縮小サイズの)バージョンである新しい配列に追加することができる。代表的な数は、比較されるすべての変数について同じ順序で、初期変数から削除された(1405)単一の要素とともに、変数のより小さいバージョンに記憶する(1435)必要がある点に留意されたい。
【0113】
システムは、変数のサイズをさらに縮小することが所望されるかどうかを決定することができる(1440)。たとえば、(1)追加のサイズ縮小の実施に費やされた時間(変数における要素の数と比較された変数の数が多いほど、通常の比較よりも縮小の時間的利点が大きくなる)、および/または、(2)消費されるメモリの量(進行の高度な成長により、長い演算のサポートがない場合、メモリを節約するために、縮小された変数の要素の値が大きくなり、システムは要素の値を丸めることができ、非常に大きい数または小さい数で衝突を引き起こす可能性がある)対、従来の比較(行列型変数AおよびBの同じ場所にあるそれぞれの数または文字)を考慮して、効率が向上しない場合は、さらに縮小する必要はない。したがって、さらなる縮小が所望されない場合、
図14のプロセスは終了する。さらなる縮小が所望される場合、変数のサイズを再び縮小するために
図14のプロセスを繰り返す。
【0114】
図14のプロセスは、ブール条件において比較される変数AおよびB(行列型データを有する)の両方に対して実施される点に留意されたい。
図14のプロセスを使用してサイズが縮小されている変数の要素のデータ値は数および/または文字であり、変数AおよびBのサイズがこのように縮小された結果、ブール条件をブール条件の算術および/またはビット単位式に変換する効率が向上する。
【0115】
さらに、上記のように、ソートされた配列を操作する場合、比較される行列型変数の要素の位置は重要ではない。これを考慮して、いくつかの実装形態では、比較される行列型変数(配列、リスト、ベクトルなど)の各々は、決定(1420)、計算(1425)、および乗算(1430)動作のうちの1つまたは複数の部分(または、すべて)を回避するようにソートされる。ブール条件をブール条件の算術および/またはビット単位式に変換することと組み合わせて、次のソート技法を使用すると、効率を向上させることができる。たとえば、最新のソート技法(たとえば、クイックソートまたはqsort、バブルソート、選択ソート、挿入ソートなど)を使用して、単一のスレッドで配列全体をソートするのではなく、配列は、利用可能なスレッドの数に対応するいくつかの小さいサブ配列に分割でき、それぞれの小さいサブ配列処理は、個別のスレッドによって並行して実行することができ、元の配列における各要素の(検索された)位置インデックスは、各要素の値を初期配列の他の要素と比較することによって決定される。
【0116】
図15は、ブール条件をブール条件の算術および/またはビット単位式に変換することと組み合わせて使用することができる、たとえば、比較される行列型データの並列ソートのための例示的なプロセスのフローチャートである。本プロセスは、1つまたは複数の場所にある1つまたは複数のコンピュータにインストールされ、本明細書に従ってプログラムされた1つまたは複数のコンピュータプログラムによって実装することができる。たとえば、本プロセスは、
図1に示されるシステム100によって実施することができる。便宜上、本プロセスは、1つまたは複数のコンピュータのシステムによって実施されるものとして説明されるが、
図15のプロセスは、変換を行うためのコンピュータプログラムの前処理の一部であることができるので、変換されたコンピュータプログラムを実行するのと同じコンピュータシステム上で実施される必要はない点に留意されたい。いずれにせよ、この並列ソート方式は、処理動作の全体的な計算効率を向上させることができる。
【0117】
初期の(ソート用に選択された)行列型データ変数に基づいて、システムは、行列型データ変数と同じ数の要素を有する新しい変数をインスタンス化することができる(1500)。たとえば、最初の(ソートされる)配列と同じ数の要素を持つ新しい配列を作成することができ、新しい配列におけるすべての要素位置をヌル値で埋めることができる。システムは、新しい変数を記憶するために必要なメモリボリュームを割り当てる。
【0118】
行列型データ変数は、システムによって、ソートを実施するために使用される処理スレッドの数に等しい数のサブパートに分割される(1505)。たとえば、最初の(ソートされる)配列は、ソートタスクに割り当てられたスレッドの数に等しい数のサブ配列に分割することができる。行列型データ変数のサブパートは、次元が等しい必要はない点に留意されたい。
【0119】
システムにおける各処理スレッドの各々は、その処理スレッドによって処理されるサブパートにおける要素ごとの位置インデックスを決定する(1510)。これは、サブパートの各要素の値を行列型データ変数の他のすべての値と比較することと、行列型データ変数の要素のうち、サブパートの比較された要素よりも小さい(または、逆の位置インデックスの場合よりも大きい)要素の数をカウントすることとを含む場合がある。たとえば、各スレッドのレベルにおいて、システムは、サブ配列の各要素の値を初期配列における残りの要素の値と比較することと、比較された要素よりも値が多い(または、少ない)初期配列の要素の数をカウントすることとを行うによって、ソートされた配列における各サブ配列の要素ごとの位置インデックスを決定することができる。
【0120】
比較された要素よりも値が小さい要素の数をカウントする場合、結果のカウントは位置インデックスになり、すなわち、ゼロのカウントは、行列型データ変数における他の値はいずれも、変数のサブ部分における比較された値よりも小さくないことを示し、したがって、この比較値は、ソートされた変数において最初になる(昇順でソートする場合)。対照的に、比較された要素よりも値が大きい要素の数をカウントする場合、結果のカウントは逆位置インデックスであり、すなわち、ゼロのカウントは、行列型データ変数における他の値はいずれも、変数のサブ部分における比較された値よりも大きくないことを示し、したがって、この比較値は、ソートされた変数において最後になる(昇順でソートする場合)。
【0121】
いくつかの実装形態では、システムは、ソートが昇順で行われているか降順で行われているかを決定する(1515)。他の実装形態では、ソートは常にいずれかの順序で実施されるため、システムによる決定(1515)は必要ない。
【0122】
昇順でソートする場合、システムは、新しい変数における値を、処理スレッドによって決定された位置インデックスに従って、昇順で行列型データ変数からの値に置き換える(1520)。したがって、通常の位置インデックスの場合(カウントが少ない要素の数であった場合)、位置インデックスがゼロの行列型データ変数における値は、新しい変数における最初の位置になり、位置インデックス1の行列型データ変数における値は、新しい変数における第2の位置になり、位置インデックス2の行列型データ変数における値は、新しい変数における第3の位置になり、以下同様である。たとえば、初期配列におけるサブ配列のレベルをカウントする位置インデックスの結果を、新しい配列におけるヌル値を、昇順で同じ位置インデックスを持つ初期配列からのそれぞれの値で置き換えることによって、新しい配列において組み合わせることができる。
【0123】
次いで、システムは、新しい変数に変更されていない値が残っているかどうかを確認する(1525)。たとえば、システムは、初期配列に等しい値の要素が存在する結果として、ヌル値を持つ要素が新しい配列にまだ存在するかどうかを確認することができる。この段階で新しい配列にヌル値の要素がない場合、新しい配列はソートされた(初期)配列と同等であると見なすことができる。初期変数の別の要素における値と等しい値を持つ初期変数における各要素は、他の要素と同じ位置インデックスを取得するため、初期変数に等しい値がある場合、新しい変数における要素のうちの1つまたは複数は、置換え(1520)後も変更されないままである点に留意されたい。
【0124】
これが発生すると、システムは、新しい変数における残りの変更されていない値を、新しい変数における左隣接要素値に置き換える(1530)。たとえば、新しい配列におけるヌル値を持つ残りのすべての要素は、ヌル値要素の左側にある最初の(ヌルではない)値要素に置き換えることができ、その後、新しい配列は、ソートされた(初期)配列と同等と見なすことができる。これらの置換えは、初期の行列型データ変数の要素における等しい値の数を考慮して、必要な回数だけ実施される。
【0125】
同様に、降順でソートする場合、システムは、新しい変数における値を、処理スレッドによって決定された位置インデックスに従って、降順で行列型データ変数からの値に置き換える(1535)。したがって、逆の位置インデックスの場合(カウントが大きい要素の数であった場合)、位置インデックスがゼロの行列型データ変数における値は、新しい変数における最初の位置になり、位置インデックス1の行列型データ変数における値は、新しい変数における第2の位置になり、位置インデックス2の行列型データ変数における値は、新しい変数における第3の位置になり、以下同様である。たとえば、初期配列におけるサブ配列のレベルをカウントする位置インデックスの結果を、新しい配列におけるヌル値を、降順で同じ位置インデックスを持つ初期配列からのそれぞれの値で置き換えることによって、新しい配列において組み合わせることができる。
【0126】
次いで、システムは、新しい変数に変更されていない値が残っているかどうかを確認する(1540)。たとえば、システムは、初期配列に等しい値の要素が存在する結果として、ヌル値を持つ要素が新しい配列にまだ存在するかどうかを確認することができる。この段階で新しい配列にヌル値の要素がない場合、新しい配列はソートされた(初期)配列と同等であると見なすことができる。初期変数の別の要素における値と等しい値を持つ初期変数における各要素は、他の要素と同じ位置インデックスを取得するため、初期変数に等しい値がある場合、新しい変数における要素のうちの1つまたは複数は、置換え(1535)後も変更されないままである点に留意されたい。
【0127】
これが発生すると、システムは、新しい変数における残りの変更されていない値を、新しい変数における右隣接要素値に置き換える(1545)。たとえば、新しい配列におけるヌル値を持つ残りのすべての要素は、ヌル値要素の左側にある最初の(ヌルではない)値要素に置き換えることができ、その後、新しい配列は、ソートされた(初期)配列と同等と見なすことができる。これは、初期の行列型データ変数の要素における等しい値の数を考慮して、必要な回数だけ実施される。
【0128】
最後に、システムは新しい変数を行列型データ変数のソートされたバージョンとして使用する(1550)。場合によっては、これは、
図14のプロセスにおける初期の行列型データ変数の代わりに新しい変数を使用することによって行われる。場合によっては、これは、初期の行列型データ変数の値を新しい変数におけるソートされた値で上書きすることによって行われ、現在ソートされている行列型データ変数が
図14のプロセスにおいて使用される。
【0129】
さらに、
図15の並列ソートプロセスは、
図14の行列最適化(行列型データを比較するための)プロセス以外の状況において効率的に使用することができる点に留意されたい。たとえば、
図15の並列ソートプロセスは、本明細書に記載されるように、ブール条件をブール条件の算術および/またはビット単位式に変換する方法を使用して、様々なタスクの標準的なソートを最適化するなど、行列型データの効率的なソートのコンテキストにおいても使用することができる(さらなる行列最適化および比較を行う必要はない)。
【0130】
いくつかの実装形態では、行列型データオブジェクトをソートする方法は、行列型データオブジェクトと同じ数の要素を持つ新しいオブジェクトをインスタンス化するステップと、行列型のデータオブジェクトを、ソートを実施するために使用される処理スレッドの数に等しい数のサブパートに分割するステップと、各処理スレッドの各々によって、サブパートの各要素の値を行列型データオブジェクトの他のすべての値と比較することと、行列型データオブジェクトの要素のうち、サブパートの比較された要素よりも小さい、または、逆の位置インデックスの場合よりも大きい要素の数をカウントすることとによって、処理スレッドによって処理されるサブパートにおける要素ごとの位置インデックスを決定するステップと、新しいオブジェクトにおける値を、処理スレッドによって決定された前記位置インデックスに従って、昇順または降順で行列型データオブジェクトからの値に置き換えるステップと、ソートが昇順か降順かに応じて、新しいオブジェクトにおける残りの変更されていない値を、新しいオブジェクトにおける左隣接要素値または右隣接要素値のいずれかに置き換えるステップであって、新しいオブジェクトが行列型データオブジェクトのソートされたバージョンとして使用される、ステップとを含むことができる。値を比較することによる位置インデックスの決定は、ブール条件をブール条件の算術および/またはビット単位式に変換するための
図1から
図13に関連して説明されたシステムおよび技法を使用することができ、これにより、処理動作の効率が向上する点に留意されたい。
【0131】
さらに、
図14の行列型データ(またはオブジェクト)を比較するプロセスの最適化は、ブール条件をブール条件の算術および/またはビット単位式に変換する以外のコンテキストにおいて効率的に使用することができる点に留意されたい。たとえば、この行列変数最適化プロセスはまた、標準の比較を最適化するなど、ブール条件を算術および/またはビット単位式に変換せずに、比較のコンテキストにおいて使用することができる。さらに、
図14の最適化プロセスは、比較プロセスとは独立して使用することができる。たとえば、
図14の最適化プロセスは、効率的なストレージ(必要なメモリが少ない)のために、行列をより小さいサイズの行列に圧縮するために使用することができる。
【0132】
いくつかの実装形態では、
図14の行列変数最適化プロセスは、行列型オブジェクトを比較するための効率をより一般的に高めるために使用される。したがって、(いくつかの実施形態による)方法は、第1の変数Aおよび第2の変数Bを比較するブール条件を備える条件文を備えるコンピュータプログラムにアクセスするステップであって、第1の変数Aおよび第2の変数Bの各々が行列型データを備える、ステップと、第1の変数Aおよび第2の変数Bの各々を、第1の変数Aのそれぞれの第1の2つの要素のペアおよび第2の変数Bの第2の2つの要素のペアに分割するステップと、比較のために、数学的シーケンスのメンバー間の差が大きくなる数学的シーケンスからの代表的な数を使用して、第1の変数Aおよび第2の変数Bの各々のより小さいバージョンを形成するステップであって、第1の変数Aのより小さいバージョンの代表的な数の各々は、第1の変数Aの第1の2つの要素のペアのデータ値に等しい数学的シーケンスにおけるインデックスを有する数学的シーケンスのそれぞれのメンバーから計算され、第2の変数Bのより小さいバージョンの代表的な数の各々は、第2の変数Bの第2の2つの要素のペアのデータ値に等しい数学的シーケンスにおけるインデックスを有する数学的シーケンスのそれぞれのメンバーから計算され、第1の変数Aおよび第2の変数Bの各々が奇数の要素を有する場合、分割するステップの前に、第1の変数Aおよび第2の変数Bの各々から単一の要素を削除し、第1の変数Aおよび第2の変数Bの各々からの単一の要素を、それぞれ第1の変数Aおよび第2の変数Bのより小さいバージョンに追加する、ステップとを含むことができる。さらに、本方法は、コンピュータプログラムの実行時に条件文のブール条件を評価するために、第1の変数Aおよび第2の変数Bのより小さいバージョンを比較するステップを含む。
【0133】
いくつかの実施形態では、上記の方法の形成動作は、第1の変数Aのより小さいバージョンの要素ごとに、第1の変数Aの第1の2つの要素のペアにおけるデータ値に対応する数学的シーケンスのそれぞれのメンバーのうちの2つを合計することによって、第1の変数Aのより小さいバージョンの代表の数を計算するステップと、第2の変数Bのより小さいバージョンの要素ごとに、第2の変数Bの第2の2つの要素のペアにおけるデータ値に対応する数学的シーケンスのそれぞれのメンバーのうちの2つを合計することによって、第2の変数Bのより小さいバージョンの代表の数を計算するステップとを含む。
【0134】
いくつかの実施形態では、上記の方法は、第1の変数Aの第1の2つの要素のペアの第1の位置変数を計算するステップと、第2の変数Bの第2の2つの要素のペアの第2の位置変数を計算するステップとを含み、要素のペアの各位置変数を計算するステップは、ブール条件Y>Xの結果による負の1に等しい数のべき乗を備え、Xは要素のペアにおける第1の要素であり、Yは要素のペアにおける第2の要素であり、形成するステップは、第1の変数Aのより小さいバージョンの代表的な数を、第1の変数Aのより小さいバージョンの要素ごとに、第1の位置変数のうちの1つに、第1の変数Aの第1の2つの要素のペアのデータ値に対応する数学的シーケンスのそれぞれのメンバーのうちの2つの合計を乗算することによって計算するステップと、第2の変数Bのより小さいバージョンの代表的な数を、第2の変数Bのより小さいバージョンの要素ごとに、第2の位置変数のうちの1つに、第2の変数Bの第2の2つの要素のペアのデータ値に対応する数学的シーケンスのそれぞれのメンバーのうちの2つの合計を乗算することによって計算するステップとを備える。
【0135】
いくつかの実装形態では、同じ(同一の)ステップ、順序、計測器(たとえば、等差数列シーケンス)が、比較されるすべての(行列型)変数に適用される。さらに、本明細書に記載されているシステムのうちの1つまたは複数は、1つまたは複数のメモリユニットが、1つまたは複数の命令処理ユニットに、上記の方法の動作を実施させるように構成される1つまたは複数の実施形態において使用することができる。行列型オブジェクトを比較するためのこれらのシステムおよび方法は、特定のコンピュータ(所与の処理能力を有する)において、その特定のコンピュータにおいて以前に可能であった速度よりも迅速に行列型を比較することができるため、処理速度が向上する。また、行列型オブジェクトを比較するためのこれらのシステムおよび方法は、変数のより小さいバージョンが必要とするメモリは初期変数よりも少ない可能性があるため、メモリ消費量を減らすことができる。
【0136】
いくつかの実施形態は、コンピュータプログラムにアクセスするステップであって、コンピュータプログラムがブール条件を備える条件文を備える、ステップと、ブール条件を、ブール条件の算術および/またはビット単位式に変換するステップと、ブール条件の代わりに、ブール条件の算術および/またはビット単位式を備える、コンピュータプログラムの算術および/またはビット単位式を生成するステップと、コンピュータプログラムの算術および/またはビット単位式を提供するステップであって、コンピュータプログラムの算術および/またはビット単位式が、プロセッサの算術および/またはビット単位演算ユニットによって実行されるように構成されるステップとを備える、方法を含む。ブール条件の算術および/またはビット単位式は、ブール条件が検証された場合、ブール条件の算術および/またはビット単位式は1に等しく、ブール条件が検証されていない場合、ブール条件の算術および/またはビット単位式は0に等しいことを検証することができる。
【0137】
上記の方法のいくつかの実施形態では、ブール条件は、第1の変数Aおよび第2の変数Bを取り、ブール条件をブール条件の算術および/またはビット単位式に変換するステップは、AからBを減算するステップと、AからBを減算するステップの結果の絶対値を計算するステップと、AからBを減算するステップの結果の絶対値に基づいて指数を計算するステップと、計算された指数による基数のべき乗による指数を計算するステップと、指数を基数で除算した余りに基づいて、ブール条件の算術および/またはビット単位式を計算するステップとを備える。ブール条件はA=Bであってよく、ブール条件をブール条件の算術および/またはビット単位式に変換するステップは、AからBを減算するステップの結果の絶対値として指数を計算するステップと、ブール条件の算術および/またはビット単位式を、指数を基数で除算した余りとして計算するステップとを備えることができる。
【0138】
ブール条件はA≧Bであってよく、ブール条件をブール条件の算術および/またはビット単位式に変換するステップは、AからBを減算するステップの結果の絶対値から、AからBを減算した結果を減算するステップと、AからBを減算するステップの結果の絶対値から、AからBを減算するステップの結果を減算するステップの結果の絶対値として指数を計算するステップと、ブール条件の算術および/またはビット単位式を、指数を基数で除算した余りとして計算するステップとを備えることができる。
【0139】
ブール条件はA<Bであってよく、ブール条件をブール条件の算術および/またはビット単位式に変換するステップは、AからBを減算するステップの結果の絶対値から、AからBを減算した結果を減算するステップと、AからBを減算するステップの結果の絶対値から、AからBを減算するステップの結果を減算するステップの結果の絶対値として指数を計算するステップと、指数による基数のべき乗による指数を計算するステップと、ブール条件の算術および/またはビット単位式を、1から指数を基数で除算した余りを引いたものとして計算するステップとを備えることができる。
【0140】
第1の変数Aおよび第2の変数Bは、浮動小数点型データとすることができる。いくつかの実施形態では、ブール条件はA=Bであり、第1の変数Aおよび第2の変数Bは浮動小数点型データであり、ブール条件をブール条件の算術および/またはビット単位式に変換するステップは、AからBを減算するステップの結果の絶対値に適用された天井関数の結果として指数を計算するステップと、ブール条件の算術および/またはビット単位式を、指数を基数で除算した余りとして計算するステップとを備える。いくつかの実施形態では、ブール条件はA≧Bであり、第1の変数Aおよび第2の変数Bは浮動小数点型データであり、ブール条件をブール条件の算術および/またはビット単位式に変換するステップは、AからBを減算するステップの結果の絶対値から、AからBを減算するステップの結果を減算するステップと、AからBを減算するステップの結果の絶対値から、AからBを減算するステップの結果を減算するステップの結果の絶対値に適用された天井関数の結果として指数を計算するステップと、ブール条件の算術および/またはビット単位式を、指数を基数で除算した余りとして計算するステップとを備える。いくつかの実施形態では、ブール条件はA<Bであり、第1の変数Aおよび第2の変数Bは浮動小数点型データであり、ブール条件をブール条件の算術および/またはビット単位式に変換するステップは、AからBを減算するステップの結果の絶対値から、AからBを減算するステップの結果を減算するステップと、AからBを減算するステップの結果の絶対値から、AからBを減算するステップの結果を減算するステップの結果の絶対値に適用された天井関数の結果として指数を計算するステップと、指数による基数のべき乗による指数を計算するステップと、ブール条件の算術および/またはビット単位式を、1から指数を基数で除算した余りを引いたものとして計算するステップとを備える。
【0141】
いくつかの実施形態では、第1の変数Aおよび第2の変数Bはブール型データ(0および1)であってよく、ブール条件はA=Bであってよく、ブール条件をブール条件の算術および/またはビット単位式に変換するステップは、AとBの合計を計算するステップと、ブール条件の算術および/またはビット単位式を、1から合計を基数で除算した余りを引いたものとして計算するステップとを備えることができる。
【0142】
いくつかの実施形態では、第1の変数Aおよび第2の変数Bは行列型データを備えることができ、本方法は、第1の変数Aおよび第2の変数Bの各々を、第1の変数Aのそれぞれの第1の2つの要素のペアおよび第2の変数Bの第2の2つの要素のペアに分割するステップと、比較のために、数学的シーケンスのメンバー間の差が大きくなる数学的シーケンスからの代表的な数を使用して、第1の変数Aおよび第2の変数Bの各々のより小さいバージョンを形成するステップであって、第1の変数Aのより小さいバージョンの代表的な数の各々は、第1の変数Aの第1の2つの要素のペアのデータ値に等しい数学的シーケンスにおけるインデックスを有する数学的シーケンスのそれぞれのメンバーから計算され、第2の変数Bのより小さいバージョンの代表的な数の各々は、第2の変数Bの第2の2つの要素のペアのデータ値に等しい数学的シーケンスにおけるインデックスを有する数学的シーケンスのそれぞれのメンバーから計算され、第1の変数Aおよび第2の変数Bの各々が奇数の要素を有する場合、分割するステップの前に、第1の変数Aおよび第2の変数Bの各々から単一の要素を削除し、第1の変数Aおよび第2の変数Bの各々からの単一の要素を、それぞれ第1の変数Aおよび第2の変数Bのより小さいバージョンに追加する、ステップとを備えることができる。
【0143】
形成するステップは、第1の変数Aのより小さいバージョンの要素ごとに、第1の変数Aの第1の2つの要素のペアにおけるデータ値に対応する数学的シーケンスのそれぞれのメンバーのうちの2つを合計することによって、第1の変数Aのより小さいバージョンの代表の数を計算するステップと、第2の変数Bのより小さいバージョンの要素ごとに、第2の変数Bの第2の2つの要素のペアにおけるデータ値に対応する数学的シーケンスのそれぞれのメンバーのうちの2つを合計することによって、第2の変数Bのより小さいバージョンの代表の数を計算するステップとを備えることができる。
【0144】
上記の方法はまた、第1の変数Aおよび第2の変数Bの各々をソートするステップを備えることができ、行列型データ変数をソートするステップは、行列型データ変数と同じ数の要素を有する新しい変数をインスタンス化するステップと、行列型データ変数を、ソートを実施するために使用される処理スレッドの数に等しい数のサブパートに分割するステップと、各処理スレッドの各々によって、サブパートの各要素の値を行列型データ変数の他のすべての値と比較することと、行列型データ変数の要素のうち、サブパートの比較された要素よりも小さい、または、逆の位置インデックスの場合よりも大きい要素の数をカウントすることとによって、処理スレッドによって処理されるサブパートにおける要素ごとの位置インデックスを決定するステップと、新しい変数における値を、処理スレッドによって決定された位置インデックスに従って、昇順または降順で行列型データ変数からの値に置き換えるステップと、ソートが昇順か降順かに応じて、新しい変数における残りの変更されていない値を、新しい変数における左隣接要素値または右隣接要素値のいずれかに置き換えるステップとを備え、新しい変数は、行列型データ変数のソートされたバージョンとして使用される。
【0145】
上記の方法はまた、第1の変数Aの第1の2つの要素のペアの第1の位置変数を計算するステップと、第2の変数Bの第2の2つの要素のペアの第2の位置変数を計算するステップとを備えることができ、要素のペアの各位置変数を計算するステップは、ブール条件Y>Xの結果による負の1に等しい数のべき乗を備え、Xは要素のペアにおける第1の要素であり、Yは要素のペアにおける第2の要素であり、形成するステップは、第1の変数Aのより小さいバージョンの代表的な数を、第1の変数Aのより小さいバージョンの要素ごとに、第1の位置変数のうちの1つに、第1の変数Aの第1の2つの要素のペアのデータ値に対応する数学的シーケンスのそれぞれのメンバーのうちの2つの合計を乗算することによって計算するステップと、第2の変数Bのより小さいバージョンの代表的な数を、第2の変数Bのより小さいバージョンの要素ごとに、第2の位置変数のうちの1つに、第2の変数Bの第2の2つの要素のペアのデータ値に対応する数学的シーケンスのそれぞれのメンバーのうちの2つの合計を乗算することによって計算するステップとを備える。
【0146】
上記の実施形態では、基数は2に等しく、プロセッサは2進法を使用し、指数を基数で除算した余りは指数の最後のビットを取ることによって抽出される。さらに、プロセッサがバイナリシステムを使用する場合、計算された指数による基数のべき乗は、1に等しいビットを、計算された指数に等しい桁数だけ左にシフトすることによって実施することができる。
【0147】
ブール条件はA<Bであってよく、ブール条件をブール条件の算術および/またはビット単位式に変換するステップは、AからB減算するステップと、ブール条件の算術および/またはビット単位式を、AからBを減算するステップの結果の借用値として計算するステップとを備えることができる。
【0148】
コンピュータプログラムの算術および/またはビット単位式を提供するステップは、コンピュータプログラムの算術および/またはビット単位式を、算術および/またはビット単位式の複数のフラグメントにフラグメント化するステップを備えることができ、算術および/またはビット単位式のフラグメントは、並列で実行されるように構成することができる。
【0149】
ブール条件は、算術文として定式化された、結果として生じるタスクを備えることができ、コンピュータプログラムの算術および/またはビット単位式を生成するステップは、結果として生じるタスクに、ブール条件の算術および/またはビット単位式を乗算するステップを備えることができる。ブール条件は、算術文として定式化された代替タスクを備えることができ、コンピュータプログラムの算術および/またはビット単位式を生成するステップは、代替タスクに、1からブール条件の算術および/またはビット単位式を引いたものを乗算するステップを備えることができる。
【0150】
ブール条件は、非算術文として定式化された、結果として生じるタスクを備えることができ、コンピュータプログラムの算術および/またはビット単位式を生成するステップは、コンピュータプログラムの算術および/またはビット単位式に、ブール条件の算術および/またはビット単位式に関連付けられるラベルへの無条件ジャンプを含めるステップを備えることができる。また、ブール条件の算術および/またはビット単位式の値が1に等しい場合、ラベルは結果として生じるタスクの文の開始と等しくなる可能性がある。さらに、ブール条件は、非算術文として定式化された代替タスクを備えることができ、ラベルは、ブール条件の算術および/またはビット単位式の値が0に等しい場合、代替タスクの文の開始に等しくなる。
【0151】
いくつかの実施形態では、本方法は、算術および/またはビット単位演算ユニットによって、コンピュータプログラムの算術および/またはビット単位式を実行するステップをさらに備える。いくつかの実施形態では、少なくとも変換するステップは第1のコンピュータによって実施され、実行するステップは第2のコンピュータによって実施される。いくつかの実施形態では、変換するステップおよび実行するステップは、同じコンピュータによって実施される。
【0152】
いくつかの実施形態は、少なくとも1つの制御ユニットと、少なくとも1つの算術および/またはビット単位演算ユニットと、少なくとも1つのレジスタユニットとを備える1つまたは複数の命令処理ユニットと、1つまたは複数の命令処理ユニットと結合された1つまたは複数のメモリユニットとを備えるシステムを含み、システムは、コンピュータプログラムにおいて、それぞれがブール条件を備える実質的にすべての条件文を、実質的にすべての条件文のブール条件の算術および/またはビット単位式を実行するために少なくとも1つの算術および/またはビット単位演算ユニットを使用することによって実施するように構成される。そのようなシステムの実施形態では、システムの少なくとも1つの制御ユニットまたは別個のデータ処理装置を、上記の方法の実施形態のいずれかの方法動作を実施するように構成することができ、プロセッサの少なくとも1つの算術および/またはビット単位演算ユニットは、コンピュータプログラムの算術および/またはビット単位式を実行するように構成された1つまたは複数の命令処理ユニットを備えることができる。さらに、少なくとも1つの算術および/またはビット単位演算ユニットは、算術ブロック、ビット単位のシフトブロック、およびビット単位の論理ブロックのうちの1つまたは複数を備えることができ、少なくとも1つの算術および/またはビット単位演算ユニットは、デジタルコンパレータを含む必要はない。
【0153】
本明細書に記載の主題および機能動作の実施形態は、デジタル電子回路、有形の具体化されたコンピュータソフトウェアまたはファームウェア、本明細書に開示されている構造およびそれらの構造的同等物を含むコンピュータハードウェア、あるいはそれらの1つまたは複数の組合せにおいて実装することができる。本明細書に記載される主題の実施形態は、1つまたは複数のコンピュータプログラム、すなわち、データ処理装置による実行のために、またはデータ処理装置の動作を制御するために、有形の非一時的ストレージ媒体に符号化されたコンピュータプログラム命令の1つまたは複数のモジュールとして実装することができる。コンピュータストレージ媒体は、機械可読ストレージデバイス、機械可読ストレージ基板、ランダムまたはシリアルアクセスメモリデバイス、あるいはそれらの1つまたは複数の組合せであり得る。あるいは、またはさらに、プログラム命令は、データ処理装置によって実行するための適切なレシーバ装置に送信するための情報を符号化するために生成される、人工的に生成された伝搬信号、たとえば、機械生成の電気、光、または電磁信号に符号化することができる。
【0154】
「データ処理装置」という用語は、データ処理ハードウェアを指し、たとえば、プログラム可能なプロセッサ、コンピュータ、あるいは複数のプロセッサまたはコンピュータを含む、データを処理するためのあらゆる種類の装置、デバイス、および機械を包含する。装置はまた、専用論理回路、たとえば、FPGA(フィールドプログラマブルゲートアレイ)またはASIC(特定用途向け集積回路)であり得るか、またはさらに含むことができる。装置は、ハードウェアに加えて、コンピュータプログラムの実行環境を作成するコード、たとえば、プロセッサファームウェア、プロトコルスタック、データベース管理システム、オペレーティングシステム、あるいはそれらの1つまたは複数の組合せを構成するコードを任意に含むことができる。
【0155】
プログラム、ソフトウェア、ソフトウェアアプリケーション、アプリ、モジュール、ソフトウェアモジュール、スクリプト、またはコードとも呼ばれる、または記述される可能性のあるコンピュータプログラムは、コンパイル言語または解釈言語、宣言型言語または手続き型言語など、あらゆる形式のプログラミング言語で記述することができ、スタンドアロンプログラムとして、またはモジュール、コンポーネント、サブルーチン、あるいはコンピューティング環境で使用するための他の適切なユニットとして、あらゆる形式で展開することができる。プログラムは、ファイルシステム内のファイルに対応する場合があるが、対応する必要はない。プログラムは、他のプログラムまたはデータを保持するファイルの一部、たとえば、マークアップ言語ドキュメントに記憶された1つまたは複数のスクリプト、問題のプログラム専用の単一のファイル、あるいは複数の調整されたファイル、たとえば、1つまたは複数のモジュール、サブプログラム、またはコードの一部を記憶するファイルに記憶することができる。コンピュータプログラムは、1台のコンピュータ、または1つのサイトに配置されているか、複数のサイトに分散され、データ通信ネットワークによって相互接続されている複数のコンピュータ上で実行されるように展開することができる。
【0156】
特定の動作またはアクションを実施するように構成された1台または複数のコンピュータのシステムの場合、システムにソフトウェア、ファームウェア、ハードウェア、またはそれらの組合せがインストールされており、動作中にシステムに動作またはアクションを実施させることを意味する。特定の動作またはアクションを実施するように構成される1つまたは複数のコンピュータプログラムの場合、1つまたは複数のプログラムが、データ処理装置によって実行されると、装置に動作またはアクションを実施させる命令を含むことを意味する。
【0157】
本明細書で使用されているように、「エンジン」または「ソフトウェアエンジン」は、入力とは異なる出力を提供する、ソフトウェアで実装された入出力システムを指す。エンジンは、ライブラリ、プラットフォーム、ソフトウェア開発キット(「SDK」)、またはオブジェクトなどの、符号化された機能のブロックであってよい。各エンジンは、サーバ、モバイル電話、タブレットコンピュータ、ノートブックコンピュータ、音楽プレーヤ、電子書籍リーダ、ラップトップまたはデスクトップコンピュータ、PDA、スマートフォン、あるいは1つまたは複数のプロセッサおよびコンピュータ可読メディアを含むその他の固定またはポータブルデバイスに実装することができる。さらに、エンジンのうちの2つ以上が、同じコンピューティングデバイス上に実装されてもよく、異なるコンピューティングデバイス上に実装されてもよい。
【0158】
本明細書に記載のプロセスおよび論理フローは、され、入力データを操作して出力を生成することによって機能を実施するために、1つまたは複数のコンピュータプログラムを実行する1つまたは複数のプログラム可能なコンピュータによって実施することができる。プロセスおよびロジックフローはまた、FPGAやASICなどの専用論理回路によって、または専用ロジック回路と1つまたは複数のプログラムされたコンピュータの組合せによって実施することもできる。
【0159】
コンピュータプログラムの実行に適したコンピュータは、汎用または専用マイクロプロセッサ、あるいはその両方、あるいは他の任意の種類の中央処理装置に基づくことができる。一般に、中央処理装置は、読取り専用メモリまたはランダムアクセスメモリ、あるいはその両方から命令およびデータを受信する。コンピュータの重要な要素は、命令を実施または実行するための中央処理装置と、命令およびデータを記憶するための1つまたは複数のメモリデバイスである。中央処理装置およびメモリは、専用論理回路によって補完することもでき、そこに組み込むこともできる。一般に、コンピュータはまた、データを記憶するための1つまたは複数の大容量ストレージデバイス、たとえば、磁気、磁気光ディスク、または光ディスクを含むか、またはデータを受信するか、またはデータを転送するか、あるいはその両方に動作可能に結合される。しかしながら、コンピュータにそのようなデバイスが必要なわけではない。さらに、コンピュータは、別のデバイス、たとえば、ほんの数例を挙げると、モバイル電話、携帯情報端末(PDA)、モバイルオーディオまたはビデオプレーヤ、ゲームコンソール、全地球測位システム(GPS)レシーバ、あるいはポータブルストレージデバイス、たとえば、ユニバーサルシリアルバス(USB)フラッシュドライブに組み込むことができる。
【0160】
コンピュータプログラムの命令およびデータを記憶するために適したコンピュータ可読媒体は、たとえば、半導体メモリデバイス、たとえば、EPROM、EEPROM、およびフラッシュメモリデバイス、磁気ディスク、たとえば、内蔵ハードディスクまたはリムーバブルディスク、光磁気ディスク、ならびにCDROMおよびDVD-ROMディスクを含む、あらゆる形態の不揮発性メモリ、媒体およびメモリデバイスを含む。
【0161】
ユーザとの対話を提供するために、本明細書に記載の主題の実施形態は、ユーザに情報を表示するためのディスプレイデバイス、たとえば、CRT(陰極線管)またはLCD(液晶ディスプレイ)モニタ、ならびにキーボードおよびポインティングデバイス、たとえば、マウス、トラックボール、またはプレゼンスセンシティブディスプレイ、あるいはユーザがコンピュータに入力を提供できるその他の表面を有するコンピュータ上に実装することができる。ユーザの対話を提供するために、他の種類のデバイスを使用することもでき、たとえば、ユーザに提供されるフィードバックは、視覚的フィードバック、聴覚的フィードバック、または触覚的フィードバックなど、任意の形態の感覚的フィードバックであってよく、ユーザからの入力は、音響、音声、または触覚入力を含む任意の形式で受信することができる。さらに、コンピュータは、ユーザによって使用されるデバイスとの間でドキュメントを送受信することによって、たとえば、ウェブブラウザから受信したリクエストに応じて、ユーザのデバイス上のウェブブラウザにウェブページを送信することによって、ユーザと対話することができる。また、コンピュータは、テキストメッセージまたは他の形式のメッセージをスマートフォンなどの個人用デバイスに送信し、メッセージングアプリケーションを実行し、その見返りにユーザから応答メッセージを受信することによって、ユーザと対話することができる。
【0162】
本明細書で説明される主題の実施形態は、たとえばデータサーバとしてのバックエンドコンポーネントを含むか、またはアプリケーションサーバなどのミドルウェアコンポーネントを含むか、またはたとえば、グラフィカルユーザインターフェースを備えたクライアントコンピュータ、ウェブブラウザ、またはユーザが本明細書に記載されている主題の実装形態と対話できるアプリなどのフロントエンドコンポーネント、あるいはそのようなバックエンド、ミドルウェア、またはフロントエンドコンポーネントの1つまたは複数を含む、コンピューティングシステムに実装することができる。システムのコンポーネントは、通信ネットワークなどのデジタルデータ通信の任意の形式または媒体によって相互接続することができる。通信ネットワークの例は、ローカルエリアネットワーク(LAN)およびワイドエリアネットワーク(WAN)、たとえばインターネットを含む。
【0163】
コンピューティングシステムは、クライアントとサーバを含むことができる。クライアントとサーバは通常、互いにリモートであり、通常は通信ネットワークを通じて対話する。クライアントとサーバの関係は、それぞれのコンピュータで実行され、クライアントとサーバの関係を相互に有するコンピュータプログラムによって発生する。いくつかの実施形態では、サーバは、たとえば、クライアントとして機能するデバイスと対話するユーザにデータを表示し、そこからユーザ入力を受信する目的で、データ、たとえば、HTMLページをユーザデバイスに送信する。ユーザの対話の結果などの、ユーザのデバイスで生成されたデータは、サーバにおいてデバイスから受信することができる。
【0164】
本明細書には多くの特定の実装形態の詳細が含まれているが、これらは、発明の範囲または請求される可能性のあるものの範囲に対する制限として解釈されるべきではなく、むしろ特定の発明の特定の実施形態に固有であり得る特徴の説明として解釈されるべきである。別個の実施形態の文脈において本明細書に記載されている特定の特徴はまた、単一の実施形態において組み合わせて実装することができる。逆に、単一の実施形態の文脈において記載されている様々な特徴はまた、複数の実施形態において別々に、または任意の適切なサブコンビネーションにおいて実装することもできる。さらに、特徴は特定の組合せにおいて作用するものとして上で説明され、最初はそのように主張されても、主張された組合せからの1つまたは複数の特徴は、場合によっては組合せから切り出すことができ、請求された組合せは、サブコンビネーションまたはサブコンビネーションのバリエーションに向けられる場合がある。
【0165】
同様に、動作は特定の順序で図面に示されているが、これは、所望の結果を達成するために、そのような動作が示される特定の順序または連続した順序で実施されること、あるいは図示されるすべての動作が実施されることを必要とすることとして理解されるべきではない。特定の状況では、マルチタスクと並列処理が有利な場合がある。さらに、上記の実施形態における様々なシステムモジュールおよびコンポーネントの分離は、すべての実施形態においてそのような分離を必要とするものとして理解されるべきではなく、説明されたプログラムコンポーネントおよびシステムは、一般に、単一のソフトウェア製品に一緒に統合されるか、または複数のソフトウェア製品にパッケージ化され得ることが理解されるべきである。
【0166】
主題の特定の実施形態が説明されてきた。他の実施形態は、以下の特許請求の範囲内にある。たとえば、特許請求の範囲に記載されているアクションは、異なる順序で実施することができ、それでも所望の結果を達成することができる。一例として、添付の図面に示されているプロセスは、所望の結果を達成するために、示されている特定の順序または連続した順序を必ずしも必要としない。たとえば、動作1420および1425は、
図14の動作1415に従う必要はなく、いくつかの実装形態では、動作1420および1425は、動作1415の前に実施される。さらに、場合によっては、マルチタスクと並列処理が有利な場合がある。
【符号の説明】
【0167】
100 システム
110 プロセッサ
120 制御ユニット(CU)
121 変換ユニット
122 算術および/またはビット単位式
130 算術および/またはビット単位演算ユニット(ABU)
131 算術ブロック
132 ビット単位シフトブロック
133 ビット単位論理ブロック
140 レジスタ
150 メモリユニット
160 単一の金属酸化物半導体(MOS)集積回路(IC)チップ
180 入力デバイス
182 コンピュータプログラム
190 出力デバイス
301 ブール条件
302 結果として生じるタスク
303 代替タスク
310 if-then(-else)条件文
1101A ブール条件
1101B ブール条件の算術および/またはビット単位式
1102 結果として生じるタスク
1103 代替タスク
1110A 条件文
1110B 算術および/またはビット単位式
1100C アセンブリ言語コンピュータプログラム
1100D アセンブリ言語コンピュータプログラム
1200C アセンブリ言語コンピュータプログラム
1200D アセンブリ言語コンピュータプログラム
1201 結果として生じるタスク
1201A ブール条件
1201B ブール条件
1202 代替タスク
1204 無条件ジャンプ文
1205 初期化文
1210A 条件文
1210B 算術および/またはビット単位式
1302 半減算器
1303 XORゲート
1304 NOTゲート
1305 ANDゲート
1306 シフト演算子
1310A 組合せ論理回路
1310B 組合せ論理回路
1310B 条件付き論理回路
1313 差
1313 差信号
1314 ボローアウト
1314 ボローアウト信号
1320 NORゲート
1330 NOTゲート
1415 動作
1420 動作
1425 動作
【国際調査報告】