(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2022037900
(43)【公開日】2022-03-09
(54)【発明の名称】圧縮データ・ストリームの並列展開
(51)【国際特許分類】
H03M 7/42 20060101AFI20220302BHJP
G06F 16/174 20190101ALI20220302BHJP
【FI】
H03M7/42
G06F16/174
【審査請求】未請求
【請求項の数】34
【出願形態】OL
【外国語出願】
(21)【出願番号】P 2021123793
(22)【出願日】2021-07-29
(31)【優先権主張番号】17/002,564
(32)【優先日】2020-08-25
(33)【優先権主張国・地域又は機関】US
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
1.ZIGBEE
2.TENSORFLOW
(71)【出願人】
【識別番号】501450960
【氏名又は名称】エヌビディア コーポレーション
(74)【代理人】
【識別番号】110000855
【氏名又は名称】特許業務法人浅村特許事務所
(72)【発明者】
【氏名】スティーブン パーカー
【テーマコード(参考)】
5J064
【Fターム(参考)】
5J064AA03
5J064BA09
(57)【要約】
【課題】圧縮データ・ストリームの並列展開を実施するための技法を提供する。
【解決手段】さまざまな例では、メタデータは、圧縮データの並列展開を可能にするために、算術符号化、エントロピー符号化などの逐次的圧縮アルゴリズムに従って圧縮された圧縮データ・ストリームに対応して生成され得る。その結果、圧縮データ・ストリーム自体に対する修正が必要とされないことがあり、システムの帯域幅要件及び記憶要件は最小に影響され得る。さらに、展開を並列化することによって、システムは、並列展開のためのメタデータを使用してシステムのための採用サイクルも減少又は完全に除去しながら、より早い展開時間から利益を得ることがある。
【選択図】
図1
【特許請求の範囲】
【請求項1】
圧縮データ及び前記圧縮データに対応するメタデータを受け取ることと、
前記メタデータに少なくとも一部は基づいて、前記圧縮データに対応する初期入力場所及び初期出力場所を決定することと、
前記初期入力場所及び前記初期出力場所に少なくとも一部は基づいて、前記圧縮データの複数のセグメントのうちの少なくとも2つのセグメントに対して入力セグメント場所及び出力セグメント場所を決定することと、
展開された出力を生成するために前記入力セグメント場所及び前記出力セグメント場所に従って前記少なくとも2つのセグメントを並列に展開することと
を含む方法。
【請求項2】
前記メタデータに少なくとも一部は基づいて、前記圧縮データのブロックの辞書の各辞書セグメントについての入力辞書場所及びシンボル索引を決定することと、
前記辞書を展開することと
をさらに含み、
前記複数のセグメントを前記展開することが、前記辞書を使用して実行される、
請求項1に記載の方法。
【請求項3】
前記辞書を前記展開することが、前記辞書の各辞書セグメントが、プロセッサのそれぞれのスレッドを使用して展開されるように並列に実行される、請求項2に記載の方法。
【請求項4】
前記メタデータに少なくとも一部は基づいて、前記圧縮データの前記複数のセグメントの各セグメントについてのコピー索引値を決定することをさらに含む、請求項2に記載の方法。
【請求項5】
前記圧縮データの複数のブロックのうちの少なくとも2つのブロックについて、前記初期入力場所が1つ又は複数のブロック入力場所を示し、前記初期出力場所が1つ又は複数のブロック出力場所を示し、前記複数のセグメントが前記複数のブロックのうちの単一のブロックに対応する、請求項2に記載の方法。
【請求項6】
前記複数のブロックのうちの2つ以上のブロックが、2つ以上のプロセッサ・リソースを使用して並列に展開される、請求項5に記載の方法。
【請求項7】
前記2つ以上のブロックの各ブロックが、グラフィックス処理ユニット(GPU:graphics processing unit)のそれぞれのワープを使用して処理される、請求項6に記載の方法。
【請求項8】
前記少なくとも2つのセグメントを並列に前記展開することが、プロセッサの別個の処理スレッドを使用して各セグメントを並列に展開することを含む、請求項6に記載の方法。
【請求項9】
前記少なくとも2つのセグメントを前記展開することが、前記圧縮データからの1つ又は複数のリテラルを出力データに出力するため、1つ又は複数のコピー演算のために前記出力データ内のスペースを予約するため、及びコピー情報をデータ構造に記憶するために、前記複数のセグメントに対するパスを実行することを含む、請求項2に記載の方法。
【請求項10】
前記少なくとも2つのセグメントを前記展開することが、前記1つ又は複数のコピー演算を実行し、前記1つ又は複数のコピー演算に対応するシンボルを出力ストリームに出力するために、前記1つ又は複数のコピー演算に対する別のパスを実行することを含む、請求項9に記載の方法。
【請求項11】
前記1つ又は複数のコピー演算のうちの少なくとも1つのコピー演算が、前記1つ又は複数のコピー演算のうちの1つ又は複数の他のコピー演算と並列に実行される、請求項10に記載の方法。
【請求項12】
コピー演算の第1のシンボルが、前記コピー演算の第2のシンボルと並列に前記出力にコピーされる、請求項10に記載の方法。
【請求項13】
前記圧縮データが、前記圧縮データ内のシンボルを符号化するための可変長のビット、又は前記圧縮データ内で符号化された1つ若しくは複数のコピー演算のための可変出力サイズ、のうちの少なくとも1つを含む、請求項1に記載の方法。
【請求項14】
前記圧縮データが、辞書符号化又はエントロピー符号化のうちの少なくとも1つを使用して符号化されたデータに対応する、請求項1に記載の方法。
【請求項15】
圧縮データの複数のセグメント間の区切りを決定するために前記圧縮データを解析することと、
前記区切りに少なくとも一部は基づいて、前記複数のセグメントのうちの少なくとも2つのセグメントに対して、前記少なくとも2つのデータ・セグメントのうちの各データ・セグメントに対応する前記圧縮データ内の初期入力場所及び出力データ内の初期出力場所を示すメタデータを生成することと、
前記圧縮データ及び前記メタデータを展開器に送ることと
を含む方法。
【請求項16】
前記メタデータが、前記少なくとも2つのデータ・セグメントに対応するコピー索引をさらに示す、請求項15に記載の方法。
【請求項17】
前記分析することに少なくとも一部は基づいて、前記圧縮データに対応する辞書の辞書セグメント間の追加の区切りを決定することと、
前記圧縮データ内の前記辞書の各辞書セグメントの少なくとももう1つの初期入力場所を示す追加メタデータを生成することと
をさらに含み、
前記送ることが、前記追加メタデータを送ることをさらに含む、
請求項15に記載の方法。
【請求項18】
前記解析することに少なくとも一部は基づいて、前記圧縮データの追加セグメント間の追加の区切りを決定することと、
前記圧縮データの各追加セグメントの別の初期入力場所を示す追加メタデータを生成することと
をさらに含み、
前記送ることが、前記追加メタデータを送ることをさらに含む、
請求項15に記載の方法。
【請求項19】
前記圧縮データがDEFLATE圧縮形式に従って圧縮され、前記方法が、
前記解析することに少なくとも一部は基づいて、前記圧縮データ内の追加の区切りを決定することと、
前記追加の区切りに対応する別の初期入力場所を示す追加メタデータを生成することと
をさらに含み、
前記送ることが、前記追加メタデータを送ることをさらに含む、
請求項15に記載の方法。
【請求項20】
前記圧縮データが、可変入力長又は可変出力長のうちの少なくとも1つを有するデータ・ストリームに対応する、請求項15に記載の方法。
【請求項21】
前記圧縮データが、レンベル-ジヴ・アルゴリズム又はハフマン符号化のうちの少なくとも1つに従って圧縮される、請求項15に記載の方法。
【請求項22】
前記圧縮データが、算術符号化又はエントロピー符号化のうちの少なくとも1つを使用して圧縮される、請求項15に記載の方法。
【請求項23】
前記圧縮データが、前記圧縮データ内のシンボルを符号化するための可変長のビット、又は前記圧縮データ内で符号化された1つ若しくは複数のコピー演算のための可変出力サイズ、のうちの少なくとも1つを含む、請求項15に記載の方法。
【請求項24】
前記メタデータの少なくとも一部分が、接頭部和形式で符号化される、請求項15に記載の方法。
【請求項25】
1つ又は複数のプロセッサと、
1つ又は複数のメモリ・デバイスであって、前記1つ又は複数のプロセッサを使用して実行されたとき、前記1つ又は複数のプロセッサに、
圧縮データのセグメントを識別する圧縮データ解析器、
前記識別されたセグメントに少なくとも一部は基づいて、前記圧縮データの前記識別されたセグメントの各識別されたセグメントについての、初期入力場所、初期出力場所、及びコピー索引を示すメタデータを生成するメタデータ生成器、及び
前記圧縮データ及び前記メタデータを受け取り、
前記識別されたセグメントを、プロセッサのスレッドを使用して、並列に、前記メタデータに従って処理し、
前記処理に少なくとも一部は基づいて、リテラル・シンボルを出力に出力し、コピー情報を、延期されたコピー・キューに出力し、
コピーされたシンボルを前記出力に出力するように前記コピー情報を処理する
展開器
をインスタンス化させる命令を記憶した1つ又は複数のメモリ・デバイスと
を備えるシステム。
【請求項26】
前記圧縮データを入力データ・ストリームから生成する圧縮器をさらに備える、請求項25に記載のシステム。
【請求項27】
前記コピー情報を前記処理することが、第1のコピー演算を第2のコピー演算と並列に処理することを含む、請求項25に記載のシステム。
【請求項28】
前記コピー情報を前記処理することが、コピー演算の第1のシンボルを前記コピー演算の第2のシンボルと並列に処理することを含む、請求項25に記載のシステム。
【請求項29】
前記圧縮データ解析器がさらに、前記圧縮データ内のブロックを識別し、
前記識別されたセグメントが、2つ以上のセグメントのブロックに対応する、
請求項25に記載のシステム。
【請求項30】
前記圧縮データ解析器がさらに、前記識別されたセグメントに対応する辞書の辞書セグメントを識別し、
前記メタデータが、前記辞書セグメントの初期辞書場所をさらに示し、
前記辞書セグメントが、前記辞書を生成するように並列に処理され、
前記識別されたセグメントを前記処理することが、前記辞書に少なくとも一部は基づく、
請求項25に記載のシステム。
【請求項31】
前記辞書が、第1の符号化パスが前記圧縮データ・ストリームに対して実施されたことに少なくとも一部は基づいて生成され、前記辞書が、第2の符号化パスが前記辞書の圧縮バージョンに対して実施されたことに少なくとも一部は基づいて圧縮される、請求項30に記載のシステム。
【請求項32】
前記圧縮データが、前記圧縮データ内のシンボルを符号化するための可変長のビット、又は前記圧縮データ内で符号化されたコピーのための可変出力サイズ、のうちの少なくとも1つを含む、請求項25に記載のシステム。
【請求項33】
前記システムが、
自律機械若しくは半自律機械のための制御システム、
自律機械若しくは半自律機械のための知覚システム、
シミュレーション演算を実施するためのシステム、
ディープ・ラーニング演算を実施するためのシステム、
リアルタイム・ストリーミング・ブロードキャストを実施するためのシステム、
ビデオ・モニタリング・サービスを実施するためのシステム、
インテリジェント・ビデオ解析を実施するためのシステム、
エッジ・デバイスを使用して実装されたシステム、
レイ・トレーシングされたグラフィカル出力を生成するためのシステム、
1つ又は複数の仮想機械(VM:virtual machine)を組み込んだシステム、
少なくとも部分的にデータ・センタ内に実装されたシステム、又は
少なくとも部分的にクラウド・コンピューティング・リソースを使用して実装されたシステム
のうちの少なくとも1つにおいて備えられる、請求項25に記載のシステム。
【請求項34】
圧縮データ及び前記圧縮データに対応するメタデータを受け取ることであって、前記メタデータが、前記圧縮データに対応する初期入力場所及び初期出力場所と、前記圧縮データの複数のセグメントのうちの少なくとも2つのセグメントについての入力セグメント場所及び出力セグメント場所を示す、受け取ることと、
前記初期入力セグメント及び前記入力セグメント場所によって示される位置に対応する入力を使用して前記少なくとも2つのセグメントを並列に展開することであって、前記展開の出力が、前記初期出力場所及び前記出力セグメント場所に対応する位置を有する、展開することと
を含む方法。
【発明の詳細な説明】
【背景技術】
【0001】
可逆的圧縮アルゴリズムは、記憶及び転送のためにデータセットのサイズを減少させるために以前から使用されている。多くの従来の圧縮アルゴリズムは、レンベル-ジヴ(LZ:Lempel-Ziv)アルゴリズム、ハフマン符号化、又はそれらの組み合わせに依拠する。1つの実例として、DEFLATE圧縮形式-インターネット標準RFC1951-は、ハード・ドライブ上での記憶などのために電子メール通信、ウェブページをダウンロードすること、ZIPファイルを生成することとともに使用するために、LZアルゴリズムとハフマン符号化を組み合わせたものである。DEFLATEのようなアルゴリズムは、データ転送における帯域幅を節約し得る、及び/又はより少ないビットでデータを記憶することによってディスク・スペースを維持し得る。しかしながら、従来の圧縮アルゴリズムは、後の入力を再構築するための以前の入力に対する強い依存により、本質的に逐次的であり、これらの圧縮技法を、グラフィックス処理ユニット(GPU:graphics processing unit)などの並列処理ユニット上での展開に関してあまり理想的でないものにする。その結果、圧縮データを処理するための細かい粒度の並列展開アルゴリズムは、まれである。
【0002】
並列展開に対する大部分の従来の手法は、LZアルゴリズムのデータ・ハザードを除去するため及び/又はハフマン符号化ステップを除去若しくは制限するために圧縮アルゴリズム自体を修正することに依拠する。以前の並列展開のための手法の実例としては、LZ4と、LZソート及びエンプティ設定(LZSSE:LZ sort and set empty)がある。これら及び類似の手法は、LZアルゴリズム及び/又はハフマン符号化の圧縮利益のうちのいくつかを犠牲にしたにもかかわらず、並列処理アーキテクチャからのいくつかの利点、たとえば、ランタイムの減少、を達成することが可能である。たとえば、これらの並列展開アルゴリズムは、DEFLATE圧縮形式という従来の逐次的実装形態下で圧縮された同じファイルと比較して、ファイルのサイズにおける10~15%の増加をもたらすことが多い。
【発明の概要】
【発明が解決しようとする課題】
【0003】
これらの並列展開アルゴリズムの別の欠点は、従来のファイル形式の広範な使用が、任意の新しい提案される形式の幅広い採用に対するかなりの困難を提示することである。たとえば、より従来の圧縮された形式-LZアルゴリズム、ハフマン符号化、又はそれらの組み合わせを使用することなど-に従ってデータがすでに記憶されている方式の場合、その方式は、新しい圧縮アルゴリズム・タイプとともに機能するように再構成される必要があることがある。方式の帯域幅要件及び記憶要件が、帯域幅の低下及び逐次的圧縮アルゴリズムのファイル・サイズの減少のために最適化されていることがあり、並列展開アルゴリズムの帯域幅の増加及び記憶要件は、追加リソースを必要とすることがあるので、この再構成は、コストがかかることがある。さらに、既存の圧縮形式からすでに記憶されたデータが再形式化されなければならないことがある、及び/又はデータの新しいコピーが、既存のコピーの除去の前に更新された形式で記憶されなければならないことがあり、それによって、採用サイクルの時間をさらに増加させ、追加リソースの獲得を潜在的に必要とすることがある。
【課題を解決するための手段】
【0004】
本開示の実施例は、圧縮データ・ストリームの並列展開を実施するための技法に関する。圧縮データの並列展開のためにデータ・ストリーム内で異なるタイプの並行処理(parallelism)を公表するために、レンベル-ジヴ(LZ)、ハフマン符号化、それらの組み合わせ、及び/又は他の圧縮アルゴリズムなどの、より従来の圧縮アルゴリズムに従って圧縮されたデータ・ストリームのためのメタデータを生成するシステム及び方法が開示される。たとえば、メタデータは、圧縮データの個々のデータ部分又はブロックに対応する圧縮データ内の区切り、各コンテンツ部分内のデータ・セグメントの区切り、及び/又は各データ部分若しくはブロック内の辞書セグメントの区切りを示してよい。さらに、メタデータは、展開器が、特に並列に展開するときに、展開データが出力ストリーム内でどこに適合するかを識別することができるように、データの出力ストリーム内の出力場所を示し得る。したがって、上記で説明されたシステムなどの従来のシステムとは対照的に、圧縮ストリームと関連づけられたメタデータは、圧縮データ・ストリーム自体への修正を必要とすることなく、より軽微な、たとえば、1~2%の増加を圧縮データ・ストリームの全体的なファイル・サイズにもたらす。その結果、システムの帯域幅要件及び記憶要件は、圧縮データの並列処理により、より速い展開時間という利益も達成しながら、従来の並列展開アルゴリズムと比較して影響されるのが最小であり得る。さらに、展開のためにGPUなどの並列プロセッサを用いるシステムは、メタデータを使用してデータを並列に展開し得るが、展開のために中央処理装置(CPU:)を用いるシステムは、メタデータを無視し、従来の技法に従って圧縮データを逐次的に展開し得るので、圧縮ストリームが影響されないこと(たとえば、DEFLATE形式が使用される場合、圧縮ストリームは依然として、DEFLATE形式に対応する)により、より古いシステム及びファイルとの互換性に関する問題が回避可能である。
【0005】
圧縮データ・ストリームの並列展開のための本システム及び本方法は、以下で添付の図面を参照して詳細に説明される。
【図面の簡単な説明】
【0006】
【
図1】本開示のいくつかの実施例による、圧縮データ・ストリームの並列展開のための処理100を示す例示的なデータ・フロー図である。
【
図2A】本開示のいくつかの実施例による、圧縮データ・ストリームの並列展開のためのメタデータに対応する例示的なテーブルである。
【
図2B】本開示のいくつかの実施例による、圧縮データ・ストリームの並列展開のための接頭部和(prefix sum)形式のメタデータに対応する例示的なテーブルである。
【
図2C】本開示のいくつかの実施例による辞書及び辞書と関連づけられたメタデータに対応する例示的なテーブルである。
【
図2D】本開示のいくつかの実施例による、圧縮データ・ストリームのブロックの並列展開のためのメタデータに対応する例示的なテーブルである。
【
図2E】本開示のいくつかの実施例による、並列処理に適していない圧縮データ・ストリームのコピーに対応する例示的なテーブルである。
【
図2F】本開示のいくつかの実施例による、並列処理に適していない圧縮データ・ストリームのコピーに対応する例示的なテーブルである。
【
図3】本開示のいくつかの実施例による、圧縮データ・ストリームの並列展開のための圧縮データ・ストリームのためのメタデータを生成するための方法に対応する流れ図である。
【
図4】本開示のいくつかの実施例による、圧縮データ・ストリームを並列に展開するための方法に対応する流れ図である。
【
図5】本開示のいくつかの実施例を実装することにおける使用に適した例示的なコンピューティング・デバイスのブロック図である。
【
図6】本開示のいくつかの実施例を実装することにおける使用に適した例示的なデータ・センタのブロック図である。
【発明を実施するための形態】
【0007】
システム及び方法は、圧縮データ・ストリームの並列展開に関連して開示される。本明細書では主に、レンベル-ジヴ(LZ)アルゴリズム及び/又はハフマン符号化(たとえば、DEFLATE、LZ4、LZソート及びエンプティ設定(LZSSE)、PKZIP、LZジャカード距離(LZJD:LZ Jaccard Distance)、LZウェルチ(LZW:LZ Welch)、BZIP2、有限状態エントロピーなど)を使用して圧縮されたデータ・ストリームに関して説明されるが、これは、限定することを意図したものではない。したがって、本開示の範囲から逸脱することなく、他の圧縮アルゴリズム及び/又は他の技法が使用されてよい。たとえば、フィボナッチ符号化、シャノン-ファノ符号化、算術符号化、人工蜂コロニーアルゴリズム、Bentley、Sleator、Tarjan、及びWei(BSTW:Bentley, Sleator, Tarjan, and Wei)アルゴリズム、部分一致による予測(PPM:prediction by partial matching)、ランレングス符号化(RLE:run-length encoding)、エントロピー符号化、ライス符号化、ゴロム符号、辞書型符号化などである。別の実例として、本明細書において説明されるメタデータ生成及び並列展開技法は、シンボルを符号化するための可変長のビット及び/又はコピーのための可変出力サイズ(たとえば、コピーは、1つのシンボル、2つのシンボル、5つのシンボルなどに対応してよい)のどちらかを含む任意の圧縮データ形式に適してよい。
【0008】
本明細書において説明されるメタデータ生成及び展開技法は、データ圧縮及び展開-特に可逆的圧縮及び展開-が実装される任意の技術空間において使用されてよい。たとえば、限定するものではないが、本明細書において説明される技法は、オーディオ・データ、ラスタ・グラフィックス、3次元(3D:three-dimensional)グラフィックス、ビデオ・データ、暗号、遺伝学及びゲノム科学、医学的イメージング(たとえば、医学におけるデジタル・イメージング及び通信(DICOM:digital imaging and communication in medicine)データを圧縮するための)、実行ファイル、データをウェブ・サーバに及びそれから移動させること、中央処理装置(CPU)とグラフィックス処理ユニット(GPU)のとの間でデータを送ること(たとえば、CPUとGPUとの間の入出力(I/O:input/output)帯域幅を増加させるために)、データ記憶(たとえばデータ・フットプリント(footprint)を減少させる)、電子メール、テキスト、メッセージ、ファイルを圧縮すること(たとえば、ZIPファイル、GZIPファイルなど)、及び/又は他の技術空間のために実装されてよい。本明細書において説明されるシステム及び方法は、CPUとGPUとの間でデータを通信するなどのI/O集約的使用事例について、記憶を増幅しPCIe帯域幅を増加させるために特によく適している。
【0009】
図1を参照すると、
図1は、本開示のいくつかの実施例による、圧縮データ・ストリームの並列展開のための処理100を示す例示的なデータ・フロー図である。本明細書において説明されるこれ及び他の配置は実例として記載されているにすぎないことが理解されるべきである。他の配置及び要素(たとえば、機械、インターフェース、機能、順序、機能のグループ化など)は、図示される配置及び要素に加えて、又はその代わりに使用されてよく、いくつかの要素は全体で省略されてよい。さらに、本明細書において説明される要素の多くは、任意の適切な組み合わせ及び任意の場所において個別の構成要素若しくは分散された構成要素部品として実装されてもよいし他の構成要素とともに実装されてもよい機能エンティティである。本明細書においてエンティティによって実施されると説明されるさまざまな機能は、ハードウェア、ファームウェア、及び/又はソフトウェアによって行われてよい。たとえば、さまざまな機能は、メモリに記憶された命令をプロセッサが実行することによって行われてよい。
【0010】
プロセス100は、データ102を受け取る及び/又は生成することを含んでよい。たとえば、データ102は、限定するものではないが、本明細書において説明される技術空間などの任意のタイプの技術空間に対応してよい。たとえば、データ102は、テキスト・データ、画像データ、ビデオ・データ、オーディオ・データ、ゲノム配列決定データ、及び/又は他のデータ型、又はそれらの組み合わせに対応してよい。いくつかの実施例では、データ102は、可逆的圧縮技法を使用して記憶及び/又は送信されることになるデータに対応してよい。
【0011】
プロセス100は、圧縮データ106を生成するためにデータ102を圧縮する圧縮器104を含んでよい。データ102は、限定するものではないが、本明細書において説明されるなどの圧縮形式又はアルゴリズム任意の圧縮形式又はアルゴリズムに従って圧縮されてよい。たとえば、限定するものではないが、データ102は、レンベル-ジヴ・アルゴリズム、ハフマン符号化、DEFLATE形式、及び/又は別の圧縮形式若しくは技法に従って圧縮されてよい。
【0012】
圧縮データ解析器108は、その中における並行処理のための機会を決定するために圧縮データ106を解析し得る。たとえば、圧縮データ解析器108は、他のセグメントの処理に影響することなく少なくとも部分的に並列に処理可能であるデータ・ストリームの部分に対応する、圧縮データ132内のセグメント(又はセクション)を識別し得る。いくつかの実施例では、セグメントの数は、データの各ブロックに対して同じであってもよいし、異なっても(たとえば、動的に決定されても)よい。セグメントの数は、任意の特定の数に限定されない。しかしながら、いくつかの非限定的な実施例では、圧縮データの各ブロックは、GPU上のワープの32個のスレッド(又はコプロセッサ)が32個のセグメントを並列に処理し得るように、32個の異なるセグメントに分割されてよい。他の非限定的な例として、圧縮データ106、又はそのブロックは、4つのセグメント、12個のセグメント、15個のセグメント、64個のセグメントなどに分割されてよい。セグメントの数は、本明細書において説明されるように、各ブロックに対応する辞書コーディングのために使用されるデータの各ブロック及び/又はデータ構造の各部分に対応してよい。したがって、データ構造(辞書)は、並列復号化のためにセグメントの数に分割されてよく、データは、たとえばすでに復号された辞書を使用して、並列復号化のためにセグメントの(実施例では、等しい)数に分割されてよい。
【0013】
圧縮データ106のどの部分が各セグメントと関連づけるべきかを決定するために、圧縮データ解析器108は、圧縮データ106内のシンボル又はトークンの数を決定するために圧縮データ106に対して第1のパス(pass)を実行してよい。次いで、第2のパスでは、シンボルの数は、どれくらい多くのシンボル、及びどのシンボルが各セグメントに含まれることになるかを決定するために使用されてよい。いくつかの実施例では、シンボルの数は、セグメント間で、等しく、又は可能な限り等しく、分割されてよい。たとえば、320のシンボルと、32のセグメントがある場合、各セグメントは、10のシンボルを含んでよい。他の実例では、シンボルの数は、展開を単純化するために、たとえば、セグメントのうちの1つ又は複数に対してプラス又はマイナス1つ又は複数のシンボルなど、調整されてよい。たとえば、上記の例ではセグメントごとに10のシンボルを選ぶ代わりに、セグメント境界を、展開器114がより容易に(たとえば、圧縮データ106のバイト間で出力を分割することを回避することによって)取り扱い得るあるバイト間隔、たとえば、4バイト間隔、に対応させるために、セグメントのうちの1つ又は複数は11のシンボルを含んでよい(他のセグメントは、9つを含んでよい)。
【0014】
次いで、セグメントは、圧縮データ106を並列に展開するための展開器114に情報を提供する圧縮データ106に対応するメタデータ112を生成するためにメタデータ生成器110によって解析されてよい。たとえば、各セグメント内で、メタデータ112は、3つの情報を識別し得る。第1に、圧縮データ内のどこでセグメントを復号化し始めるかを識別するビット数、第2に、復号された結果が挿入される出力バッファ内の場所、及び第3に、延期された(deferred)コピーの出力を開始するコピー(又は合致)のリスト、たとえばコピー索引、内の位置又は場所である。たとえば、第3のタイプのメタデータ112に関して、復号化は並列に実行され得るので、LZアルゴリズムが使用される場合、展開器114は、コピーを逐次的に復号しないことがあり、そのため、コピーは、後での実行のためにバッチ処理されることがある。したがって、コピー索引は、各コピーのための出力バッファ内の空間を節約するように展開器114に示すためにメタデータ112に含まれてよく、また、展開器114による第1のパスが実行されると、出力バッファにデータを格納するために展開器114によってコピーが実行され得るように、コピー索引を別個のデータ・アレイに記憶してよい。いくつかの実施例では、コピー窓は、設定された長さ、たとえば、スライド窓であってよい。たとえば、LZ77が使用される場合、コピーのためのスライド窓は32kbであってよいが、他のアルゴリズムでは、スライド窓は、異なるサイズ(たとえば、16kb、64kb、128kbなど)であってもよいし、可変サイズであってもよい。したがって、圧縮データ106は、スライド窓サイズに基づいて生成され得る。メタデータ112の結果として、GPU上での並行処理は、GPUの各スレッドが互いとは無関係に圧縮データ106の一部分を復号し始め得るように実行され得る。32のセグメントを使用した上記の実例では、このプロセス100は、32に分かれた(32-way)並行処理をもたらしてよく、各スレッドは、圧縮データ106の1/32、すなわちそのブロック、を復号し得る。
【0015】
いくつかの実施例では、メタデータは、各セグメントについてのビットの数、各セグメントについての出力バイトの数、及び/又は各セグメント内のコピーの数に対応することがある。しかしながら、他の実施例では、接頭部和演算は、接頭部和形式でメタデータ112を生成するために、このデータ(たとえば、ビットの数、出力バイトの数、及び/又はコピーの数)に対して実行されることがある。その結果、メタデータ112は、各セグメントについての入力(ビット、ニブル、バイトなど)場所(たとえば、以前の各セグメントについてのビット、ニブル、又はバイトの数を使用して決定される)、各セグメントについての出力(ビット、ニブル、バイトなど)場所(たとえば、以前のセグメントから出力ビット、ニブル、又はバイトの数を使用して決定される)、及びメタデータ112が生成されている現在のセグメントの前の各セグメントに含まれるコピーの数に対応し得る。メタデータのこれらの2つの形式間の差の実例が、本明細書においてさらに詳細に説明されるように、
図2A及び
図2Bに示されている。いくつかの実施例では、各セグメントについての入力ビット、出力位置、及び/又はコピー索引の値が単調に増加していくことにより、メタデータ112は、共通オフセット(すべてのセグメントによって共有される)並びに各セグメント内の入力ビット、出力位置、及びコピー索引間の差を記憶することによって圧縮されることがある。
【0016】
本明細書において説明されるように、圧縮データ解析器108は、圧縮データ106の内容部分に対応するメタデータ112を決定するために圧縮データ106を解析し得るが、圧縮データ106に対応する辞書部分(存在する場合)に対応するメタデータ112を決定するため、及び/又は圧縮データ106のより大きなストリーム内のブロックを識別することに対応するメタデータ112を決定するためにも、圧縮データ106を解析することがある。1つの実例として、圧縮データ106の内容部分は、展開器114によって適切に復号されるために、辞書を必要とすることがある。辞書は、ハフマン符号化が使用される実施例においてハフマン木(又はマッチング木)の表現を含んでよい。いくつかの実施例では、LZアルゴリズムとハフマン符号化が両方とも(たとえば、DEFLATE形式で)使用されるなどの場合、第1のハフマン符号化演算は、リテラル及びコピーの長さに対して実行されてよく、第2のハフマン符号化演算は、距離に対して実行されてよい。したがって、2つ以上のハフマン木は、リテラル並びにコピーの長さ及び距離の各々を復号するために辞書内に含まれてよい。
【0017】
他の実施例では、辞書は、展開器114が辞書を使用して圧縮データ106の内容部分を展開し得るように、圧縮データ106がどのシンボルに対応するか-又はそれに対応するビット値-に関する標識を提供し得る。いくつかの実施例では、辞書は、ハフマン符号化であってよく、圧縮データ106を展開するためにハフマン木に対応してもよい。辞書がDEFLATE形式などで使用される場合、圧縮データ106の各ブロックに対して、メタデータ生成器110は、辞書の各セグメントの開始入力ビット及び辞書が対応する圧縮データ106のブロックの内容部分内の各シンボルのために使用されるビットの数に対応するメタデータ112を生成し得る。したがって、辞書は、メタデータ112に基づいてセグメントに分割され、GPUのスレッドを使用して並列に処理され得る。本明細書において説明されるように、セグメントの数は、実施例に応じて、圧縮データ106のブロックのデータ又は内容部分のセグメントの数に類似してもよいし、異なってもよい。さらに、辞書は、圧縮データ106のデータ・セグメントのコピー又は合致のそれと同様に、補填(fill)又は繰り返してよく、この補填又は繰り返しは、辞書をさらに圧縮するために使用されてよい。
【0018】
圧縮データ106は、圧縮器104によって決定される任意の数の基準に基づいて、及び/又は使用されている圧縮形式若しくはアルゴリズムに従って、任意の数のブロックに分割されてよい。たとえば、圧縮データ106内の頻度又は優先順位が変化した場合、第1のブロック及び第2のブロックが作成されることがある。非限定的な例として、圧縮データ106の第1の部分の場合は、A、e、及びiという文字が最も頻度が高いことがあり、圧縮データ106の第2の部分の場合は、g、F、及びkという文字が最も頻度が高いことがある。したがって、使用される特定の圧縮アルゴリズムによれば、第1の部分は、第1のブロックに分離されることがあり、第2の部分は、第2のブロックに分離されることがある。圧縮データ106のために圧縮器104によって決定される任意の数のブロックがあり得る。圧縮データ解析器108は、圧縮データ106のより大きなストリーム内のブロックの場所を決定するために、これらのブロックを解析し得る。したがって、メタデータ生成器110は、非圧縮ブロックを含むことがある圧縮データ106の各ブロックの開始入力ビット及び出力バイト(たとえば、復号データの第1の出力バイト場所)を識別するメタデータ112を生成し得る。ブロックが互いと分離され、メタデータ112によって別個に識別される結果として、たとえば、ブロックの各々における圧縮データ106が並列に処理されることに加えて、ブロックも並列に処理されてよい。たとえば、各ブロックが32個のセグメントを含む場合、第1のブロックは、GPUの第1のワープを使用して実行されてよく、第2のブロックは、GPUの第2のワープを使用して第1のブロックと並列に実行されてよい。ブロックのうちの1つ又は複数が非圧縮である実例では、非圧縮ブロックは、辞書なしで送られることがあり、非圧縮ブロックの入力ビット及び出力バイトは、データを出力に直接的にコピーするために展開器114によって使用されることがある。
【0019】
その結果、メタデータ112は、より大きなストリーム内の各ブロックのための入力場所及び出力場所、辞書の各シンボルのための各ブロック内の辞書のための入力場所並びにビット値、並びに各ブロック内の各セグメントについての入力場所、出力場所、及びコピー索引に対応することがある。このメタデータ112は、さまざまな形の並行処理を用いて圧縮データ106を復号又は展開するために展開器114によって使用されてよい。たとえば、本明細書において説明されるように、個々のブロックは、たとえば、異なるGPUリソース及び/又は並列処理ユニットを使用して、並列に復号されてよい。さらに、各(並列展開された)ブロック内で、辞書(存在する場合)は、セグメントに分割されることがあり、このセグメントは、並列に復号又は展開されることがある(たとえば、辞書の64個のセグメントがある場合、64個のすべてのセグメントは、GPUの64個の異なるスレッド又は2つのワープを使用することなどによって、並列に復号されることがある)。さらに各(並列展開された)ブロック内で、ブロックの内容部分は、セグメントに分割されることがあり、このセグメントは、並列に復号又は展開されることがある。さらに、本明細書において規定されるように、コピー演算又はマッチング演算のうちの1つ又は複数は、展開器114によって並列に実行されることがあり、たとえば、コピーが、出力ストリームに復号されているデータに依拠する場合、そのコピーは、1つ又は複数の他のコピーと並列に実施されることがある。さらに、各個々のコピー演算が、並列に実行されることがある。たとえば、コピーが、1よりも大きい長さを有する場合、完全なコピーの各シンボル又は字のコピーが、展開器114によって並列に実行されることがある-たとえば、
図2Fを参照すると、「issi」の各字は、並列に実行されてよい(たとえば、GPUの第1のスレッド上で「i」を、第2のスレッド上で「s」を、スレッド第3の上で「s」を、第4のスレッド上で「i」をコピーして、出力ストリームのためのそれぞれの出力バイトを生成する)。
【0020】
展開器114は、圧縮データ106及びそれと関連づけられたメタデータ112を受け取り得る。展開器114は、メタデータ112を使用して、圧縮データ106を別個のブロックに分離し得る(複数のブロックがある場合)。たとえば、展開器114は、圧縮データ106のブロック・レベルに対応するメタデータ112を解析し得、各ブロックの入力(ビット、ニブル、バイトなど)場所(たとえば、第1のビット、又はブロックに対応する圧縮データ106)及び各ブロックのための出力(ビット、ニブル、バイトなど)場所(たとえば、ブロックからの、展開後のデータが置かれる、出力ストリーム内の第1の出力場所)を決定し得る。各ブロックが識別された後、展開器114は、逐次的に各ブロックを処理し(たとえば、第1のブロックが処理されてよく、次いで、第2のブロックが処理されてよく、以下同様である)てもよいし、ブロックのうちの2つ以上を異なるGPUリソースによる並列展開に割り当て(たとえば、第1のブロックを第1のGPU又はそのスレッドの第1のグループに割り当て、第2のブロックを第2のGPU又は第1のGPUのスレッドの第2のグループに割り当てることなどによって)てもよいし、それらの組み合わせであってもよい。各ブロックは、いくつかの実施例では、非圧縮モード・ブロック、固定コード・テーブル・モード・ブロック、生成されたコード・テーブル・モード・ブロック、及び/又は他のタイプなどの、異なるタイプ又はモードに対応し得る。展開器114は、モードに基づいて、圧縮データ106を展開(及び/又は非圧縮モードのときは非圧縮データを復号)してよく、メタデータ112は、モードに基づいて異なってよい。たとえば、非圧縮モードでは、データは展開される必要がない及び/又はコピー又はマッチングがないことがあるので、辞書がないことがある。したがって、メタデータは、非圧縮ブロックに対応する入力データ・ストリームが出力ストリームに直接的にコピーされるように、データのための入力場所及び出力場所のみを示すことがある。
【0021】
展開器114は、辞書及びブロックの内容部分と関連づけられたメタデータ112を使用してデータの各ブロックを展開し得る。たとえば、各ブロックに対して、メタデータ112は、辞書の入力(ビット、ニブル、バイトなど)場所及びブロック内のデータのあらゆるセグメントの各シンボルに対するビット値(又はビットの数)を識別し得る。本明細書において説明されるように、辞書は、ブロックの内容部分を正確に展開するために展開器114によって使用されることがある。辞書は、ブロックの内容部分に対するハフマン符号化を使用して生成されることがあり、いくつかの実施例では、辞書に対応する圧縮データもハフマン符号化されることがある。その結果、実施例では、圧縮データの辞書部分は、ハフマン符号化を使用して圧縮されることがあり、圧縮データの内容部分はハフマン符号化されることがある。各ブロック内の圧縮データ106の辞書部分に対応するメタデータ112は、辞書のセグメントの入力場所を示すことがある。たとえば、辞書が32のセグメントに分割される場合、メタデータ112は、辞書の各セグメントの開始入力ビット(及び/又は出力バイト若しくは他の場所)を示すことがある。したがって、展開器114は、メタデータ112を使用して、圧縮データ106の辞書部分を並列に(たとえば、GPUのスレッドごとに1つのセグメント)展開又は復号することがある。辞書は(実施例では、ハフマン符号化を使用することに加えて)、LZアルゴリズムに従って圧縮されることがあり、その結果、圧縮データ106の辞書部分の展開は、コピー又は補填を含むことがある。したがって、辞書の並列展開が実行される場合、展開器114による第1のパスは、実際のビット値(たとえば、辞書内の各シンボルのビット長に対応する)を復号し、コピー又は補填されることになるビット値のためにプレースホルダを残すことがある。第2のパス中、展開器114は、(たとえば、本明細書において
図2Cを参照してより詳細に説明されるように)辞書のシンボルに対応する欠落したビット値を埋めるために、補填演算又はコピー演算を実行することがある。
【0022】
展開器114は、各ブロックのための圧縮データ106の内容部分に対応するメタデータ112を使用して、圧縮データ106の各セグメントの第1の入力場所(たとえば、ビット、ニブル、バイトなど)、展開後の圧縮データ106の各セグメントについての出力ストリーム内の出力場所、及び/又は圧縮データ106の各セグメントについてのコピー索引若しくはコピーの数を識別することがある。接頭部和演算は、各セグメントについての入力場所、出力場所、及びコピーの数を決定するために、展開器114によって実行されてよい。しかしながら、他の実施例では、本明細書において説明されるように、接頭部和形式を使用して、入力場所、出力場所、及びコピー索引を識別する代わりに、メタデータ112は、各セグメント内のビットの数、各セグメント内の出力バイトの数、及び各セグメント内のコピーの数を示すことがある。展開器114は、圧縮データ106の識別されたセグメントを並列に展開し得る。たとえば、メタデータ112からの識別子を使用して、展開器114は、チャンク又はセグメントに対応する圧縮データ106の部分をGPUの異なるスレッドに割り当てることがある。展開器114による圧縮データ106の各セグメントを通る第1のパスは、圧縮データ106からの展開されたリテラル(たとえば、実際のシンボル)を出力ストリームに(たとえば、メタデータによって識別された場所のところに)直接的に出力するため、及びコピーのための出力ストリーム内の空間を維持しながら、後での処理のために(たとえば、展開器114によって第2のパスにおいて)コピー情報又はマッチング情報を別個のキューに記憶するために、実行されることがある。出力ストリーム内に維持される空間の量は、メタデータ112を使用して決定されてよい。これらのキューに入れられたコピー又はマッチングは、本明細書では、延期されたコピーと呼ばれることがある。
【0023】
延期されたコピーがキューに入れられ、出力ストリーム内のプレースホルダが作成された後、展開器114は、延期されたコピーを通る第2のパスを実行することがある。コピーのうちの1つ又は複数は、各コピーが、コピーしても安全であると決定されたかどうかに応じて並列に実行される(たとえば、コピーされることになるデータがすでに展開されている場合、又はコピーされることになるデータが、まだコピーされていない別のコピーに依拠しない場合、コピーは、安全であると決定され得る)。たとえば、展開器114は、並列に実施され得る追加コピーを見つけるためにコピーのシーケンスを探すことがある。コピーを並列に処理する能力は、コピーに対応するメタデータ112及び/又は情報を使用して決定され得る。たとえば、出力ストリーム内のコピーの出力位置(メタデータ112から決定される)、コピーが行われることになるソース位置(コピーに対応する符号化された距離情報から決定される)、及び/又はコピーの長さ(コピーに対応する符号化された長さ情報から決定される)は、コピーが1つ又は複数の他のコピーとの並列処理にとって安全であるかどうかを決定するために使用されることがある。コピーは、ソースが現在の出力カーソルの前に終わり、コピーがそれ自体と重複しないとき、別のコピーと並列に実行しても安全であってよい。1つの実例として、実験に基づいて、同時にコピーされるバイトの数は、3~4から90~100又はそれよりも多くまで増加されることがある。このプロセスは、スレッドをまたがる並行処理のためと単一スレッド内でのメモリ・システム並行処理の両方のためのかなりの追加機会を与える。したがって、コピーのうちの1つ又は複数(たとえば、イントラブロックコピー又はブロック間コピー)は、1つ又は複数の他のコピーと並列に実行され得る。並列実行にとって安全なコピー及び安全でないコピーの例は、
図2E~
図2Fを参照して説明される。さらに、いくつかの実施例では、単一コピー内のシンボルが並列に実行されることがある。たとえば、コピーが1よりも大きい長さを有する場合、コピー内の個々のシンボルは、GPUの2つ以上のスレッド(又はコプロセッサ)を使用して出力ストリーム(のバイト)に並列にコピーされることがある。
【0024】
その結果、展開器114は、リテラルを出力する圧縮データ106の第1のパスと、コピーからシンボルを出力するコピーの第2のパスを実行することによって、シンボルの各々を出力ストリームに出力し得る。結果は、当初圧縮器104によって圧縮されたデータ102に対応する出力ストリームであってよい。可逆的圧縮技法が使用される実例では、データ102の出力は、データ102の入力圧縮器104と同一又は実質的に同一であってよい。
【0025】
いくつかの実施例では、共有メモリ・テーブルを用いた二分木探索アルゴリズムは、CPUベース復号器又は展開器に見られる典型的な高速経路/低速経路実装形態とともに発生するであろうスレッド間の相違(divergence)を回避するために、圧縮データ106に対して実行されることがある。たとえば、CPUに対する従来の実装形態では、データの大規模アレイは、一度に何らかの数のビットを復号するために使用されることがある。DEFLATE形式に関して、各シンボルは、1~15ビット長の範囲に及ぶことがあるので、データを復号するとき、各シンボルがどれくらい長いかに関して、展開器にとって即座に明らかでないことがある。その結果、CPU展開器は、シンボルに対応するビットの実際の数が決定されるまで、1ビットを利用して、それが長さ1のシンボルかどうかを確かめ、次いで、別のビットを利用して、それが長さ2のシンボルであるかどうかを確かめ、以下同様である。このタスクは、時間がかかることがあり、CPU実装形態の場合ですら、展開プロセスを減速させることがある。その結果、いくつかの手法は、15ビットなどの複数のビットを一度に解析する手法を実装している。そのような実施例では、15ビットが、圧縮データ・ストリームからプルされることがあり、ルック・アップ・テーブルは、どのシンボルにデータが対応するかを決定するために使用されてよい。しかしながら、このプロセスは、スライド窓がわずか32kbであることがあるが、システムは、シンボルが2ビットのみに圧縮される場合でも解析のために15ビットを記憶しなければならないので、無駄が多い。その結果、いくつかの実装形態では、8ビットが抽出される場合にシンボル・ルックアップが8ビットに対して実施される高速経路/低速経路方法が使用されることがあり、シンボルが8ビットよりも短いとき、高速経路が使用され、シンボルが8ビットよりも大きいとき、低速経路が、どのシンボルがデータによって表されるかを決定するために使用される。このプロセスも、時間がかかり、圧縮データ106を展開するためのシステムのランタイムを減少させる。
【0026】
GPU上で、高速パス/低速経路方法を使用する代わりに何らかの数のスレッド(たとえば、32)が何らかの数のシンボル(たとえば、32)に対して実行されている場合、いくつかは高速経路にヒットし、いくつかは高速経路にヒットし、ワープ内で(たとえば、32のセグメントがある場合)一緒に混合され、これは非効率的である。この問題に対処するために、二分探索アルゴリズムが、効率を改善するために使用されてよい。たとえば、二分探索は、どのシンボルにテーブルが属するかを決定するために、15エントリ長であるテーブルなどの小さいテーブルに対して実行されることがある。アレイのサイズ減少により、アレイは、チップ上の共有メモリに記憶されることがあり、これは、GPU上での高速ルックアップをもたらし得る。さらに、二分探索アルゴリズムを使用することによって、共有メモリ内のアレイの異なる部分を調べる場合でもすべてのスレッドが同じコードを実行することが可能になり得る。その結果、二分探索は、シンボルが8ビットよりも長いか8ビットよりも短いかどうかを確かめるために長さ8のシンボルを調べ得るので、メモリ・トラフィックが減少されることがある。さらに、二分木の最上位レベルのうちの1つ又は複数(たとえば、2つ)が、ルックアップごとにアクセスされる共有メモリの数を(たとえば、5から3に)減少させるために、データ・レジスタ内にキャッシュされることがある。その結果、4つのアクセスの第1のアクセスは、毎回メモリからロードするのではなく、レジスタがGPU上で有効(live)を保ち得るように、常に同じものであってよい。次は、4又は12であってよく、別のレベルのメモリ・アクセスを有する代わりに、システムは、シンボル4レジスタ又はシンボル12レジスタを調べているかどうかを選ぶことがあり、これによって、アクセスの総数が2以上減少され得る(たとえば、通常、二分探索が長さを得るには4であり、実際のシンボルを得るにはもう1つであり、そのため、このプロセスは、4プラス1から2プラス1に減少する)。したがって、エントリをロードし、次いで比較するためにシンボルをシフトする代わりに、シンボル自体があらかじめシフトされる。
【0027】
さらに、いくつかの実施例では、圧縮データ106の入力ストリームは、スウィズル(swizzle)又はインターリーブされることがある。たとえば、圧縮データ106のブロックは、圧縮データ解析器108によって何らかの数のセグメント(たとえば、32)に分割され得るので、各スレッドは、ストリームの遠隔パートから読み出され得る。その結果、入力ストリームは、データ読み出し局所性を改善するために前処理(pre-process)内で(たとえば、メタデータ112を使用して)セグメント境界においてインターリーブされることがある。たとえば、データ102が、特定の言語の単語のすべてを含む実際の辞書に対応する場合、1つのスレッドは、「A」という文字で始まる単語から読み出されることがあり、別のスレッドは「D」という文字で始まる単語から読み出されることがあり、別のスレッドは「P」という文字で始まる単語から読み出されることがあり、以下同様である。この問題をなくすために、データは、すべてのスレッドが隣接メモリから読み出され得るように、再形式化されることがある。たとえば、圧縮データ106は、各スレッドが類似のキャッシュ・ラインから読み出され得るように、索引からの情報を使用してインターリーブされることがある。したがって、スレッドがデータを処理しているとき、データが異なる場合であっても、スレッドはデータにおける何らかの類似性を有し得るように、データは一緒にシャッフルされてよい。トランプの実例では、データのスウィズリング又はインターリービングによって、各スレッドが、異なる組み札の場合でも同じ数字又は字をもつカードを処理することが可能になり得る。
【0028】
セグメントがGPUのワープのスレッドを使用して処理される場合などのさらなる実例として、ワープ同期データ並列ループは、辞書をロード及び処理するために実行され得る。たとえば、索引及びデータ並列アルゴリズムを使用して、システムは、並列に辞書エントリに指示することがある。連続して処理するとき、システムは、どれくらい多くのシンボルが長さ2、長さ3などであるかを調べることがある。しかしながら、これらの計算を逐次的に実施する代わりに、システムは、スレッドを計算する又は各シンボルに割り当て、次いでシンボルが特定の長さであるかどうかを報告し、次いで、ワープの総数へのワープ減少を実行するために、データ・アルゴリズムを、並列に、実行し得る。たとえば、286のシンボルが解析される(たとえば、0~255バイト、256はブロックの終了、257~286は異なる長さに対するもの)場合、286のシンボルの各々は、並列に解析され得る。
【0029】
次に
図2A~
図2Fを参照すると、説明される実例の各々は、DEFLATE圧縮形式に従って圧縮されたデータ及びそれに対応するメタデータ112に対応し得る。しかしながら、これは、例示の目的にすぎず、本明細書において説明されるように、本開示の技法は、限定するものではないが本明細書において説明されるデータ圧縮形式などの任意のタイプのデータ圧縮形式のために実装されてもよいし、これに適用されてもよい。
【0030】
図2Aは、本開示のいくつかの実施例による、圧縮データ・ストリームの並列展開のためのメタデータ112に対応する例示的なテーブル200Aを示す。たとえば、データ102(又は、そのブロックなどの、その一部分)は、「Mississippi」という単語に対応し得る。圧縮器104は、「Miss<コピー長4、距離3>ppi」として表されるデータ102の圧縮バージョン(たとえば、圧縮データ106)を生成するために、DEFLATE圧縮アルゴリズムに従ってデータ102を圧縮し得る。さらに、圧縮データ106は、ハフマン符号化されることがあり、その結果、さまざまなシンボルは、圧縮器104による何らかの優先順位又は頻度評価に対応するいくつかのビットによって表され得る。非限定的な例として、「M」は3ビットによって表れてよく、コピーは、4ビット(たとえば、長さのための3ビット及び距離のための1ビット)によって表されてよく、「i」、「s」、及び「p」は各々、圧縮データ106内の2ビットによって表され得る。この実例の場合、圧縮データ106のブロックが4つのセグメントに分解される(たとえば、4方向索引)と仮定すると、圧縮データ解析器108は、「Mi」を含むように第1のセグメントを、「ss」を含むように第2のセグメントを、コピー及び「p」を含むように第3のセグメント、「p」を含むように第4のセグメントを決定するために、圧縮データ106を解析し得る。たとえば、11の字又はシンボルである「Mississippi」は、8つのシンボル(たとえば、7つのリテラルと1つのコピー)に分解されてよく、セグメントは、実質的に等しいサイズであるように生成されてよい。しかしながら、第4のセグメントは、シンボルが奇数であることにより、1つのシンボルのみを含むことがある。次いで、圧縮データ解析器108は、各セグメントについての出力(又は出力バイト)の数、各セグメントについての入力(又は入力ビット)の数、及び/又は各セグメント内のコピーの数を決定し得る。いくつかの実例では、メタデータ生成器110は、この情報を直接的に使用して、メタデータ112を生成することがある。しかしながら、他の実例では、テーブル200Bに従ってメタデータ112を生成するために、接頭部和演算が、このデータに対して実行されることがある。
【0031】
図2Bを参照すると、
図2Bは、本開示のいくつかの実施例による、圧縮データ・ストリームの並列展開のための接頭部和形式のメタデータ112に対応する例示的なテーブル200Bを示す。たとえば、いくつかの出力の代わりに、各セグメントは、代わりに、どこでセグメントからの展開されたシンボルからの出力が始まるべきかを展開器114に示すために、出力ストリーム内の出力位置によって識別されることがある。いくつかの入力の代わりに、圧縮データ・ストリーム内の入力位置は、セグメントが並列処理のためにGPUの一意のスレッドに割り当てられ得るように、セグメントをどこで展開し始めるべきかを展開器114に示すために識別されることがある。さらに、各セグメント内のいくつかのコピーの代わりに、ブロックの以前のセグメントからのコピーの現在高は、どのコピーがキュー内の各延期されたコピーに対応するかを展開器に示すために、メタデータ112において識別されることがある。最終的に、この例では、メタデータ112の接頭部和形式は、圧縮データの現在のブロックの内容部分(又はデータ部分)内に、11バイトの出力、19ビットの入力、及び1つのコピーがあることを展開器114に示すことがあり、各セグメントが圧縮データ106内のどこで始まるか、各セグメントをどこに出力するべきか、及び/又はコピー索引を示すことがある。
【0032】
図2Cを参照すると、
図2Cは、本開示のいくつかの実施例による辞書及び辞書と関連づけられたメタデータ112に対応する例示的なテーブル200Cを示す。たとえば、本明細書において
図2A及び
図2Bを参照して説明されるように(たとえば、ハフマン符号化を使用して決定されるように)同じ数のビットをシンボルに使用して、辞書は、これらの値を示すように生成され得る。この実例では、辞書は、英語アルファベットの小文字及び大文字に対応し得る。しかしながら、これは限定することを意図したものではなく、辞書は、任意の言語からの字、数字、シンボル(たとえば、!、$、*、^、及び/又は他のシンボル・タイプ)などを含む任意のタイプのシンボルに対応してよい。したがって、圧縮データ106は、M、i、s、及びpにのみ対応し得るので、圧縮データ106の辞書部分は、これらの値を示すように圧縮されてよい。そのような実例では、データ文字列202は、辞書に対応するデータ102を表してよく、52個の字の各々(たとえば、A~-Z及びa~z)は、いくつかのビットに対応する値によって表される。辞書をさらに圧縮するために、圧縮器104は、データ文字列202からの繰り返される値に対応する補填シンボル又はコピー・シンボルを生成し得る。この場合、繰り返される値は0であり、そのため、辞書に対応する圧縮データ106は、「<fill 12x>3<fill 21x>2<fill 6x>2002<fill 7x>」によって表されてよい。圧縮データ解析器108は、辞書に対応する圧縮データ106を解析し、セグメント中断を決定し得る(たとえば、4つのセグメントが使用される例では、圧縮データ106は、4つのセグメントに分割され得る)。4つのセグメントの分割は、破線によって示される。次いで、メタデータ生成器110は、圧縮データ106のブロックの辞書部分に対応するメタデータ112を生成するために、たとえば、開始入力場所及びシンボル数又は辞書内のあらゆるセグメントの索引を示すために、セグメント情報を解析し得る。
【0033】
ここで
図2Dを参照すると、
図2Dは、本開示のいくつかの実施例による、圧縮データ・ストリームのブロックの並列展開のためのメタデータ112に対応する例示的なテーブル200Dを示す。たとえば、データ102が「MississippiMississippiMiss」であったと仮定すると、圧縮器104は、データ102を圧縮のための2つのブロックに分離し得る。「Mississippi;」に対応する第1のブロックと、「MississippiMiss」に対応する第2のブロックである。したがって、圧縮データ106内の異なるブロックの場所、及びそれに対応する辞書、を識別するために、圧縮データ解析器108は、圧縮データ106の各ブロックの初期入力場所(たとえば、第1の入力ビット、ニブル、バイトなど)及び/又は出力ストリーム内の各ブロックの初期出力場所(たとえば、第1のビット、ニブル、バイトなど)を決定するために圧縮データ106を解析し得る。その結果、圧縮データ106のストリームに対応するメタデータ112は、圧縮データ106の各ブロックのためのいくつかの入力(たとえば、ビット、ニブル、バイトなど)及びいくつかの出力(たとえば、ビット、ニブル、バイトなど)、各ブロック内の各セグメントについてのいくつかの入力(たとえば、ビット、ニブル、バイトなど)及びシンボル数、並びに/又は各ブロック内の各セグメントについてのいくつかの入力(たとえば、ビット、ニブル、バイトなど)、いくつかの出力(たとえば、ビット、ニブル、バイトなど)、及びいくつかのコピーを示し得る。接頭部和演算が実行される場合、メタデータ112は、代わりに、圧縮データの各ブロックの初期入力場所及び初期出力場所、各ブロックのための辞書部分の各セグメントについての初期入力場所及びシンボル索引、並びに/又は各ブロックのための内容部分(又はデータ部分)の各セグメントについての初期入力場所、初期出力場所、及びコピー索引を含んでよい。さらなる実施例では、ブロック、辞書、又はデータのうちの1つ又は複数のためのメタデータは接頭部和形式であるが、ブロック、辞書、又はデータのうちの1つ又は複数は接頭部和形式でないように、2つの異なるメタデータ形式の何らかの組み合わせが使用されてよい。
【0034】
次いで、メタデータ112は、圧縮データ106を展開するために展開器114によって使用されてよい。たとえば、圧縮データ106の各ブロックは、圧縮データ106の2つ以上のブロック-たとえば、ブロックA及びブロックB-が並列に展開され得るように、メタデータ112を使用して識別されてよい。各ブロックに対して、メタデータ112は、辞書が並列に展開され得るように、たとえば、スレッド又はコプロセッサごとに1つのセグメントなど、辞書のセグメントを決定するために使用されてよい。次いで、辞書は、圧縮ストリームの内容部分を展開するために使用され得る。たとえば、メタデータ112は、圧縮データ106の内容部分のセグメントを示すことがあり、展開器114は、辞書を使用して、圧縮データ106からリテラルを復号し、そのリテラルを出力ストリームに出力することがある。展開器114はさらに、メタデータ112及び圧縮データ106内の符号化されたコピー情報を使用して、コピーのための出力ストリームの部分を予約し、キュー又はデータ構造に各コピーについての情報(たとえば、ソース場所、距離、長さなど)を格納することがある。本明細書において説明されるように、圧縮データ106の内容部分のセグメントは、並列に展開され得る。展開後、展開器114は、出力ストリーム内の予約されたプレースホルダに、対応するコピーされたシンボルを格納するために、キュー内の延期されたコピーに対してコピー演算を実行することがある。1つの実例として、
図2Aを参照すると、1のソース位置、4のコピー長、及び3の距離によって示される「issi」のコピーが、「i」を位置4に、「s」を位置5に、「s」を位置6に、及び「i」を位置6にコピーするために使用されることがある。位置6における「i」は、コピーが始まるまで存在しなかった位置4における「i」からコピーされるので、位置6における「i」は、重複コピーと呼ばれることがある。本明細書において説明されるように、個々のコピー演算は、いくつかの実施例では、「issi」コピーのうちの2つ以上がGPUの異なるスレッドを使用して並列に実行され得るように、並列に実行されてよい。
【0035】
さらに、いくつかの実施例では、コピーが安全であると決定されたとき、別個のコピーが並列に実行されることがある。たとえば、
図2Eを参照すると、
図2Eは、本開示のいくつかの実施例による、並列処理に適していない圧縮データ・ストリームのコピーに対応する例示的なテーブル400Eを示す。たとえば、圧縮データ106が「MississippiMississippi」に対応する場合、圧縮データ106は、2つのコピー(たとえば、テーブル200Eに示されるコピー#1及びコピー#2)を含んでよい。この実例では、展開器114は、第1のコピーを実行しようとするとき又はその実行中に、1つ又は複数の追加コピー、たとえば、第2のコピー、が並列に実行され得るかどうかを決定し得る。展開器114は、重複があるかどうかを決定するために、第2のコピーのソース位置及び第1のコピーの出力位置を調べてよい。この場合、第2のコピーは第1のコピーからの出力に依拠するので、第2のコピーは、第1のコピーと並列に実施するのに安全でないことがある。したがって、第1のコピーと第2のコピーは順次実行されてよい。
【0036】
別の実例として、
図2Fを参照すると、
図2Fは、本開示のいくつかの実施例による、並列処理に適した圧縮データ・ストリームのコピーに対応する例示的なテーブル400Fを示す。たとえば、圧縮データ106が「MississippiMiss」に対応する場合、圧縮データ106は、2つのコピー(たとえば、テーブル200Fに示されるコピー#1及びコピー#2)を含んでよい。この実例では、展開器114は、第1のコピーを実行しようとするとき又はその実行中に、1つ又は複数の追加コピー-たとえば、第2のコピー-が並列に実行され得るかどうかを決定し得る。展開器114は、重複があるかどうかを決定するために、第2のコピーのソース位置及び第1のコピーの出力位置を調べてよい。この場合、第2のコピーは第1のコピーからの出力に依拠しないので(たとえば、第2のコピーは、出力バッファに格納されることになる第1のコピーからの結果を必要とすることなく実行可能であるので)、第2のコピーは、第1のコピーと並列に実施しても安全であり得る。したがって、第1のコピーと第2のコピーは、並列に実行され、それによって、順次4つのシンボル及び4つのシンボルの代わりに、8つのシンボルの出力を一度に提供し得る。
【0037】
次に
図3~
図4を参照すると、本明細書において説明される方法300及び400の各ブロックは、ハードウェア、ファームウェア、及び/又はソフトウェアの任意の組み合わせを使用して実施されてよいコンピューティング・プロセスを含む。たとえば、さまざまな機能は、メモリに記憶された命令をプロセッサが実行することによって行われてよい。方法300及び400はまた、コンピュータ記憶媒体上に記憶されたコンピュータ使用可能命令として具現化されてもよい。方法300及び400は、いくつかの例を挙げると、スタンドアロン・アプリケーションによって提供されてもよいし、サービス又はホステッド・サービス(スタンドアロン又は別のホストテッド・サービスと組み合わせて)によって提供されてもよいし、別の製品へのプラグインによって提供されてもよい。さらに、方法300及び400は、例として、
図1のプロセス100を参照して説明される。しかしながら、これらの方法300及び400は、追加的又は代替的に、限定するものではないが、本明細書において説明されるプロセス及びシステムを含む、任意の1つのシステムによって任意の1つのプロセス内で実行されてもよいし、プロセス及びシステムの任意の組み合わせによって実行されてもよい。
【0038】
図3を参照すると、
図3は、本開示のいくつかの実施例による、圧縮データ・ストリームの並列展開のための圧縮データ・ストリームのためのメタデータを生成するための方法300に対応する流れ図を示す。方法300は、ブロックB302において、圧縮データを解析することを含む。たとえば、圧縮データ解析器108は、圧縮データ106を解析してよい。
【0039】
方法300は、ブロックB304において、圧縮データの複数のセグメント間の区切りを決定することを含む。たとえば、圧縮データ解析器108は、圧縮データ106のセグメント間の区切りを決定してよい。
【0040】
方法300は、ブロックB306において、区切りに一部は基づいて、複数のセグメントのうちの少なくとも2つのセグメントに対して、少なくとも2つのデータ・セグメントの各データ・セグメントに対応する、圧縮データ内の初期入力場所及び出力データ内の初期出力場所を示すメタデータを生成することを含む。たとえば、メタデータ生成器110は、圧縮データ106の各ブロックの内容部分のセグメントのうちのいくつか又はすべてのための初期入力場所、初期出力場所、及び/又はコピー索引を識別するために、セグメントに対応するメタデータ112を生成してよい。
【0041】
方法300は、ブロックB308において、圧縮データ及びメタデータを展開器に送ることを含む。たとえば、圧縮データ106及びメタデータ112は、少なくとも部分的に並列に圧縮データ106を展開するために、展開器114によって使用されてよい。
【0042】
次に
図4を参照すると、
図4は、本開示のいくつかの実施例による、圧縮データ・ストリームを並列に展開するための方法400に対応する流れ図を示す。方法400は、ブロックB402において、圧縮データとそれに対応するメタデータを受け取ることを含む。たとえば、展開器114は、圧縮データ106及びメタデータ112を受け取ってよい。
【0043】
方法400は、ブロックB404において、メタデータに基づいて、圧縮データに対応する初期入力場所及び初期出力場所を決定することを含む。たとえば、メタデータ112は、圧縮データ106の各ブロックに対応する圧縮データ106内の初期入力場所及び出力データ・ストリーム内の初期出力場所を示してよい。
【0044】
方法400は、ブロックB406において、初期入力場所及び初期出力場所に基づいて、圧縮データの辞書の2つ以上の辞書セグメントについての入力辞書場所及びシンボル索引を決定することを含む。たとえば、メタデータ112は、圧縮データ106に対応する辞書のセグメントについての初期入力場所及びシンボル索引を示してよい。
【0045】
方法400は、ブロックB408において、入力辞書場所に基づいて少なくとも部分的に並列に辞書を展開することを含む。たとえば、メタデータ112は、辞書のセグメントを示してよく、この情報は、GPUのスレッドを使用して辞書の各セグメントを並列に処理するために展開器114によって使用されてよい。
【0046】
方法400は、ブロックB410において、初期入力場所及び初期出力場所に基づいて、圧縮データの複数のセグメントのうちの少なくとも2つのセグメントについての入力セグメント場所、出力セグメント場所、及びコピー索引値を決定することを含む。たとえば、展開器114は、メタデータ112を使用して、圧縮データ106内の初期入力場所、出力ストリーム内の初期出力場所、及びブロック又はデータ部分内の各セグメントの圧縮データ106のためのコピー索引(たとえば、現在のセグメントの前のセグメント内のコピーの数)を決定してよい。
【0047】
方法400は、ブロックB412において、展開された出力を生成するために入力セグメント場所及び出力セグメント場所に従って少なくとも2つのセグメントを並列に展開することを含む。たとえば、展開器114は、メタデータ112及び辞書を使用して、圧縮データ106からデータ102を生成することがある。したがって、データ102が回復されると、データ102は、1つ又は複数の演算を実施するために受け取り側で使用され得る。たとえば、データ102が圧縮され、並列処理のためにCPUからGPUに渡された場合、データは、次いで、CPUに戻されることがある。データ102がテキスト、メッセージ、又は電子メールに対応する場合、データは、デバイス-たとえば、ユーザ・デバイス又はクライアント・デバイス-上に表示され得る。データ102がビデオ、オーディオ、画像などに対応する場合、データは、ディスプレイ、スピーカ、ヘッドセット、イヤホンなどを使用して出力され得る。データ102がウェブ・サイトに対応する場合、そのウェブ・サイトは、受け取りデバイス-たとえば、ユーザ・デバイス又はクライアント・デバイス-上のブラウザ内に表示され得る。したがって、展開データは、さまざまな手段のいずれかにおいて使用されてよく、並列展開により、従来の手法と比較して少ないメモリ・リソースを使用しながら、より早く利用可能になり得る。
【0048】
例示的なコンピューティング・デバイス
図5は、本開示のいくつかの実施例を実装することにおける使用に適した例示的なコンピューティング・デバイス500のブロック図である。コンピューティング・デバイス500は、以下のデバイスすなわち、メモリ504、1つ又は複数の中央処理装置(CPU)506、1つ又は複数のグラフィックス処理ユニット(GPU)508、通信インターフェース510、入出力(I/O)ポート512、入出力構成要素514、電源516、1つ又は複数のプレゼンテーション構成要素518(たとえば、ディスプレイ)、及び1つ又は複数の論理ユニット520を直接的又は間接的に結合する相互接続システム502を含んでよい。少なくとも1つの実施例では、コンピューティング・デバイス500は、1つ又は複数の仮想機械(VM:virtual machine)を備えてよく、及び/又はその構成要素のいずれも、仮想構成要素(たとえば、仮想ハードウェア構成要素)を備えてよい。非限定的な例として、GPU508のうちの1つ若しくは複数は1つ若しくは複数のvGPUを含んでよく、CPU506のうちの1つ若しくは複数は1つ若しくは複数のvCPUを含んでよく、及び/又は論理ユニット520のうちの1つ若しくは複数は1つ若しくは複数の仮想論理ユニットを含んでよい。したがって、コンピューティング・デバイス500は、個別の構成要素(たとえば、コンピューティング・デバイス500専用のフルGPU)を含んでもよいし、仮想構成要素(たとえば、コンピューティング・デバイス500に専用のGPUの一部分)を含んでもよいし、それらの組み合わせを含んでもよい。
【0049】
図5のさまざまなブロックは、相互接続システム502を介してラインと接続されると示されているが、これは、限定することを意図したものではなく、明快さのためにすぎない。たとえば、いくつかの実施例では、ディスプレイ・デバイスなどのプレゼンテーション構成要素518は、I/O構成要素514と考えられることがある(たとえば、ディスプレイがタッチ・スクリーンである場合)。別の例として、CPU506及び/又はGPU508は、メモリを含んでよい(たとえば、メモリ504は、GPU508、CPU506、及び/又は他の構成要素のメモリに加えて、記憶デバイスを表してよい)。言い換えれば、
図5のコンピューティング・デバイスは、例示的にすぎない。「ワークステーション」、「サーバ」、「ラップトップ」、「デスクトップ」、「タブレット」、「クライアント・デバイス」、「モバイル・デバイス」、「ハンドヘルド・デバイス」、「ゲーム・コンソール」、「電子制御ユニット(ECU)」、「仮想現実システム」、及び/又は他のデバイス若しくはシステム・タイプなどのカテゴリは、すべてが
図5のコンピューティング・デバイスの範囲内にあると企図されているので、それらの間に区別はなされない 。
【0050】
相互接続システム502は、1つ若しくは複数のリンク、又はアドレス・バス、データ・バス、制御バス、若しくはそれらの組み合わせなどの1つ若しくは複数のバスを表すことがある。相互接続システム502は、業界標準アーキテクチャ(ISA:industry standard architecture)バス、拡張業界標準アーキテクチャ(EISA:extended industry standard architecture)バス、ビデオ・エレクトロニクス・スタンダーズ・アソシエーション(VESA:video electronics standards association)バス、周辺構成要素相互接続(PCI:peripheral component interconnect)バス、周辺構成要素相互接続エクスプレス(PCIe:peripheral component interconnect express)バス、及び/又は別のタイプのバス若しくはリンクなどの1つ又は複数のバス又はリンク・タイプを含んでよい。いくつかの実施例では、構成要素間に直接的な接続がある。1つの実例として、CPU506は、メモリ504に直接的に接続されることがある。さらに、CPU506は、GPU508に直接的に接続されてよい。構成要素間に直接的な接続又はポイント・ツー・ポイント接続がある場合、相互接続システム502は、接続を行うPCIeリンクを含んでよい。これらの実例では、PCIバスは、コンピューティング・デバイス500に含まれる必要はない。
【0051】
メモリ504は、さまざまなコンピュータ可読媒体のいずれかを含んでよい。コンピュータ可読媒体は、コンピューティング・デバイス500によってアクセスされ得る任意の利用可能な媒体であってよい。コンピュータ可読媒体は、揮発性媒体と不揮発性媒体、及びリムーバブル・メディアとノンリムーバブル・メディアの両方を含んでよい。限定ではなく、例として、コンピュータ可読媒体は、コンピュータ記憶媒体及び通信媒体を含んでよい。
【0052】
コンピュータ記憶媒体は、コンピュータ可読命令、データ構造、プログラム・モジュール、及び/又は他のデータ・タイプなどの情報の記憶のための任意の方法又は技術において実装される揮発性媒体と不揮発性媒体及び/又はリムーバブル・メディアとノンリムーバブル・メディアの両方を含んでよい。たとえば、メモリ504は、コンピュータ可読命令を記憶してよい(たとえば、オペレーティング・システムなどの、プログラム及び/又はプログラム要素を表す。コンピュータ記憶媒体は、限定するものではないが、RAM、ROM、EEPROM、フラッシュ・メモリ若しくは他のメモリ技術、CD-ROM、ディジタル多用途ディスク(DVD:digital versatile disk)若しくは他の光ディスク記憶、磁気カセット、磁気テープ、磁気ディスク記憶若しくは他の磁気記憶デバイス、又は所望の情報を記憶するために使用されてよく、コンピューティング・デバイス500によってアクセスされ得る他の任意の媒体を含んでよい。本明細書で使用されるとき、コンピュータ記憶媒体は、信号自体は含まない。
【0053】
コンピュータ記憶媒体は、コンピュータ可読命令、データ構造、プログラム・モジュール、及び/又は搬送波若しくは他の移送機構などの変調されたデータ信号などの内の他のデータ・タイプを具現化し、任意の情報配信媒体を含んでよい。「変調されたデータ信号」という用語は、信号内の情報を符号化するように設定又は変更されたその特性のうちの1つ又は複数を有する信号を指すことがある。限定ではなく、例として、コンピュータ記憶媒体は、ワイヤード・ネットワーク又は直接ワイヤード接続などのワイヤード・メディア、並びに音響、RF、赤外線、及び他のワイヤレス・メディアなどのワイヤレス・メディアを含んでよい。上記のいずれかの組み合わせも、コンピュータ可読媒体の範囲内に含まれるべきである。
【0054】
CPU506は、本明細書において説明される方法及び/又はプロセスのうちの1つ又は複数を実施するようにコンピューティング・デバイス500の1つ又は複数の構成要素を制御するためにコンピュータ可読命令のうちの少なくともいくつかを実行するように構成されてよい。CPU506は各々、多数のソフトウェア・スレッドを同時に扱うことが可能である1つ又は複数のコア(たとえば、1、2、4、8、28、72個など)を含んでよい。CPU506は、任意のタイプのプロセッサを含んでよく、実装されるコンピューティング・デバイス500のタイプに応じて、異なるタイプのプロセッサ(たとえば、モバイル・デバイスに対してはより少ないコアをもつプロセッサと、サーバに対してはより多いコアをもつプロセッサ)を含んでよい。たとえば、コンピューティング・デバイス500のタイプに応じて、プロセッサは、縮小命令セット・コンピュータ(RISC:Reduced Instruction Set Computing)を使用して実装された進化したRISCマシン(ARM:Advanced RISC Machines)プロセッサであってもよいし、複合命令セット・コンピュータ(CISC:Complex Instruction Set Computing)を使用して実装されたx86プロセッサであってもよい。コンピューティング・デバイス500は、1つ又は複数のマイクロプロセッサ若しくは数値計算コプロセッサなどの補助コプロセッサに加えて、1つ又は複数のCPU506を含んでよい。
【0055】
CPU506に加えて、又はこれと代替的に、GPU508は、本明細書において説明される方法及び/又はプロセスのうちの1つ又は複数を実施するようにコンピューティング・デバイス500の1つ又は複数の構成要素を制御するためにコンピュータ可読命令のうちの少なくともいくつかを実行するように構成されてよい。GPU508のうちの1つ又は複数は、内蔵GPUであってよい(たとえば、CPU506のうちの1つ若しくは複数をもつ、及び/又はGPU508のうちの1つ若しくは複数は、ディスクリートGPUであってよい。実施例では、GPU508のうちの1つ又は複数は、CPU506のうちの1つ又は複数のコプロセッサであってよい。GPU508は、グラフィックス(たとえば、3Dグラフィックス)をレンダリングする又は汎用算出を実施するためにコンピューティング・デバイス500によって使用されてよい。たとえば、GPU508は、GPU上での汎用コンピューティング(GPGPU:General-Purpose computing on GPU)のために使用されることがある。GPU508は、数百又は数千のソフトウェア・スレッドを同時に扱うことが可能である数百又は数千のコアを含んでよい。GPU508は、レンダリング・コマンド(たとえば、ホスト・インターフェースを介して受け取られたCPU506からのレンダリング・コマンド)に応答して画像を出力するためにピクセル・データを生成し得る。GPU508は、ピクセル・データ又はGPGPUデータなどの他の任意の適切なデータを記憶するための、表示メモリなどのグラフィックス・メモリを含んでよい。表示メモリは、メモリ504の一部として含まれてよい。GPU508は、並列に(たとえば、リンクを介して)動作する2つ以上のGPUを含んでよい。リンクは、(たとえば、NVLINKを使用して)GPUを直接的に接続してもよいし、スイッチを通じて(たとえば、NVSwitchを使用して)GPUを接続してもよい。互いに結合されたとき、各GPU508は、出力の異なる部分のため又は異なる出力のためにピクセル・データ又はGPGPUデータを生成してよい(たとえば、第1の画像のための第1のGPU及び第2の画像のための第2のGPU)。各GPUは、それ自体のメモリを含んでもよいし、メモリを他のGPUと共有してもよい。
【0056】
CPU506及び/又はGPU508に加えて、又はこれらと代替的に、論理ユニット520は、本明細書において説明される方法及び/又はプロセスのうちの1つ又は複数を実施するようにコンピューティング・デバイス500の1つ又は複数の構成要素を制御するためにコンピュータ可読命令のうちの少なくともいくつかを実行するように構成されてよい。実施例では、CPU506、GPU508、及び/又は論理ユニット520は、方法、プロセス、及び/又はその部分の任意の組み合わせを別々に実施してもよいし、共同で実施してよい。論理ユニット520のうちの1つ若しくは複数は、CPU506及び/若しくはGPU508のうちの1つ又は複数の一部であってもよいし、及び/若しくはそれらに内蔵されてもよく、並びに/又は論理ユニット520のうちの1つ若しくは複数は、別個の構成要素であってもよいし、CPU506及び/若しくはGPU508の外部にあってもよい。実施例では、論理ユニット520のうちの1つ又は複数は、CPU506のうちの1つ若しくは複数及び/又はGPU508のうちの1つ又は複数のコプロセッサであってよい。
【0057】
論理ユニット520の例としては、テンソル・コア(TC:Tensor Core)、テンソル・プロセッシング・ユニット(TPU:Tensor Processing Unit)、ピクセル・ビジュアル・コア(PVC:Pixel Visual Core)、ビジョン・プロセッシングユニット(VPU:Vision Processing Unit)、グラフィックス・プロセッシング・クラスタ(GPC:Graphics Processing Cluster)、テクスチャ・プロセッシング・クラスタ(TPC:Texture Processing Cluster)、ストリーミング・マルチプロセッサ(SM:Streaming Multiprocessor)、ツリー・トラバーサル・ユニット(TTU:Tree Traversal Unit)、人工知能アクセラレータ(AIA:Artificial Intelligence Accelerator)、ディープ・ラーニング・アクセラレータ(DLA:Deep Learning Accelerator)、算術論理ユニット(ALU:Arithmetic-Logic Unit)、特定用途向け集積回路(ASIC:Application-Specific Integrated Circuit)、浮動小数点ユニット(FPU:Floating Point Unit)、入出力(I/O)要素、周辺構成要素相互接続(PCI)要素、又は周辺構成要素相互接続エクスプレス(PCIe)要素などの、1つ又は複数の処理コア及び/又はその構成要素がある。
【0058】
通信インターフェース510は、ワイヤード通信及び/又はワイヤレス通信を含む、コンピューティング・デバイス500が電子通信ネットワークを介して他のコンピューティング・デバイスと通信することを可能にする、1つ又は複数の受信器、送信器、及び/又はトランシーバを含んでよい。通信インターフェース510は、ワイヤレス・ネットワーク(たとえば、Wi-Fi、Z-Wave、ブルートゥース(登録商標)、ブルートゥース(登録商標)LE、ZigBeeなど)、ワイヤード・ネットワーク(たとえば、イーサネット(登録商標)又はInfiniBand上での通信)、低電力ワイド・エリア・ネットワーク(たとえば、LoRaWAN、SigFoxなど)、及び/又はインターネットなどの、いくつかの異なるネットワークのいずれかの上での通信を可能にする構成要素及び機能を含んでよい。
【0059】
I/Oポート512は、そのうちのいくつかはコンピューティング・デバイス500に組み込まれ(たとえば、これに内蔵され)得る、I/O構成要素514、プレゼンテーション構成要素518、及び/又は他の構成要素を含む他のデバイスに、コンピューティング・デバイス500が論理的に結合されることを可能にし得る。例示的なI/O構成要素514としては、マイクロホン、マウス、キーボード、ジョイスティック、ゲーム・パッド、ゲーム・コントローラ、衛星放送受信用パラボラアンテナ、スキャナ、プリンタ、ワイヤレスデバイスなどがある。I/O構成要素514は、エア・ジェスチャ、声、又はユーザによって生成された他の生理的入力を処理するナチュラル・ユーザ・インターフェース(NUI:natural user interface)を提供し得る。いくつかの例では、入力は、さらなる処理のために、適切なネットワーク要素に送られてよい。NUIは、音声認識、スタイラス認識、顔認識、バイオメトリック認識、画面上と画面に隣接しての両方でのジェスチャ認識、エア・ジェスチャ、頭部及び視線の追跡、並びにコンピューティング・デバイス500のディスプレイと関連づけられたタッチ認識(以下でより詳細に説明される)の任意の組み合わせを実装してよい。コンピューティング・デバイス500は、ジェスチャ検出及び認識のために、ステレオ・カメラ・システム、赤外線カメラ・システム、RGBカメラ・システム、タッチ・スクリーン技術、及びこれらの組み合わせなどの深度カメラを含んでよい。追加的に、コンピューティング・デバイス500は、動きの検出を可能にする加速度計又はジャイロスコープを(たとえば、慣性測定ユニット(IMU:inertia measurement unit)の一部として)含んでよい。いくつかの実例では、加速度計又はジャイロスコープの出力は、没入型の拡張現実又は仮想現実をレンダリングするために、コンピューティング・デバイス500によって使用されてよい。
【0060】
電源516は、ハード・ワイヤード電源、バッテリ電源、又はそれらの組み合わせを含んでよい。電源516は、コンピューティング・デバイス500の構成要素が動作することを可能にするために、電力をコンピューティング・デバイス500に提供し得る。
【0061】
プレゼンテーション構成要素518は、ディスプレイ(たとえば、モニタ、タッチ・スクリーン、テレビ画面、ヘッド・アップ・ディスプレイ(HUD:heads-up-display)、他のディスプレイ・タイプ、又はそれらの組み合わせ)、スピーカ、及び/又は他のプレゼンテーション構成要素を含んでよい。プレゼンテーション構成要素518は、他の構成要素(たとえば、GPU508、CPU506など)からデータを受け取り、そのデータを(たとえば、画像、ビデオ、音などとして)出力してよい。
【0062】
例示的なデータ・センタ
【0063】
図6は、本開示の少なくとも1つの実施例において使用され得る例示的なデータ・センタ600を示す。データ・センタ600は、データ・センタ・インフラストラクチャ層610、フレームワーク層620、ソフトウェア層630、及び/又はアプリケーション層640を含んでよい。
【0064】
図6に示されるように、データ・センタ・インフラストラクチャ層610は、リソース・オーケストレータ612と、グループ化されたコンピューティング・リソース614と、ノード・コンピューティング・リソース(「ノードC.R」)616(1)~616(N)とを含んでよく、ここで、「N」は任意の正の整数を表す。少なくとも1つの実施例では、ノードC.R.616(1)~616(N)は、限定するものではないが、任意の数の中央処理ユニット(「CPU」)若しくは他のプロセッサ(アクセラレータ、フィールド・プログラマブル・ゲート・アレイ(FPGA:field programmable gate array)、グラフィック・プロセッサ、又はグラフィックス処理ユニット(GPU)などを含む)、メモリ・デバイス(たとえば、ダイナミック読み出し専用メモリ)、記憶デバイス(たとえば、ソリッド・ステート・ドライブ又はディスク・ドライブ)、ネットワーク入出力(「NW I/O:network input/output」)デバイス、ネットワーク・スイッチ、仮想機械(「VM」)、電力モジュール、及び/又は冷却モジュールなどを含んでよい。いくつかの実施例では、ノードC.R.616(1)~616(N)からの1つ又は複数のノードC.R.は、上述のコンピューティング・リソースのうちの1つ又は複数を有するサーバに対応することがある。さらに、いくつかの実施例では、ノードC.R.616(1)~6161(N)は、vGPU、vCPUなどの、1つ又は複数の仮想構成要素を含んでよい、及び/又はノードC.R.616(1)~616(N)のうちの1つ又は複数は、仮想機械(VM)に対応してよい。
【0065】
少なくとも1つの実施例では、グループ化されたコンピューティング・リソース614は、1つ若しくは複数のラック(図示せず)又はさまざまな地理的な場所においてデータ・センタに収容された多くのラック(これも図示せず)に収容されたノードC.R.616の別個のグループ化を含んでよい。グループ化されたコンピューティング・リソース614内のノードC.R.616の別個のグループ化は、1つ又は複数の作業負荷をサポートするように構成又は割り当てられてよいグループ化されたコンピュート(compute)、ネットワーク、メモリ、又は記憶リソースを含んでよい。少なくとも1つの実施例では、CPU、GPU、及び/又は他のプロセッサを含むいくつかのノードC.R.616は、1つ又は複数の作業負荷をサポートするようにコンピュート・リソースを提供するために1つ又は複数のラック内でグループ化されてよい。1つ又は複数のラックは、任意の数の電力モジュール、冷却モジュール、及び/又はネットワーク・スイッチも任意の組み合わせで含んでよい。
【0066】
リソース・オーケストレータ622は、1つ若しくは複数のノードC.R.616(1)~616(N)及び/又はグループ化されたコンピューティング・リソース614を構成又は制御し得る。少なくとも1つの実施例では、リソース・オーケストレータ622は、データ・センタ600のためのソフトウェア設計インフラストラクチャ(「SDI:software design infrastructure」)管理エンティティを含んでよい。リソース・オーケストレータ622は、ハードウェア、ソフトウェア、又はそれらの何らかの組み合わせを含んでよい。
【0067】
少なくとも1つの実施例では、
図6に示されるように、フレームワーク層620は、ジョブ・スケジューラ632、構成マネージャ634、リソース・マネージャ636、及び/又は分散ファイル・システム638を含んでよい。フレームワーク層620は、ソフトウェア層630のソフトウェア632及び/又はアプリケーション層640の1つ若しくは複数のアプリケーション642をサポートするフレームワークを含んでよい。ソフトウェア632又はアプリケーション642はそれぞれ、 Amazon Web Services、Google Cloud、及びMicrosoft Azureによって提供されるサービス・ソフトウェア又はアプリケーションなどの、ウェブ・ベースのサービス・ソフトウェア又はアプリケーションを含んでよい。フレームワーク層620は、限定するものではないが、大規模データ処理(たとえば、「ビッグ・データ」)に分散ファイル・システム638を利用することがある、Apache Spark(商標)(以下では「Spark」)などの、一種の無料オープン・ソース・ソフトウェア・ウェブ・アプリケーション・フレームワークであってよい。少なくとも1つの実施例では、ジョブ・スケジューラ632は、データ・センタ600のさまざまな層によってサポートされる作業負荷のスケジューリングを容易にするSparkドライバを含んでよい。構成マネージャ634は、大規模データ処理をサポートするために、ソフトウェア層630及びSparkを含むフレームワーク層620及び分散ファイル・システム638などの異なる層を構成することが可能であってよい。リソース・マネージャ636は、分散ファイル・システム638及びジョブ・スケジューラ632にマップされた又はそのサポートのために割り振られた、クラスタ化又はグループ化されたコンピューティング・リソースを管理することが可能であってよい。少なくとも1つの実施例では、クラスタ化又はグループ化されたコンピューティング・リソースは、グループ化されたコンピューティング・リソース614をデータ・センタ・インフラストラクチャ層610において含んでよい。リソース・マネージャ1036は、これらのマップされた又は割り振られたコンピューティング・リソースを管理するために、リソース・オーケストレータ612と協調してよい。
【0068】
少なくとも1つの実施例では、ソフトウェア層630に含まれるソフトウェア632は、ノードC.R.616(1)~616(N)、グループ化されたコンピューティング・リソース614、及び/又はフレームワーク層620の分散ファイル・システム638の少なくとも部分によって使用されるソフトウェアを含んでよい。1つ又は複数のタイプのソフトウェアとしては、限定するものではないが、インターネット・ウェブ・ページ検索ソフトウェア、電子メール・ウイルス・スキャン・ソフトウェア、データベース・ソフトウェア、及びストリーミング・ビデオ・コンテンツ・ソフトウェアがあり得る。
【0069】
少なくとも1つの実施例では、アプリケーション層640に含まれるアプリケーション642は、ノードC.R.616(1)-616(N)、グループ化されたコンピューティング・リソース614、及び/又はフレームワーク層620の分散ファイル・システム638の少なくとも部分によって使用される1つ又は複数のタイプのアプリケーションを含んでよい。1つ又は複数のタイプのアプリケーションとしては、限定するものではないが、任意の数のゲノミクス・アプリケーション、コグニティブ・コンピュート、並びに訓練ソフトウェア若しくは推論ソフトウェア、機械学習フレームワーク・ソフトウェア(たとえば、PyTorch、TensorFlow、Caffeなど)、及び/又は1つ若しくは複数の実施例に関連して使用される他の機械学習アプリケーションを含む、機械学習アプリケーションがあり得る。
【0070】
少なくとも1つの実施例では、構成マネージャ634、リソース・マネージャ636、及びリソース・オーケストレータ612のいずれかは、任意の技術的に実現可能な様式で獲得される任意の量及びタイプのデータに基づいて、任意の数及びタイプの自己修正アクションを実装してよい。自己修正アクションは、データ・センタ600のデータ・センタ・オペレータを、おそらく良くない構成判断を行うことから救い、十分に活用されていない及び/又は不良なデータ・センタの実施部分をおそらく回避し得る。
【0071】
データ・センタ600は、本明細書において説明される1つ又は複数の実施例により1つ又は複数の機械学習モデルを使用して1つ又は複数の機械学習モデルを訓練する又は情報を予測若しくは推測するツール、サービス、ソフトウェア、又は他のリソースを含んでよい。たとえば、機械学習モデルは、上記でデータ・センタ600に関して説明されたソフトウェア及び/又はコンピューティング・リソースを使用してニューラル・ネットワーク・アーキテクチャによる重みパラメータを計算することによって訓練されることがある。少なくとも1つの実施例では、1つ又は複数のニューラル・ネットワークに対応する訓練された又は導入された機械学習モデルは、限定するものではないが本明細書において説明される訓練技法などの1つ又は複数の訓練技法を通じて計算された重みパラメータを使用することによって、上記でデータ・センタ600に関して説明されたリソースを使用して情報を推論又は予測するために使用されることがある。
【0072】
少なくとも1つの実施例では、データ・センタ600は、CPU、特定用途向け集積回路(ASIC)、GPU、FPGA、及び/又は他のハードウェア(又はそれに対応する仮想コンピュート・リソース)を使用して、上記で説明されたリソースを使用した訓練及び/又は推論を実施してよい。さらに、上記で説明された1つ又は複数のソフトウェア・リソース及び/又はハードウェア・リソースは、画像認識サービス、音声認識サービス、又は他の人工知能サービスなどの、ユーザが情報の推論を訓練又は実施することを可能にするサービスとして構成されてよい。
【0073】
例示的なネットワーク環境
本開示の実施例を実装することにおける使用に適したネットワーク環境は、1つ又は複数のクライアント・デバイス、サーバ、ネットワーク・アタッチド・ストレージ(NAS:network attached storage)、他のバックエンド・デバイス、及び/又は他のデバイス・タイプを含んでよい。クライアント・デバイス、サーバ、及び/又は他のデバイス・タイプ(たとえば、各デバイス)は、
図5のコンピューティング・デバイス500の1つ又は複数のインスタンス上で実装されてよい-たとえば、各デバイスは、コンピューティング・デバイス500の類似の構成要素、特徴、及び/又は機能を含んでよい。さらに、バックエンド・デバイス(たとえば、サーバ、NASなど)が実装される場合、バックエンド・デバイスは、データ・センタ600の一部として含まれてよく、その実例は、本明細書では
図6を参照してより詳細に説明される。
【0074】
ネットワーク環境の構成要素は、ネットワークを介して互いにと通信してよく、ネットワークは、ワイヤードであってもよいし、ワイヤレスであってもよいし、両方であってもよい。ネットワークは、複数のネットワークを含んでもよいし、ネットワークのネットワークを含んでもよい。例として、ネットワークは、1つ若しくは複数のワイド・エリア・ネットワーク(WAN:Wide Area Network)、1つ若しくは複数のローカル・エリア・ネットワーク(LAN:Local Area Network)、インターネット及び/若しくは公衆交換電話網(PSTN:public switched telephone network)などの1つ若しくは複数のパブリック・ネットワーク、及び/又は1つ又は複数のプライベート・ネットワークを含んでよい。ネットワークがワイヤレス電気通信ネットワークを含む場合、基地局、通信塔、又はアクセス・ポイントすら(並びに他の構成要素)などの構成要素は、ワイヤレス接続性を提供し得る。
【0075】
互換性のあるネットワーク環境としては、1つ又は複数のピア・ツー・ピア・ネットワーク環境-その場合、サーバがネットワーク環境に含まれないことがある-及び1つ又は複数のクライアント-サーバ・ネットワーク環境-その場合、1つ又は複数のサーバがネットワーク環境に含まれることがある-があり得る。ピア・ツー・ピア・ネットワーク環境では、本明細書においてサーバに関して説明される機能は、任意の数のクライアント・デバイス上で実装されてよい。
【0076】
少なくとも1つの実施例では、ネットワーク環境は、1つ又は複数のクラウド・ベース・ネットワーク環境、分散コンピューティング環境、それらの組み合わせなどを含んでよい。クラウド・ベース・ネットワーク環境は、サーバのうちの1つ又は複数の上で実装される、フレームワーク層と、ジョブ・スケジューラと、リソース・マネージャと、分散ファイル・システムとを含んでよく、サーバは、1つ又は複数のコア・ネットワーク・サーバ及び/又はエッジ・サーバを含んでよい。フレームワーク層は、ソフトウェア層のソフトウェア及び/又はアプリケーション層の1つ若しくは複数のアプリケーションをサポートするフレームワークを含んでよい。ソフトウェア又はアプリケーションはそれぞれ、ウェブ・ベースのサービス・ソフトウェア又はアプリケーションを含んでよい。実施例では、クライアント・デバイスのうちの1つ又は複数は、(たとえば、1つ又は複数のアプリケーション・プログラミング・インターフェース(API:application programming interface)を介してサービス・ソフトウェア及び/又はアプリケーションにアクセスすることによって)ウェブ・ベースのサービス・ソフトウェア又はアプリケーションを使用してよい。フレームワーク層は、限定するものではないが、大規模データ処理(たとえば、「ビッグ・データ」)に分散ファイル・システムを利用し得るものなどの、一種の無料オープン・ソース・ソフトウェア・ウェブ・アプリケーション・フレームワークであってよい。
【0077】
クラウド・ベース・ネットワーク環境は、本明細書において説明されるコンピューティング及び/又はデータ記憶機能(又は、それらの1つ若しくは複数の部分)の任意の組み合わせを行うクラウド・コンピューティング及び/又はクラウド・ストレージを提供し得る。これらのさまざまな機能のいずれも、(たとえば、州、地域、国、地球などにわたって分散されてよい1つ又は複数のデータ・センタの)セントラル・サーバ又はコア・サーバからの複数の場所上に分散されてよい。ユーザ(たとえば、クライアント・デバイス)への接続がエッジ・サーバに比較的近い場合、コア・サーバは、機能の少なくとも一部分をエッジ・サーバに指定することがある。クラウド・ベース・ネットワーク環境は、プライベート(たとえば、単一の組織に限定される)、パブリック(たとえば、多数の組織にとって利用可能である)、及び/又はそれらの組み合わせ(たとえば、ハイブリッド・クラウド環境)であってよい。
【0078】
クライアント・デバイスは、本明細書において
図5を参照して説明される例示的なコンピューティング・デバイス500の構成要素、特徴、及び機能のうちの少なくともいくつかを含んでよい。限定ではなく例として、クライアント・デバイスは、パーソナル・コンピュータ(PC:Personal Computer)、ラップトップ・コンピュータ、モバイル・デバイス、スマートフォン、タブレット・コンピュータ、スマート・ウォッチ、ウェアラブル・コンピュータ、携帯情報端末(PDA:Personal Digital Assistant)、MP3プレーヤ、仮想現実ヘッドセット、全地球測位システム(GPS:Global Positioning System)若しくはデバイス、ビデオ・プレーヤ、ビデオ・カメラ、監視デバイス若しくはシステム、車両、ボート、飛行船(flying vessel)、仮想機械、ドローン、ロボット、ハンドヘルド通信デバイス、病院デバイス、ゲーム・デバイス若しくはシステム、娯楽システム、車載コンピュータ・システム、組み込みシステム・コントローラ、遠隔制御装置、アプライアンス、消費者向け電子デバイス、ワークステーション、エッジ・デバイス、これらの叙述されたデバイスの任意の組み合わせ、又は他の任意の適切なデバイスとして具現化されてよい。
【0079】
本開示は、プログラム・モジュールなどのコンピュータ実行可能令が、コンピュータ又は携帯情報端末若しくは他のハンドヘルド・デバイスなどの他の機械によって実行されていることを含めて、コンピュータ・コード又は機械使用可能命令の一般的な文脈で説明されてよい。一般に、ルーチン、プログラム、オブジェクト、コンポーネント、データ構造などを含むプログラム・モジュールは、タスクを実施する又は特定の抽象データ型を実装するコードを指す。本開示は、ハンドヘルド・デバイス、消費者電子機器、汎用コンピュータ、より特殊なコンピューティング・デバイスなどを含むさまざまなシステム構成で実施されてよい。本開示は、通信ネットワークを通じてリンクされた遠隔処理デバイスによってタスクが実施される分散コンピューティング環境において実施されてもよい。
【0080】
本明細書で使用されるとき、2つ以上の要素に関する「及び/又は」の記載は、1つの要素のみ、又は要素の組み合わせを意味すると解釈されるべきである。たとえば、「要素A、要素B、及び/又は要素C」は、要素Aのみ、要素Bのみ、要素Cのみ、要素A及び要素B、要素A及び要素C、要素B及び要素C、又は要素A、要素B、及び要素Cを含んでよい。さらに、「要素A又は要素Bのうちの少なくとも1つ」は、要素Aのうちの少なくとも1つ、要素Bのうちの少なくとも1つ、又は要素Aのうちの少なくとも1つ及び要素Bのうちの少なくとも1つを含んでよい。さらに、「要素A及び要素Bのうちの少なくとも1つ」は、要素Aのうちの少なくとも1つ、要素Bのうちの少なくとも1つ、又は要素Aのうちの少なくとも1つ及び要素Bのうちの少なくとも1つを含んでよい。
【0081】
本開示の主題は、法定要件を満たすように本明細書では特殊性とともに説明される。しかしながら、説明自体は、本開示の範囲を制限することを意図したものではない。むしろ、発明者は、特許請求される主題が、他の現在又は将来の技術とともに、本文書で説明されるものに類似した異なるステップ又はステップの組み合わせを含むように、他の手段でも具現化されてよいことを企図している。さらに、「ステップ」及び/又は「ブロック」という用語は、本明細書では、用いられる方法の異なる要素を暗示するために使用され得るが、これらの用語は、個々のステップの順序が明示的に説明されない限り、及び個々のステップの順序が明示的に説明されるときを除いて、本明細書において開示されるさまざまなステップ間でいかなる特定の順序をも暗示すると解釈されるべきでない。
【外国語明細書】