(57)【特許請求の範囲】
【請求項１】
パラレル処理システムにおいてイメージを処理する方法であって、前記方法は、第１のランダム数、該第１のランダム数と異なる第２のランダム数、データ、第１のキー及び第２のキーを用い、
前記イメージを、各グループがビット幅に等しい前記イメージのビット数を含むように少なくとも１つのグループに分割するステップであって、前記ビット幅は、前記パラレル処理システムのプロセッサが一度に操作することが可能なビット数に対応する、ステップと、
グループ毎に、ハッシュ処理を実行するステップであって、
前記データの新たな値を、前記グループの値と、前記第１のランダム数によって乗算されかつ前記第２のランダム数と合計された前記データの現在の値との合計に等しく設定するステップと、
前記第１のキーの新たな値を、前記データによって修正された前記第１のキーの値に等しく設定するステップと、
前記第２のキーの新たな値を、前記データによって修正された前記第２のキーの値に等しく設定するステップと
を含む、ハッシュ処理を実行するステップと、
前記ハッシュを実行した後に、前記第１のキーと前記第２のキーとを備えるビッグキーをビッグキーストアに保存するステップと
を備える、方法。
【請求項２】
前記イメージをクライアントコンピュータに送信するステップを更に含む、請求項１記載の方法。
【請求項３】
前記イメージをクライアントコンピュータに送信するステップは、前記ビッグキーが前記ビッグキーストア内の他のいずれのビッグキーにも一致しない判断したときに、前記イメージをクライアントコンピュータに送信することを含む、請求項２記載の方法。
【請求項４】
前記ビッグキーが前記ビッグキーストア内の他のいずれかのビッグキーと一致すると判定したとき、前記ビッグキーをクライアントコンピュータに送信するステップを更に含む、請求項３記載の方法。
【請求項５】
前記イメージを前記クライアントコンピュータに送信する前に前記イメージを符号化するステップを更に含む、請求項２記載の方法。
【請求項６】
前記第１のキーの新たな値を設定することは、前記第１のキーと前記データに対して排他的論理和操作を実行することによって前記データにより前記第１のキーを修正することを含み、
前記第２のキーの新たな値を設定することは、前記第２のキーと前記データに対して排他的論理和操作を実行することによって前記データにより前記第２のキーを修正することを含む、請求項１記載の方法。
【請求項７】
前記イメージを、各グループが前記ビット幅に等しい前記イメージのビット数を含むように前記少なくとも１つのグループに分割した後、前記ビット幅によって分割されたイメージのサイズがゼロ以外の残りのビット数を有するとき、シリアルＣＢＣ（暗号ブロック連鎖）アルゴリズムで前記残りのビット数をハッシュ処理してポスト第１のキー及びポスト第２のキーを生成し、前記ポスト第１のキーに基づいて前記第１のキーを前記プロセッサにより決定し、前記ポスト第２のキーに基づいて前記第２のキーを前記プロセッサにより決定するステップ、を更に含む請求項１記載の方法。
【請求項８】
前記イメージは画面スクレイピングを含む、請求項１記載の方法。
【請求項９】
前記イメージはＲＤＰ（リモートデスクトッププロトコル）のタイルを含む、請求項１記載の方法。
【請求項１０】
イメージを処理するためのパラレル処理システムであって、当該パラレル処理システムは、第１のランダム数、該第１のランダム数と異なる第２のランダム数、データ、第１のキー及び第２のキーを用い、
プロセッサと、
前記プロセッサに、
前記イメージを、各グループがビット幅に等しい前記イメージのビット数を含むように少なくとも１つのグループに分割するステップであって、前記ビット幅は、当該パラレル処理システムの前記プロセッサが一度に操作することが可能なビット数に対応する、ステップと、
グループ毎にハッシュ処理を実行するステップであって、
前記データの新たな値を、前記グループの値と、前記第１のランダム数によって乗算されかつ前記第２のランダム数と合計された前記データの現在の値との合計に等しく設定するステップと、
前記第１のキーの新たな値を、前記データによって修正された前記第１のキーの値に等しく設定するステップと、
前記第２のキーの新たな値を、前記データによって修正された前記第２のキーの値に等しく設定するステップと
を含む、ハッシュ処理を実行するステップと、
前記ハッシュを実行した後に、前記第１のキーと前記第２のキーとを備えるビッグキーをビッグキーストアに保存するステップと
を含む処理を実行させるプログラムを記憶したメモリと
を備える、システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ＳＩＭＤ命令を用いるＲＤＰビットマップハッシュアクセラレーションに関する。
【背景技術】
【０００２】
コンピュータはかつては分離され、他のコンピュータとの最小の又は僅かのインターラクション（対話）を行ったけれども、今日のコンピュータはＬＡＮ(Local Area Networks)及びＷＡＮ(Wide Area Networks)等の通信ネットワークを介して他の広く様々なコンピュータとのインターラクションを行う。インターネットの広く拡がった発展で、コンピュータ間の接続は最も重要となり、また、多くの新しいアプリケーション及び技術をもたらしている。大きいスケールのネットワークの発展、及び低コストのパーソナルコンピュータの広く拡がった利用は、多くの人々が働き、インターラクションを行い、通信し、及びプレイする方法を機能的に変化させた。
【０００３】
ネットワーキングの１つの増加する人気がある形式は一般に仮想コンピューティングシステムと称され、それはＲＤＰ（リモートデスクトッププロトコル）、ＩＣＡ（インディペンデントコンピューティングアーキテクチャ）、更に、デスクトップ及びリモートクライアントを有する他のアプリケーションを共有するその他等のプロトコルを利用する。そのようなコンピューティングシステムは一般にクライアントからサーバへキーボードプレス及びマウスクリック又は選択を送信し、ネットワーク接続（例えば、インターネット）を介して他の方向に画面アップデートを中継する。そのため、実際に、アプリケーションのスクリーンショットがサーバ側で表れるようにクライアント装置がそのスクリーンショットを送られるだけの場合ユーザはそれらのマシーンがＬＡＮの一部として動作しているように体験する。
【０００４】
グラフィックデータをクライアントに送る２つの共通の技術は、何かの描写方法をクライアント側でサブルーチンに示すグラフィックプリミティブ及び他の動作を送ることおよび、表示のためにクライアントにビットマップイメージを送ることである。プリミティブのシーケンスが非常に複雑であるときには、より複雑なプリミティブ動作の潜在的に長いシーケンスではなく、もっと簡単に表示することができるビットマップ描画を送ることが更に意味を持つかもしれない。しかしながら、何よりもビットストリーム圧縮器の限定及び限定されたネットワークバンド幅のために画面の完全なビットマップ描画を連続的に送るにはあまりにも高価になる。
【０００５】
それらの問題を軽減するために、クライアントに送信されているフレーム（アプリケーションウインドウ等）はタイルに更に細かく分割することができる。それらのタイルはクライアント側でキャッシュされる。１つのタイルが２つのビットマップ間で繰り返されるとき、そのタイルをクライアントに再送信するよりはむしろ、サーバはクライアントに対して命令を送信してキャッシュしたタイルを表示させる。これはＲＤＰセッションのバンド幅コストを大きく減らすことができ、特にＲＤＰセッションでタイルは頻繁に繰り返される。しかしながら、これを行う場合、処理するリソースをキャッシュするタイルに充てなければならない。
【０００６】
更に、タイリングアルゴリズムはキャッシュヒットの可能性を最大化するように度々実施される。タイルがより小さくする場合にはそれが２回（そのフレーム内又は将来のフレームで）用いられる可能性が高まる。しかも最小の有用タイルサイズがある。なぜならば、タイルがあまりにも小さいと２つのタイル間のキャッシュヒットから受けられる利点は小さいからである。
【０００７】
それらのＲＤＰビットマップキャッシングアルゴリズム及びタイル間の差（「タイル差異」）の検出は、ＲＤＰ表示ストリームを、ＬＡＮ、ＷＡＮ又は無線ＬＡＮ（ｗＬＡＮ）を介した送信にふさわしいレベルまで減少させるために、非常に重要である。それらのキャッシングアルゴリズムは一般に、ネットワークを介してクライアントに情報を送信するためにサーバに要求されたバンド幅の減少量に代えてサーバの（ＣＰＵの頻繁な）処理時間を犠牲にする。
【０００８】
ＲＤＰビットマップキャッシングの主要な処理コストの１つはハッシュアルゴリズムを使用することである。ハッシュアルゴリズムは、より大きいイメージデータを、より小さいデータに変換するアルゴリズムである。この小さいデータはアレイ又はツリーのようなソートのデータ構造で、インデックスとして用いられる。いくつかのハッシュアルゴリズムはＣＢＣ（暗号ブロック連鎖）アルゴリズム、又はＣＢＣアルゴリズムを実装している。しかしながら、このハッシュアルゴリズムで使用される処理時間はサーバのスケーラビリティを阻止してしまうことがある。サーバのネットワークバンド幅等の他のリソースが使い果たされる前に、全ての利用可能な処理リソースをＲＤＰセッションが使用してしまうからである。また、この処理時間は、イメージフレームを符号化するために必要な時間を増加させる。なお、それらのフレームはこの時間レートで生成され、クライアントに送られる（フレームレート（ＦＰＳ））。
【発明の概要】
【発明が解決しようとする課題】
【０００９】
現在のパラレルプロセッサでハッシングアルゴリズムの速度を増加させることは難しい。なぜならば、ＣＢＣハッシュアルゴリズムは、通常、シリアルであり、それはシングル命令のデータ（ＳＩＭＤ）プロセッサのようなパラレル処理に好適でない。
【００１０】
それらのＩＳＡ（命令セットアーキテクチャ）のＳＩＭＤ命令を有するベクトルプロセッサとして知られたクラスのプロセッサが存在する。ＮＥＨＡＬＥＭ（登録商標）プロセッサのようないくつかのインテル（登録商標）ｘ８６ ＩＳＡプロセッサにおけるＳＥＥ４．２命令等のＳＳＥ（Streaming SIMD extensions:ストリーミングＳＩＭＤ拡張命令）はそれらのＳＩＭＤ命令の形式である。それらのプロセッサは、一度にデータのかなりの部分を処理することができるので所定のタイプのデータの処理を高速化することができる。例えば、イメージが処理される場合に、１回に１つの画素について処理する代わりに、ＳＩＭＤプロセッサは１つの命令でパラレルに数画素について処理することができる。命令自身を処理することのパフォーマンスを改善するだけでなく、メモリからデータをフェッチするために費やす時間を減少させることができる。
【００１１】
ＳＩＭＤ命令は、圧縮のためにイメージデータを処理すること等のいくつかの種類の処理のパフォーマンスを改善するための機会を提供するが、一方、その処理を実行するために必要なアルゴリズム及び技術は、非ベクトルプロセッサの場合よりもかなり難しい。パラレルに処理できるように、データの流れに対して、またデータを組織化することに対して特別の注意を払う必要がある。結局のところ、新しい技術はＲＤＰタイルにおけるハッシング動作においてパラレル処理を増加させるという利点がある。
【課題を解決するための手段】
【００１２】
アクセラレーションのための本技術は、シリアルアルゴリズムが動作するほど多数のビットにてハッシュアルゴリズムをパラレルにコンピューティング処理し、それらの別々にコンピューティング処理したハッシュを組み合わせてそのイメージに対するハッシュを決定することによってパラレル処理を利用する。これは、コリジョンヒットレートを増加させることなく処理のために要求される時間をＣＰＵにおいて大きく減少させる。そのレートでハッシュアルゴリズムに対する２つの異なる入力は同一の出力、少量だけを生成する。多くのＲＤＰタイルハッシング状態においてコリジョンヒットレートにおけるこの少ない増加は容認することができる。
【００１３】
本技術は、ハッシング速度における増加からの利点がある一方、コリジョンヒットレートにおける少しの増加を容認することができる限り、ＲＤＰタイル分類を越えた状態において有益である。このコリジョンヒットレートの増加は非常に少なく、ほぼ(１００／２＾１９２)％である。
【００１４】
本技術は２つの場合にＲＤＰについてかなりの進歩を示す。第一に、ビットマップタイルのハッシュをコンピューティング処理するためにＣＢＣハッシュアルゴリズム又はＣＢＣタイプのハッシュアルゴリズムを用いることができる。そのビットマップタイルが再度出現されるならば、ハッシュ機能は同一のキャッシュキーを生成し、サーバはそのビットマップを再送することを避けることによってバンド幅を節約することができる。
【００１５】
第二に、ＲＤＰが全くの画面（スクリーン）スクレイピングを用いて動作している場合に（他のプログラムの表示出力からイメージデータを抽出する）、どのタイルがフレーム間で変化したかの素早い比較を行うために各新しいフレームについてイメージタイルのハッシュをコンピューティング処理するためにこの同じハッシュ機能を用いることができる。
【００１６】
それらの両方の場合は、ハッシュ機能が通常、ＲＤＰスタックの最高のＣＰＵコストの１つであり、ＲＤＰがいくつかの場合に限定されたＣＰＵであるので、ＣＰＵコストを減少させることはＲＤＰの性能を増大させることを可能にすることを意味する。
【００１７】
この分野の当業者にとっては当然のことであるが、開示技術の１以上の様々な態様は本開示の本明細書で言及した態様をもたらす回路及び／又はプログラミングを含んで良いが、それに限定されない。その回路及び／又はプログラミングは実質的には、システムデザイナーの設計的選択に従って本明細書で言及した態様をもたらすように構成されたハードウエア、ソフトウエア、及び／又はファームウエアの組み合わせであることができる。
【００１８】
上記したことは概要であり、当然、単純化、一般化  及び詳細の省略を含む。概要は単に示すだけであり、何らかに限定しているつもりではないことはこの分野の当業者には当然である。
【図面の簡単な説明】
【００１９】
本明細書に応じたハッシュアクセラレーションのためのシステム、方法、及び媒体読み取り可能なコンピュータは次の添付図面を参照して更に詳細に説明される。
【００２０】
【図１】本明細書に説明されたハッシュアクセラレーションを実施することができる汎用コンピューティング環境を例示する図である。
【図２】ハッシュアクセラレーションの動作処理を例示するブロック図である。
【図３】上記したアクセラレーションを施したタイル差分技術を利用するＲＤＰ（リモートデスクトッププロトコル）を介して通信するクライアント及びサーバを示す図である。
【発明を実施するための形態】
【００２１】
図１は本明細書に説明された技術を使用することができる汎用コンピューティング装置のブロック図である。コンピューティングシステム環境１２０は適切なコンピューティング環境の単なる一例であり、ここで開示した構成要件の使用又は機能の範囲について限定を示唆するつもりではない。そのコンピューティング環境１２０はコンピューティング環境１２０の例に示されたコンポーネントのいずれか１つ又は組み合わせについて依存関係又は要件を有するように解釈されるべきでない。いくつかの実施形態においては、示された様々なコンピューティング要素が本開示の特定の態様を実施例として説明するために構成された回路を含んでも良い。例えば、本開示に用いられた用語である回路はファームウエア又は複数のスイッチによって機能をなすように構成された専用のハードウエアコンポーネントを含むことができる。他の実施形態の例において、用語の回路は機能をなすために動作可能な論理回路を実施するソフトウエア命令によって構成される汎用処理ユニット、メモリ等を含むことができる。実施形態の例において、回路はハードウエアとソフトウエアとの組み合わせを含む場合に、実施者は論理回路を実施するソースコードを書いても良いし、そのソースコードをその汎用処理ユニットによって処理が可能なマシーン読み取り可能なコードにコンパイルしても良い。この技術分野の当業者には、技術の状態がハードウエア、ソフトウエア、又はハードウエアとソフトウエアとの組み合わせの間に少しの差異があることに展開してしまうことが当然であるので、特定の機能を達成するためにハードウエアとソフトウエアとの間の選択は実施者に残された設計上の選択事項である。特に、この技術分野の当業者には、ソフトウエア処理を同等のハードウエア構成に変換することができ、ハードウエア構成をそれ自身、同等のソフトウエア処理に変換することができることは当然のことである。よって、ハードウエア実施とソフトウエア実施との間の選択は設計上の選択事項であり、実施者に残されている。
【００２２】
コンピュータ１４１は一般に様々なコンピュータ読み取り可能な媒体を含む。コンピュータ読み取り可能な媒体はコンピュータ１４１がアクセスすることができる媒体であっても良く、揮発性媒体及び不揮発性媒体、リムーバブル媒体及び非リムーバブル媒体の両方を含む。システムメモリ１２２はＲＯＭ（リードオンリメモリ）１２３及びＲＡＭ（ランダムアクセスメモリ）１６０等の揮発性メモリ及び／又は不揮発性メモリの形でコンピュータ記憶媒体を含む。スタートアップ期間等にコンピュータ１４１内の要素間の情報を転送する手助けとなる基本ルーチンを含む基本入力／出力システム（ＢＩＯＳ）１２４は、通常、ＲＯＭ１２３に保存される。ＲＡＭ１６０は通常、処理ユニット１５９に直ちにアクセス可能及び／又はそれによって現在動作されているデータ及び／又はプログラムモジュールを含む。例として、限定されないが、図１はオペレーティングシステム１２５、アプリケーションプログラム１２６、他のプログラムモジュール１２７、及びプログラムデータ１２８を示している。
【００２３】
また、コンピュータ１４１は他のリムーバブル／非リムーバブル、揮発性／不揮発性コンピュータ記憶媒体を含んでも良い。単なる例として、図１は非リムーバブルの不揮発性磁気媒体について読み取り又は書き込みするハードディスクドライブ１３８、リムーバブルの不揮発性磁気ディスク１５４について読み取り又は書き込みする磁気ディスクドライブ１３９、及びＣＤ−ＲＯＭ又は他の光媒体等のリムーバブルの不揮発性光ディスク１５３について読み取り又は書き込みする光ディスクドライブ１４０を示している。動作環境の例において使用することができる他のリムーバブル／非リムーバブル、揮発性／不揮発性コンピュータ記憶媒体は、限定されないが、磁気テープカセット、フラッシュメモリカード、ディジタルバーサタイルディスク、ディジタルビデオテープ、半導体ＲＡＭ、半導体ＲＯＭ等を含む。ハードディスクドライブ１３８は通常、インターフェース１３４等の非リムーバブルメモリインターフェースを介してシステムバス１２１に接続され、磁気ディスクドライブ１３９は通常、インターフェース１３５等のリムーバブルメモリインターフェースによってシステムバス１２１に接続されている。
【００２４】
上記しかつ図１に示したドライブ及びそれらに関連したコンピュータ記憶媒体はコンピュータ読み取り可能な命令、データ構造、プログラムモジュール及びコンピュータ１４１のための他のデータの記憶を提供する。例えば、図１において、ハードディスクドライブ１３８は、オペレーティングシステム１５８、アプリケーションプログラム１５７、他のプログラムモジュール１５６、及びプログラムデータ１５５を記憶するとして示されている。それらのコンポーネントは、オペレーティングシステム１２５、アプリケーションプログラム１２６、他のプログラムモジュール１２７、及びプログラムデータ１２８と同じ又は異なっても良い。オペレーティングシステム１５８、アプリケーションプログラム１５７、他のプログラムモジュール１５６、及びプログラムデータ１５５は少なくとも異なるコピーであることを示すためにここでは異なる符号で与えられている。ユーザはキーボード１５１、一般にマウスと呼ばれるポインティングデバイス１５２、トラックボール又はタッチパッド等の入力装置を介してコンピュータ１４１に命令及び情報を入力することができる。他の入力装置（図示せず）としてはマイクロホン、ジョイスティック、ゲームパッド、衛星放送受信アンテナ、スキャナー等を含むことができる。それらの入力装置及び他の入力装置は、システムバスに接続されているユーザ入力インターフェース１３６を介して処理ユニット１５９に度々接続されるが、パラレルポート、ゲームポート又はＵＳＢ（ユニバーサルシリアルバス）等の他のインターフェース及びバス構造によって接続されても良い。また、モニタ１４２又は他の種類の表示装置は、ビデオインターフェース１３２等のインターフェースを介してシステムバス１２１に接続される。モニタに加えて、コンピュータはスピーカ１４４及びプリンタ１４３等の他の周辺出力装置を含んでも良く、それらは出力周辺インターフェース１３３を介して接続することができる。
【００２５】
コンピュータ１４１はリモートコンピュータ１４６等の１以上のリモートコンピュータに論理結合を用いてネットワーク化された環境で動作することができる。リモートコンピュータ１４６は、パーソナルコンピュータ、サーバ、ルータ、ネットワークＰＣ、ピアデバイス又は他の共通のネットワークノードであっても良く、図１にはメモリ記憶装置１４７だけが示されているが、通常、コンピュータ１４１と関連して上述された多くの要素又は全ての要素を含む。図１に示された論理結合はＬＡＮ（ローカルエリアネットワーク）１４５及びＷＡＮ（ワイドエリアネットワーク）１４９を含むが、他のネットワークを含んでも良い。そのようなネットワーキング環境はオフィス、企業規模のコンピュータネットワーク、イントラネット及びインターネットにおいて通常である。
【００２６】
ＬＡＮネットワーキング環境において使用されるとき、コンピュータ１４１はネットワークインターフェース又はアダプタ１３７を介してＬＡＮ１４５に接続される。ＷＡＮネットワーキング環境において使用されるとき、コンピュータ１４１は通常、インターネット等のＷＡＮ１４９を介して通信を確立するためにモデム１５０又は他の手段を含む。内部又は外部に備えることができるモデム１５０はユーザ入力インターフェース１３６、又は他の適当な機構を介してシステムバス１２１に接続されても良い。ネットワーク化された環境において、コンピュータ１４１に関連して示されたプログラムモジュール、又はその一部はリモートメモリ記憶装置に保存されても良い。例として、限定されないが、図１はメモリ装置１４７に属するとしてリモートアプリケーションプログラム１４８を示している。示されたネットワーク接続は例であり、コンピュータ間の通信リンクを確立する他の手段が用いられても良いことは当然である。
【００２７】
図２はハッシュアクセラレーションの動作処理を例示している。シリアルハッシング処理は１度にイメージデータの１つのＤＷＯＲＤ（ダブルワード；多くのシステムアーキテクチャでは３２ビットである）を取り扱い、そのイメージの前で開始し、その後で動作する。シリアルハッシング処理はそのイメージについての１つのキーを演算し、それは処理されるイメージの新たなＤＷＯＲＤ各々に基づいて更新される。それに対して、本動作処理の例は１度に複数のＤＷＯＲＤについて動作する。実施形態において、ＤＷＯＲＤが３２ビットからなり、プロセッサが同時に１２８ビットについて動作することができる場合に、データの４つのＤＷＯＲＤであることができる。処理はそのイメージに対して４つの部分キーを保持し、その１つがパラレルに動作される各ＤＷＯＲＤに対応し、イメージの全てが最終キーを生成するために処理されると、それらの４つの部分キーを結合する。
【００２８】
オプション動作２０２は第１のランダム値及び第２のランダム値を選択することを示し、第１のランダム値は第２のランダム値と異なる。
【００２９】
オプション動作２０４はゼロに等しいチェックサム、データ、第１のキー及び第２のキーの各々を選択することを示している。いずれかの実施形態においては、チェックサム、データ、第１のキー及び第２のキーは、本動作が開始する前ではゼロに等しく、それによりこの点でそれらをゼロにする必要はない。その技術は合計の実行を継続するためにそれらの４つの数を用いる場合に、それらをゼロに設定することによって動作が初期化されても良い。チェックサム及びデータは第１のキー及び第２のキーを決定するために用いられる内部変数として用いることができる。第１のキー及び第２のキーはイメージについてのビッグキーを備えても良い。ビッグキーは、イメージ自身を調べるために、サーバがクライアントにイメージを送ったか否かを調べるように、又はクライアントが既に受け取ったイメージの代わりにビッグキーを受け取るように、イメージ又はそれについての参照を調べるために後で用いられる。それらの２つのコンポーネント、第１のキー及び第２のキーとしてビッグキーを計算し、そして、それらを結合することがモノリシックのビッグキーを計算するよりも速い。
【００３０】
動作２０６はイメージを少なくとも１つのグループにグループ化することを示し、各グループはビット幅に等しいイメージのビット数からなる。プロセッサは１度にデータの１ビット以上について動作する。例えば、１２８ビットプロセッサは１度にデータの１２８ビッドについて動作することができる。このプロセッサは１２８ビットの「ビット幅」を有する。その１２８ビットは１２８ビットの数を表す１つ等の同一のデータ構造である必要はない。むしろ、１２８ビットは４つに分かれた３２ビットの整数、又は８つに分かれた１６ビットの整数等の多数のピースデータを備える。そのような状態では、命令は、４つの３２ビット整数のグループについて動作が行われるときその動作の結果（倍数、論理シフト等）は１２８ビットにおいて隣接する整数にオーバフローしない。
【００３１】
実施形態において、イメージは画面スクレイピングを備え、画面スクレイピングは他のプログラムの表示出力からデータを取り出すことを含む。このデータは他のプログラムによって出力装置で表示されるべきものであったので、それを解析することの助けとなるドキュメンテーション又は構造を一般的に欠いている。
【００３２】
実施形態において、イメージはＲＤＰ（リモートデスクトッププロトコル）においてタイルを備え、そのタイルはビットマップを含む。タイルはフレームのサブセットを備えても良く、フレームは通常、アプリケーションウインドウを備える。一般的な実施形態において、フレームは複数の長方形のタイルに分割され、変化されたそれらのタイルだけがクライアントに送られることが必要である。
【００３３】
実施形態において、イメージが配列境界に配列されていない場合に、第１のビット境界の前のイメージの最初の数ビットはシリアルＣＢＣ（暗号ブロック連鎖）アルゴリズムでハッシュ処理され、事前の第１のキー及び事前の第２のキーを生成する。例えば、本動作がパラレルに１２８ビットで動作し、イメージが１２８ビットの境界に配列され、そのイメージの最初の１２８ビット境界の前に生じているそのイメージの５６ビットである場合に、それらの５６ビットがシリアルＣＢＣアルゴリズムでハッシュ処理され、その結果の事前の第１のキー及び事前の第２のキーはシリアルＣＢＣアルゴリズムを介して次の動作のその結果の第１のキー及び第２のキーと各々結合される。
【００３４】
動作２０８はグループ毎に、チェックサムにグループを加算してチェックサムを設定し、第１のランダム数によって掛け算され、更に第２のランダム数と合計されたデータとグループとの合計となるようにデータを設定し、第１のキーをデータによって修正された第１のキーに設定し、第２のキーをデータによって修正された第２のキーに第２のキーを設定することを含むハッシュを実行することを示している。
【００３５】
実施形態において、第１のキーは、第１のキー及びデータについて排他的論理和(exclusive-or)動作を行うことによりデータによって修正され、第２のキーは、第２のキー及びデータについて排他的論理和動作を行うことによりデータによって修正される。排他的論理和はビット単位の動作であり、２つの入力のいずれか一方が１であれば、２つの入力の結果は１である。例えば、ここで、＾は排他的論理和を表し、０＾０＝０，０＾１＝１，１＾０＝１，１＾１＝０である。
【００３６】
イメージは開始位置及び終了位置を有するように考えられても良く、実施形態において、グループ毎に実行される動作は、グループ毎に未だ実行されていない、開始位置に最も近いグループに対して先ず実行される。すなわち、本技術はイメージを通して連続的に処理し、１度に１つのグループのビットを取り扱い、イメージの終了に達するまで、次のグループのビットに対して同じことする前に処理する。
【００３７】
実施形態において、ハッシュはＣＢＣ（暗号ブロック連鎖）ハッシュを含む。
【００３８】
オプション動作２１０は第１のキーのビットの各ＤＷＯＲＤサイズに基づいてＤＷＯＲＤ第１のキーを設定し、第２のキーのビットの各ＤＷＯＲＤサイズに基づいてＤＷＯＲＤ第２のキーを設定することを示している。
【００３９】
第１のキー及び第２のキーの各々はプロセッサのビット幅より少ないビットを備える場合に、部分的なキーが計算される。イメージの全てが処理されているとき、それらの部分的なキーは完全な第１のキー及び第２のキーを決定するために用いられる。第１のキー及び第２のキーの各々が３２ビットを有し、そのビット幅が１２８ビットである場合の実施形態を取るとする。この実施形態において、１２８ビットのイメージは同期して処理され、４つの３２ビットの部分的な第１のキー及び４つの３２ビットの部分的な第２のキーを生成する。イメージ全体が処理されたときに、それらの４つの部分的なキーの各々はフルキー、すなわちＤＷＯＲＤ第１のキー及びＤＷＯＲＤ第２のキーを決定するために用いられる。
【００４０】
実施形態において、その４つの部分的な第１のキーはそれら一緒に排他的論理和（ＸＯＲ）をとることによりＤＷＯＲＤ第１のキーを決定するために用いられる。４つの部分的な第１のキーはＫｅｙ１［０］，Ｋｅｙ１［１］，Ｋｅｙ１［２］，Ｋｅｙ１［３］のように表現される場合に、この動作はＫｅｙ１［０］＾Ｋｅｙ１［１］＾Ｋｅｙ１［２］＾Ｋｅｙ１［３］のように論理的に表現されることができる。
【００４１】
実施形態において、４つの部分的な第１のキーはシリアルＣＢＣハッシュアルゴリズムを用いてそれらを結合することによりＤＷＯＲＤ第１のキーを決定するために用いられる。実施形態において、Ｋｅｙ１［０］はＫｅｙ１［１］とＣＢＣハッシュ処理され、その結果はＫｅｙ１［２］とＣＢＣハッシュ処理され、その結果はＫｅｙ１［３］とＣＢＣハッシュ処理される。
【００４２】
オプション動作２１２は、ビット幅によって分割されたイメージサイズがゼロ以外の残りのビット数を有するとき、シリアルアルゴリズムによってその残りのビット数をハッシュ処理してポスト第１のキー及びポスト第２のキーを生成し、そのポスト第１のキーに基づいて第１のキーを決定し、そのポスト第２のキーに基づいて第２のキーを決定することを示している。イメージがビット幅によって均等に分けることができるビット数を有する場合に、上記した動作説明のように一連のパラレル動作がイメージのビット毎に行われても良い。しかしながら、イメージがビット幅によって均等に分けることができないビット数を有する場合には、上記のパラレルハッシングとは対照的に、それらの最終ビットの従来のシリアルハッシングが行われても良い。結果として生じるポスト第１のキー及びポスト第２のキーは、第１のキー及びポスト第１のキーについてシリアルＣＢＣハッシュ処理の実行結果に第１のキーを設定すること、また、第２のキー及びポスト第２のキーについてシリアルＣＢＣハッシュ処理の実行結果に第２のキーを設定すること等によって、第１のキー及び第２のキーと結合されても良い。
【００４３】
実施形態において、イメージは終了位置を有し、イメージの一部は残りのビット数よりその終了位置に近くない。すなわち、残りのビットはイメージの最終ビットであると考えられ、それらは、全ての処理ビットが一度にビットのビット幅数をパラレル方式で処理された後、シリアル方式で処理される。
【００４４】
実施形態において、このシリアル処理から計算される第１のキー及び第２のキーは、各第１のキーのシリアルＣＢＣハッシュ及び各第２のキーのシリアルＣＢＣハッシュ、各第１のキー及び各第２のキーのＸＯＲ動作を介する等の上記したパラレル処理から計算された第１のキー及び第２のキーと結合される。
【００４５】
動作２１４は、第１のキー及び第２のキーからなるビッグキーをビッグキーストアに保存することを示している。ハッシュ処理されると、イメージをメモリアドレスに、ツリー等のデータ構造で保存することができ、データはそのメモリアドレスの位置でそのイメージをアクセスするために用いられる。例えば、アレイメモリ構造が用いられる場合に、データはそのアレイに対するインデックスとして役目を果たし、イメージはアレイのデータインデックスで保存される。
【００４６】
各キーが３２ビットからなる場合に、ビッグキーは６４ビットからなり、それによりビッグキーに対して２＾６４の可能な値が存在する。実施形態において、コリジョンの可能性（２つの異なるイメージタイルが同一のビッグキーに対応する）の一方、それが起きることの可能性は非常に小さいので、コリジョンを検出するために要求される処理リソースは１を検出し、コリジョンが無視されて正しくないイメージが使用されるかもしれない正しいタイルイメージを識別する利益を大きく上回る（いずれか２つのビッグキー間として２＾６４のうちで約１）。
【００４７】
動作２１６はイメージを符号化することを示している。実施形態において、これはＲＬＥ（ランレングス符号化）を介してイメージを符号化することを含む。実施形態において、これは異なるコードを有するイメージの異なる部分を符号化することを含む。例えば、医師によって用いられる医療のＸ線のようにイメージの一部が無損失品質で表示されなければならない場合に、無損失コーデックで符号化されても良い。イメージの他の部分は白い背景に黒のテキストでもよく、ＲＬＥアルゴリズムでそれを符号化することは最大量（及び無損失）によってその空間を減少させる。この場合に、それらの２つのコーデックをイメージの適当な部分について用いても良い。実施形態において、イメージのカラーチャネルが分けられ、ＲＧＢＡイメージがその個々の赤（Ｒ）、緑（Ｇ）、青（Ｂ）、アルファ（Ａ）カラーチャネルに分けられ、それらのチャネルの各々が個別に符号化される。
【００４８】
動作２１８はイメージを通信ネットワークを介してクライアントコンピュータに送信することを示している。これは、イメージがクライアントに既に送信されている場合には必要なく、クライアントは受け取ったイメージをキャッシュ格納する。この場合に、クライアントにはビッグキーを送信しても良い。クライアントは本動作を実行する装置によって維持されたハッシュテーブルと同様の受信したイメージのハッシュテーブルを維持しても良い。この状態において、ビッグキーを受信する場合に、クライアントはそのハッシュ構造に対するインデックスとしてビッグキーを使用し、対応するイメージを受信し、データではなくイメージを受信したようにイメージを処理することができる。
【００４９】
図３は上記したアクセラレーションを施したタイル差分技術を利用するＲＤＰ（リモートデスクトッププロトコル）を介して通信するクライアント及びサーバを示している。サーバ３０２はＲＤＰサーバ３０４、キーデータベース３０６、及び少なくとも１つのピットマップイメージ３０８を備えている。イメージ３０８は少なくとも１つのタイル３１０に分割され、各タイルはビットマップを含む。サーバ３０２は通信ネットワーク３１２を介してクライアント３１４と通信する。クライアント３１４はＲＤＰクライアント３１６、及びタイルデータベース３１８を備え、表示装置３２０に接続されている。
【００５０】
クライアント３１４とサーバ３０２との間のＲＤＰセッションにおいては、サーバ３０２が実行している処理に対応してサーバ３０２はネットワーク３１２を介してクライアントにイメージ情報を送信する。例えば、クライアント３１４はサーバでテキストエディターを実行している場合にＲＤＰセッションを有しても良い。クライアント３１４は現在の編集位置でテキストエディターに一連の文字を入力する、又は新しいファイルを開くようにサーバ３０２に命令を送信する。それらの命令はサーバ３０２で処理され、その結果の表示出力は表示装置３２０における表示のためにクライアント３１４に送り戻される。そのような実施形態において、イメージ３０８は所定の時点でテキストエディターのアプリケーションウインドウを含んでも良い。ユーザがアプリケーションウインドウのボトム近くに新しいテキストを加えるならば、アプリケーションウインドウのトップ位置が近い将来には変更しなくて良い。それで、イメージ３０８は複数のタイル３１０に分割されても良く、複数のイメージ３０８が時間を掛けてクライアント３１４に送信されるとき、各イメージは複数のタイル３１０として送信され、先行のタイル３１０全てとは異なるタイル３１０だけが送信される必要がある。クライアント３１４はタイルキャッシュ３１８で前に受信したタイル３１０をキャッシュ格納しても良く、タイル３１０が繰り返される場合に、サーバ３０２はタイル３０８自身ではなくそのタイルの指示（インディケーション）をクライアント３１４に送信しても良い。タイルキャッシュ３１８で現在キャッシュ格納されている第１のタイルは繰り返しのタイルとして同じ位置にある必要はない。例えば、テキスト編集セッションにおける新しい文書で大部分のタイルは何もなくホワイトスペースであり、そのため１つのピュアなホワイトタイルはそれらの複数のピュアなホワイトタイルの全てのために何回使用されても良い。
【００５１】
サーバ３０２がイメージ３０８についての要求を受信する第１の時間は第１のタイル３１０を取り扱い、ビッグキーを決定するためにそれをハッシュ処理する。サーバ３０２は図２に示された技術に応じてタイル３１０をハッシュ処理する場合に、そのキーは第１のキー及び第２のキーを含む。サーバ３０２はそのタイルを、タイル３１０が属するイメージのタイルの表示と共にＲＤＰクライアント３１６に送信するためにＲＤＰサーバ３０４を使用し、キーデータベース３０６にそのタイルに対するビッグキーを保存する。キーデータベースはツリー等の、整数を保存するための様々なデータ構造を備えても良い。
【００５２】
連続的なタイル３１０毎に、サーバ３０２はそのためのビッグキーを決定し、キーデータベース３０６に対してこれを照合する。キーデータベース３０６で一致がない場合に、同一のイメージを表すタイルがクライアント３１４に以前に送信されていないことを示し、サーバ３０２はクライアント３１４にそのタイルを送信し、以前通りにキーデータベース３０６にそれに対するビッグキーを保存する。クライアントはＲＤＰクライアント３１６でタイルを受信し、ビッグキーと共にタイルキャッシュ３１８にそれをキャッシュ格納する。ビッグキーは、ハッシュテーブルのインデックスとして役目を果たすように、タイルキャッシュ３１８にイメージを格納するためにキーとして用いられても良い。
【００５３】
キーデータベース３０６においてこのタイルに対する一致がある場合にそれはサーバ３０２がこのタイルと同じイメージを表すタイルを以前送信したことを意味する。従って、クライアント３１４にタイル３１０を送信するのではなく、ネットワークリソースを節約するために、サーバ３０２は、より少ない量のデータを含む、対応するビッグキーをクライアント３１４に送信する。第１のキー及び第２のキー各々が３２ビットのデータからなる場合に、ビッグキーは６４ビットからなる。クライアント３１４はＲＤＰクライアント３１６でそのキー及びデータを受信し、ＲＤＰクライアント３１６はタイルキャッシュ３２０において対応するタイルを格納するためにビッグキーを使用する。
【００５４】
ＲＤＰクライアント３１６はタイル自身を受信するか又は対応するビッグキーを受信してタイルキャッシュ３１８にそのタイルを捜し出すかのいずれかでタイルを所有する。タイル又はビッグキーと共に、ＲＤＰクライアント３１６はタイル３１０が含むイメージ３０８の一部の指示を受信する。ＲＤＰクライアント３１６はクライアント表示装置３２０でイメージの適当な部分にそのタイル３１０を表示する。
サンプル命令
【００５５】
次はベクトルプロセッサで実行されたとき図２の詳細な説明と同様に本開示の実施形態のようにイメージについて動作する、高レベルプログラミング言語Ｃタイプ構文におけるサンプル疑似コードを含む。
【００５６】
【数１】
0005750786.tif 000002
【００５７】
【数２】
0005750786.tif 000003
【００５８】
【数３】
0005750786.tif 000004
【００５９】
むすび
本開示は様々な図に示されたように好ましい態様について説明されたが、他の同様の態様が用いられても良く、又は変更及び追加が本開示から離れることなく本開示の同一の機能を実行するための説明した態様に施されても良いことは理解される。よって、本開示はいずれか１つの態様に限定されるべきではなく、むしろ特許請求の範囲に応じて広さ及び範囲において構成される。例えば、本明細書で説明した様々な処理についてはハードウエア又はソフトウエア、又は両方の組み合わせで実施することができる。よって、開示した実施形態の方法及び装置、又はそれの所定の態様又は所定の部分は、フロッピーディスク、ＣＤ−ＲＯＭ、ハードドライブ、又は他のマシーン読み取り可能な記憶媒体等の有形的表現媒体に具体化されたプログラムコード（すなわち、命令）の形をとっても良い。プログラムコードが、コンピュータ等のマシーンによって読み込まれて実行されるとき、そのマシーンは開示した実施形態を実行するために構成された装置となる。本明細書で明白に説明した特定の実施例に加えて、他の態様及び実施はこの技術分野の当業者には本明細書で開示された記載の事項から明らかである。明細書及び図示した実施例は単なる例として考慮されることを意図したものである。
【図１】
0005750786.tif 000005
【図２】
0005750786.tif 000006
【図３】
0005750786.tif 000007