特許第5750786号(P5750786)IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ マイクロソフト テクノロジー ライセンシング,エルエルシーの特許一覧

特許5750786SIMD命令を用いるRDPビットマップハッシュアクセラレーション
<>
  • 特許5750786-SIMD命令を用いるRDPビットマップハッシュアクセラレーション 図000005
  • 特許5750786-SIMD命令を用いるRDPビットマップハッシュアクセラレーション 図000006
  • 特許5750786-SIMD命令を用いるRDPビットマップハッシュアクセラレーション 図000007
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】5750786
(24)【登録日】2015年5月29日
(45)【発行日】2015年7月22日
(54)【発明の名称】SIMD命令を用いるRDPビットマップハッシュアクセラレーション
(51)【国際特許分類】
   G06F 15/00 20060101AFI20150702BHJP
【FI】
   G06F15/00 410B
【請求項の数】10
【全頁数】16
(21)【出願番号】特願2011-552058(P2011-552058)
(86)(22)【出願日】2010年2月5日
(65)【公表番号】特表2012-519327(P2012-519327A)
(43)【公表日】2012年8月23日
(86)【国際出願番号】US2010023256
(87)【国際公開番号】WO2010098959
(87)【国際公開日】20100902
【審査請求日】2013年2月4日
(31)【優先権主張番号】12/393,950
(32)【優先日】2009年2月26日
(33)【優先権主張国】US
(73)【特許権者】
【識別番号】314015767
【氏名又は名称】マイクロソフト テクノロジー ライセンシング,エルエルシー
(74)【代理人】
【識別番号】100107766
【弁理士】
【氏名又は名称】伊東 忠重
(74)【代理人】
【識別番号】100070150
【弁理士】
【氏名又は名称】伊東 忠彦
(74)【代理人】
【識別番号】100091214
【弁理士】
【氏名又は名称】大貫 進介
(72)【発明者】
【氏名】ナディム ワイ.アブド
(72)【発明者】
【氏名】ボイク アントン アルブ
【審査官】 漆原 孝治
(56)【参考文献】
【文献】 特開2002−251373(JP,A)
【文献】 特開平04−148372(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 15/00
(57)【特許請求の範囲】
【請求項1】
パラレル処理システムにおいてイメージを処理する方法であって、前記方法は、第1のランダム数、該第1のランダム数と異なる第2のランダム数、データ、第1のキー及び第2のキーを用い、
前記イメージを、各グループがビット幅に等しい前記イメージのビット数を含むように少なくとも1つのグループに分割するステップであって、前記ビット幅は、前記パラレル処理システムのプロセッサが一度に操作することが可能なビット数に対応する、ステップと、
グループ毎に、ハッシュ処理を実行するステップであって、
前記データの新たな値を、前記グループの値と、前記第1のランダム数によって乗算されかつ前記第2のランダム数と合計された前記データの現在の値との合計に等しく設定するステップと、
前記第1のキーの新たな値を、前記データによって修正された前記第1のキーの値に等しく設定するステップと、
前記第2のキーの新たな値を、前記データによって修正された前記第2のキーの値に等しく設定するステップと
を含む、ハッシュ処理を実行するステップと、
前記ハッシュを実行した後に、前記第1のキーと前記第2のキーとを備えるビッグキーをビッグキーストアに保存するステップと
を備える方法。
【請求項2】
前記イメージクライアントコンピュータに送信するステップを更に含む請求項1記載の方法。
【請求項3】
記イメージクライアントコンピュータに送信するステップは、前記ビッグキーが前記ビッグキーストア内の他のいずれのビッグキーにも一致しない判断したときに、前記イメージをクライアントコンピュータに送信することを含む、請求項2記載の方法。
【請求項4】
記ビッグキーが前記ビッグキーストア内の他のいずれかのビッグキーと一致すると判定したとき、前記ビッグキーをクライアントコンピュータに送信するステップを更に含む、請求項3記載の方法。
【請求項5】
前記イメージを前記クライアントコンピュータに送信する前に前記イメージを符号化するステップを更に含む請求項2記載の方法。
【請求項6】
前記第1のキーの新たな値を設定することは、前記第1のキーと前記データに対して排他的論理和操作を実行することによって前記データにより前記第1のキーを修正することを含み
前記第2のキーの新たな値を設定することは、前記第2のキーと前記データに対して排他的論理和操作を実行することによって前記データにより前記第2のキーを修正することを含む、請求項1記載の方法。
【請求項7】
前記イメージを、各グループが前記ビット幅に等しい前記イメージのビット数を含むように前記少なくとも1つのグループに分割した後、前記ビット幅によって分割されたイメージサイズがゼロ以外の残りのビット数を有するとき、シリアルCBC(暗号ブロック連鎖)アルゴリズムで前記残りのビット数をハッシュ処理してポスト第1のキー及びポスト第2のキーを生成、前記ポスト第1のキーに基づいて前記第1のキーを前記プロセッサにより決定、前記ポスト第2のキーに基づいて前記第2のキーを前記プロセッサにより決定するステップ、を更に含む請求項1記載の方法。
【請求項8】
前記イメージは画面スクレイピングを含む請求項1記載の方法。
【請求項9】
前記イメージはRDP(リモートデスクトッププロトコル)のタイルを含む請求項1記載の方法。
【請求項10】
イメージを処理するためのパラレル処理システムであって、当該パラレル処理システムは、第1のランダム数、該第1のランダム数と異なる第2のランダム数、データ、第1のキー及び第2のキーを用い
プロセッサ
前記プロセッサ
前記イメージを、各グループがビット幅に等しい前記イメージのビット数を含むように少なくとも1つのグループに分割するステップであって、前記ビット幅は、当該パラレル処理システムの前記プロセッサが一度に操作することが可能なビット数に対応する、ステップと、
グループ毎にハッシュ処理を実行するステップであって、
前記データの新たな値を、前記グループの値と、前記第1のランダム数によって乗算されかつ前記第2のランダム数と合計された前記データの現在の値との合計に等しく設定するステップと、
前記第1のキーの新たな値を、前記データによって修正された前記第1のキーの値に等しく設定するステップと、
前記第2のキーの新たな値を、前記データによって修正された前記第2のキーの値に等しく設定するステップと
を含む、ハッシュ処理を実行するステップと、
前記ハッシュを実行した後に、前記第1のキーと前記第2のキー備えるビッグキーをビッグキーストアに保存するステップと
を含む処理を実行させるプログラムを記憶したメモリと
を備える、システム
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、SIMD命令を用いるRDPビットマップハッシュアクセラレーションに関する。
【背景技術】
【0002】
コンピュータはかつては分離され、他のコンピュータとの最小の又は僅かのインターラクション(対話)を行ったけれども、今日のコンピュータはLAN(Local Area Networks)及びWAN(Wide Area Networks)等の通信ネットワークを介して他の広く様々なコンピュータとのインターラクションを行う。インターネットの広く拡がった発展で、コンピュータ間の接続は最も重要となり、また、多くの新しいアプリケーション及び技術をもたらしている。大きいスケールのネットワークの発展、及び低コストのパーソナルコンピュータの広く拡がった利用は、多くの人々が働き、インターラクションを行い、通信し、及びプレイする方法を機能的に変化させた。
【0003】
ネットワーキングの1つの増加する人気がある形式は一般に仮想コンピューティングシステムと称され、それはRDP(リモートデスクトッププロトコル)、ICA(インディペンデントコンピューティングアーキテクチャ)、更に、デスクトップ及びリモートクライアントを有する他のアプリケーションを共有するその他等のプロトコルを利用する。そのようなコンピューティングシステムは一般にクライアントからサーバへキーボードプレス及びマウスクリック又は選択を送信し、ネットワーク接続(例えば、インターネット)を介して他の方向に画面アップデートを中継する。そのため、実際に、アプリケーションのスクリーンショットがサーバ側で表れるようにクライアント装置がそのスクリーンショットを送られるだけの場合ユーザはそれらのマシーンがLANの一部として動作しているように体験する。
【0004】
グラフィックデータをクライアントに送る2つの共通の技術は、何かの描写方法をクライアント側でサブルーチンに示すグラフィックプリミティブ及び他の動作を送ることおよび、表示のためにクライアントにビットマップイメージを送ることである。プリミティブのシーケンスが非常に複雑であるときには、より複雑なプリミティブ動作の潜在的に長いシーケンスではなく、もっと簡単に表示することができるビットマップ描画を送ることが更に意味を持つかもしれない。しかしながら、何よりもビットストリーム圧縮器の限定及び限定されたネットワークバンド幅のために画面の完全なビットマップ描画を連続的に送るにはあまりにも高価になる。
【0005】
それらの問題を軽減するために、クライアントに送信されているフレーム(アプリケーションウインドウ等)はタイルに更に細かく分割することができる。それらのタイルはクライアント側でキャッシュされる。1つのタイルが2つのビットマップ間で繰り返されるとき、そのタイルをクライアントに再送信するよりはむしろ、サーバはクライアントに対して命令を送信してキャッシュしたタイルを表示させる。これはRDPセッションのバンド幅コストを大きく減らすことができ、特にRDPセッションでタイルは頻繁に繰り返される。しかしながら、これを行う場合、処理するリソースをキャッシュするタイルに充てなければならない。
【0006】
更に、タイリングアルゴリズムはキャッシュヒットの可能性を最大化するように度々実施される。タイルがより小さくする場合にはそれが2回(そのフレーム内又は将来のフレームで)用いられる可能性が高まる。しかも最小の有用タイルサイズがある。なぜならば、タイルがあまりにも小さいと2つのタイル間のキャッシュヒットから受けられる利点は小さいからである。
【0007】
それらのRDPビットマップキャッシングアルゴリズム及びタイル間の差(「タイル差異」)の検出は、RDP表示ストリームを、LAN、WAN又は無線LAN(wLAN)を介した送信にふさわしいレベルまで減少させるために、非常に重要である。それらのキャッシングアルゴリズムは一般に、ネットワークを介してクライアントに情報を送信するためにサーバに要求されたバンド幅の減少量に代えてサーバの(CPUの頻繁な)処理時間を犠牲にする。
【0008】
RDPビットマップキャッシングの主要な処理コストの1つはハッシュアルゴリズムを使用することである。ハッシュアルゴリズムは、より大きいイメージデータを、より小さいデータに変換するアルゴリズムである。この小さいデータはアレイ又はツリーのようなソートのデータ構造で、インデックスとして用いられる。いくつかのハッシュアルゴリズムはCBC(暗号ブロック連鎖)アルゴリズム、又はCBCアルゴリズムを実装している。しかしながら、このハッシュアルゴリズムで使用される処理時間はサーバのスケーラビリティを阻止してしまうことがある。サーバのネットワークバンド幅等の他のリソースが使い果たされる前に、全ての利用可能な処理リソースをRDPセッションが使用してしまうからである。また、この処理時間は、イメージフレームを符号化するために必要な時間を増加させる。なお、それらのフレームはこの時間レートで生成され、クライアントに送られる(フレームレート(FPS))。
【発明の概要】
【発明が解決しようとする課題】
【0009】
現在のパラレルプロセッサでハッシングアルゴリズムの速度を増加させることは難しい。なぜならば、CBCハッシュアルゴリズムは、通常、シリアルであり、それはシングル命令のデータ(SIMD)プロセッサのようなパラレル処理に好適でない。
【0010】
それらのISA(命令セットアーキテクチャ)のSIMD命令を有するベクトルプロセッサとして知られたクラスのプロセッサが存在する。NEHALEM(登録商標)プロセッサのようないくつかのインテル(登録商標)x86 ISAプロセッサにおけるSEE4.2命令等のSSE(Streaming SIMD extensions:ストリーミングSIMD拡張命令)はそれらのSIMD命令の形式である。それらのプロセッサは、一度にデータのかなりの部分を処理することができるので所定のタイプのデータの処理を高速化することができる。例えば、イメージが処理される場合に、1回に1つの画素について処理する代わりに、SIMDプロセッサは1つの命令でパラレルに数画素について処理することができる。命令自身を処理することのパフォーマンスを改善するだけでなく、メモリからデータをフェッチするために費やす時間を減少させることができる。
【0011】
SIMD命令は、圧縮のためにイメージデータを処理すること等のいくつかの種類の処理のパフォーマンスを改善するための機会を提供するが、一方、その処理を実行するために必要なアルゴリズム及び技術は、非ベクトルプロセッサの場合よりもかなり難しい。パラレルに処理できるように、データの流れに対して、またデータを組織化することに対して特別の注意を払う必要がある。結局のところ、新しい技術はRDPタイルにおけるハッシング動作においてパラレル処理を増加させるという利点がある。
【課題を解決するための手段】
【0012】
アクセラレーションのための本技術は、シリアルアルゴリズムが動作するほど多数のビットにてハッシュアルゴリズムをパラレルにコンピューティング処理し、それらの別々にコンピューティング処理したハッシュを組み合わせてそのイメージに対するハッシュを決定することによってパラレル処理を利用する。これは、コリジョンヒットレートを増加させることなく処理のために要求される時間をCPUにおいて大きく減少させる。そのレートでハッシュアルゴリズムに対する2つの異なる入力は同一の出力、少量だけを生成する。多くのRDPタイルハッシング状態においてコリジョンヒットレートにおけるこの少ない増加は容認することができる。
【0013】
本技術は、ハッシング速度における増加からの利点がある一方、コリジョンヒットレートにおける少しの増加を容認することができる限り、RDPタイル分類を越えた状態において有益である。このコリジョンヒットレートの増加は非常に少なく、ほぼ(100/2^192)%である。
【0014】
本技術は2つの場合にRDPについてかなりの進歩を示す。第一に、ビットマップタイルのハッシュをコンピューティング処理するためにCBCハッシュアルゴリズム又はCBCタイプのハッシュアルゴリズムを用いることができる。そのビットマップタイルが再度出現されるならば、ハッシュ機能は同一のキャッシュキーを生成し、サーバはそのビットマップを再送することを避けることによってバンド幅を節約することができる。
【0015】
第二に、RDPが全くの画面(スクリーン)スクレイピングを用いて動作している場合に(他のプログラムの表示出力からイメージデータを抽出する)、どのタイルがフレーム間で変化したかの素早い比較を行うために各新しいフレームについてイメージタイルのハッシュをコンピューティング処理するためにこの同じハッシュ機能を用いることができる。
【0016】
それらの両方の場合は、ハッシュ機能が通常、RDPスタックの最高のCPUコストの1つであり、RDPがいくつかの場合に限定されたCPUであるので、CPUコストを減少させることはRDPの性能を増大させることを可能にすることを意味する。
【0017】
この分野の当業者にとっては当然のことであるが、開示技術の1以上の様々な態様は本開示の本明細書で言及した態様をもたらす回路及び/又はプログラミングを含んで良いが、それに限定されない。その回路及び/又はプログラミングは実質的には、システムデザイナーの設計的選択に従って本明細書で言及した態様をもたらすように構成されたハードウエア、ソフトウエア、及び/又はファームウエアの組み合わせであることができる。
【0018】
上記したことは概要であり、当然、単純化、一般化 及び詳細の省略を含む。概要は単に示すだけであり、何らかに限定しているつもりではないことはこの分野の当業者には当然である。
【図面の簡単な説明】
【0019】
本明細書に応じたハッシュアクセラレーションのためのシステム、方法、及び媒体読み取り可能なコンピュータは次の添付図面を参照して更に詳細に説明される。
【0020】
図1】本明細書に説明されたハッシュアクセラレーションを実施することができる汎用コンピューティング環境を例示する図である。
図2】ハッシュアクセラレーションの動作処理を例示するブロック図である。
図3】上記したアクセラレーションを施したタイル差分技術を利用するRDP(リモートデスクトッププロトコル)を介して通信するクライアント及びサーバを示す図である。
【発明を実施するための形態】
【0021】
図1は本明細書に説明された技術を使用することができる汎用コンピューティング装置のブロック図である。コンピューティングシステム環境120は適切なコンピューティング環境の単なる一例であり、ここで開示した構成要件の使用又は機能の範囲について限定を示唆するつもりではない。そのコンピューティング環境120はコンピューティング環境120の例に示されたコンポーネントのいずれか1つ又は組み合わせについて依存関係又は要件を有するように解釈されるべきでない。いくつかの実施形態においては、示された様々なコンピューティング要素が本開示の特定の態様を実施例として説明するために構成された回路を含んでも良い。例えば、本開示に用いられた用語である回路はファームウエア又は複数のスイッチによって機能をなすように構成された専用のハードウエアコンポーネントを含むことができる。他の実施形態の例において、用語の回路は機能をなすために動作可能な論理回路を実施するソフトウエア命令によって構成される汎用処理ユニット、メモリ等を含むことができる。実施形態の例において、回路はハードウエアとソフトウエアとの組み合わせを含む場合に、実施者は論理回路を実施するソースコードを書いても良いし、そのソースコードをその汎用処理ユニットによって処理が可能なマシーン読み取り可能なコードにコンパイルしても良い。この技術分野の当業者には、技術の状態がハードウエア、ソフトウエア、又はハードウエアとソフトウエアとの組み合わせの間に少しの差異があることに展開してしまうことが当然であるので、特定の機能を達成するためにハードウエアとソフトウエアとの間の選択は実施者に残された設計上の選択事項である。特に、この技術分野の当業者には、ソフトウエア処理を同等のハードウエア構成に変換することができ、ハードウエア構成をそれ自身、同等のソフトウエア処理に変換することができることは当然のことである。よって、ハードウエア実施とソフトウエア実施との間の選択は設計上の選択事項であり、実施者に残されている。
【0022】
コンピュータ141は一般に様々なコンピュータ読み取り可能な媒体を含む。コンピュータ読み取り可能な媒体はコンピュータ141がアクセスすることができる媒体であっても良く、揮発性媒体及び不揮発性媒体、リムーバブル媒体及び非リムーバブル媒体の両方を含む。システムメモリ122はROM(リードオンリメモリ)123及びRAM(ランダムアクセスメモリ)160等の揮発性メモリ及び/又は不揮発性メモリの形でコンピュータ記憶媒体を含む。スタートアップ期間等にコンピュータ141内の要素間の情報を転送する手助けとなる基本ルーチンを含む基本入力/出力システム(BIOS)124は、通常、ROM123に保存される。RAM160は通常、処理ユニット159に直ちにアクセス可能及び/又はそれによって現在動作されているデータ及び/又はプログラムモジュールを含む。例として、限定されないが、図1はオペレーティングシステム125、アプリケーションプログラム126、他のプログラムモジュール127、及びプログラムデータ128を示している。
【0023】
また、コンピュータ141は他のリムーバブル/非リムーバブル、揮発性/不揮発性コンピュータ記憶媒体を含んでも良い。単なる例として、図1は非リムーバブルの不揮発性磁気媒体について読み取り又は書き込みするハードディスクドライブ138、リムーバブルの不揮発性磁気ディスク154について読み取り又は書き込みする磁気ディスクドライブ139、及びCD−ROM又は他の光媒体等のリムーバブルの不揮発性光ディスク153について読み取り又は書き込みする光ディスクドライブ140を示している。動作環境の例において使用することができる他のリムーバブル/非リムーバブル、揮発性/不揮発性コンピュータ記憶媒体は、限定されないが、磁気テープカセット、フラッシュメモリカード、ディジタルバーサタイルディスク、ディジタルビデオテープ、半導体RAM、半導体ROM等を含む。ハードディスクドライブ138は通常、インターフェース134等の非リムーバブルメモリインターフェースを介してシステムバス121に接続され、磁気ディスクドライブ139は通常、インターフェース135等のリムーバブルメモリインターフェースによってシステムバス121に接続されている。
【0024】
上記しかつ図1に示したドライブ及びそれらに関連したコンピュータ記憶媒体はコンピュータ読み取り可能な命令、データ構造、プログラムモジュール及びコンピュータ141のための他のデータの記憶を提供する。例えば、図1において、ハードディスクドライブ138は、オペレーティングシステム158、アプリケーションプログラム157、他のプログラムモジュール156、及びプログラムデータ155を記憶するとして示されている。それらのコンポーネントは、オペレーティングシステム125、アプリケーションプログラム126、他のプログラムモジュール127、及びプログラムデータ128と同じ又は異なっても良い。オペレーティングシステム158、アプリケーションプログラム157、他のプログラムモジュール156、及びプログラムデータ155は少なくとも異なるコピーであることを示すためにここでは異なる符号で与えられている。ユーザはキーボード151、一般にマウスと呼ばれるポインティングデバイス152、トラックボール又はタッチパッド等の入力装置を介してコンピュータ141に命令及び情報を入力することができる。他の入力装置(図示せず)としてはマイクロホン、ジョイスティック、ゲームパッド、衛星放送受信アンテナ、スキャナー等を含むことができる。それらの入力装置及び他の入力装置は、システムバスに接続されているユーザ入力インターフェース136を介して処理ユニット159に度々接続されるが、パラレルポート、ゲームポート又はUSB(ユニバーサルシリアルバス)等の他のインターフェース及びバス構造によって接続されても良い。また、モニタ142又は他の種類の表示装置は、ビデオインターフェース132等のインターフェースを介してシステムバス121に接続される。モニタに加えて、コンピュータはスピーカ144及びプリンタ143等の他の周辺出力装置を含んでも良く、それらは出力周辺インターフェース133を介して接続することができる。
【0025】
コンピュータ141はリモートコンピュータ146等の1以上のリモートコンピュータに論理結合を用いてネットワーク化された環境で動作することができる。リモートコンピュータ146は、パーソナルコンピュータ、サーバ、ルータ、ネットワークPC、ピアデバイス又は他の共通のネットワークノードであっても良く、図1にはメモリ記憶装置147だけが示されているが、通常、コンピュータ141と関連して上述された多くの要素又は全ての要素を含む。図1に示された論理結合はLAN(ローカルエリアネットワーク)145及びWAN(ワイドエリアネットワーク)149を含むが、他のネットワークを含んでも良い。そのようなネットワーキング環境はオフィス、企業規模のコンピュータネットワーク、イントラネット及びインターネットにおいて通常である。
【0026】
LANネットワーキング環境において使用されるとき、コンピュータ141はネットワークインターフェース又はアダプタ137を介してLAN145に接続される。WANネットワーキング環境において使用されるとき、コンピュータ141は通常、インターネット等のWAN149を介して通信を確立するためにモデム150又は他の手段を含む。内部又は外部に備えることができるモデム150はユーザ入力インターフェース136、又は他の適当な機構を介してシステムバス121に接続されても良い。ネットワーク化された環境において、コンピュータ141に関連して示されたプログラムモジュール、又はその一部はリモートメモリ記憶装置に保存されても良い。例として、限定されないが、図1はメモリ装置147に属するとしてリモートアプリケーションプログラム148を示している。示されたネットワーク接続は例であり、コンピュータ間の通信リンクを確立する他の手段が用いられても良いことは当然である。
【0027】
図2はハッシュアクセラレーションの動作処理を例示している。シリアルハッシング処理は1度にイメージデータの1つのDWORD(ダブルワード;多くのシステムアーキテクチャでは32ビットである)を取り扱い、そのイメージの前で開始し、その後で動作する。シリアルハッシング処理はそのイメージについての1つのキーを演算し、それは処理されるイメージの新たなDWORD各々に基づいて更新される。それに対して、本動作処理の例は1度に複数のDWORDについて動作する。実施形態において、DWORDが32ビットからなり、プロセッサが同時に128ビットについて動作することができる場合に、データの4つのDWORDであることができる。処理はそのイメージに対して4つの部分キーを保持し、その1つがパラレルに動作される各DWORDに対応し、イメージの全てが最終キーを生成するために処理されると、それらの4つの部分キーを結合する。
【0028】
オプション動作202は第1のランダム値及び第2のランダム値を選択することを示し、第1のランダム値は第2のランダム値と異なる。
【0029】
オプション動作204はゼロに等しいチェックサム、データ、第1のキー及び第2のキーの各々を選択することを示している。いずれかの実施形態においては、チェックサム、データ、第1のキー及び第2のキーは、本動作が開始する前ではゼロに等しく、それによりこの点でそれらをゼロにする必要はない。その技術は合計の実行を継続するためにそれらの4つの数を用いる場合に、それらをゼロに設定することによって動作が初期化されても良い。チェックサム及びデータは第1のキー及び第2のキーを決定するために用いられる内部変数として用いることができる。第1のキー及び第2のキーはイメージについてのビッグキーを備えても良い。ビッグキーは、イメージ自身を調べるために、サーバがクライアントにイメージを送ったか否かを調べるように、又はクライアントが既に受け取ったイメージの代わりにビッグキーを受け取るように、イメージ又はそれについての参照を調べるために後で用いられる。それらの2つのコンポーネント、第1のキー及び第2のキーとしてビッグキーを計算し、そして、それらを結合することがモノリシックのビッグキーを計算するよりも速い。
【0030】
動作206はイメージを少なくとも1つのグループにグループ化することを示し、各グループはビット幅に等しいイメージのビット数からなる。プロセッサは1度にデータの1ビット以上について動作する。例えば、128ビットプロセッサは1度にデータの128ビッドについて動作することができる。このプロセッサは128ビットの「ビット幅」を有する。その128ビットは128ビットの数を表す1つ等の同一のデータ構造である必要はない。むしろ、128ビットは4つに分かれた32ビットの整数、又は8つに分かれた16ビットの整数等の多数のピースデータを備える。そのような状態では、命令は、4つの32ビット整数のグループについて動作が行われるときその動作の結果(倍数、論理シフト等)は128ビットにおいて隣接する整数にオーバフローしない。
【0031】
実施形態において、イメージは画面スクレイピングを備え、画面スクレイピングは他のプログラムの表示出力からデータを取り出すことを含む。このデータは他のプログラムによって出力装置で表示されるべきものであったので、それを解析することの助けとなるドキュメンテーション又は構造を一般的に欠いている。
【0032】
実施形態において、イメージはRDP(リモートデスクトッププロトコル)においてタイルを備え、そのタイルはビットマップを含む。タイルはフレームのサブセットを備えても良く、フレームは通常、アプリケーションウインドウを備える。一般的な実施形態において、フレームは複数の長方形のタイルに分割され、変化されたそれらのタイルだけがクライアントに送られることが必要である。
【0033】
実施形態において、イメージが配列境界に配列されていない場合に、第1のビット境界の前のイメージの最初の数ビットはシリアルCBC(暗号ブロック連鎖)アルゴリズムでハッシュ処理され、事前の第1のキー及び事前の第2のキーを生成する。例えば、本動作がパラレルに128ビットで動作し、イメージが128ビットの境界に配列され、そのイメージの最初の128ビット境界の前に生じているそのイメージの56ビットである場合に、それらの56ビットがシリアルCBCアルゴリズムでハッシュ処理され、その結果の事前の第1のキー及び事前の第2のキーはシリアルCBCアルゴリズムを介して次の動作のその結果の第1のキー及び第2のキーと各々結合される。
【0034】
動作208はグループ毎に、チェックサムにグループを加算してチェックサムを設定し、第1のランダム数によって掛け算され、更に第2のランダム数と合計されたデータとグループとの合計となるようにデータを設定し、第1のキーをデータによって修正された第1のキーに設定し、第2のキーをデータによって修正された第2のキーに第2のキーを設定することを含むハッシュを実行することを示している。
【0035】
実施形態において、第1のキーは、第1のキー及びデータについて排他的論理和(exclusive-or)動作を行うことによりデータによって修正され、第2のキーは、第2のキー及びデータについて排他的論理和動作を行うことによりデータによって修正される。排他的論理和はビット単位の動作であり、2つの入力のいずれか一方が1であれば、2つの入力の結果は1である。例えば、ここで、^は排他的論理和を表し、0^0=0,0^1=1,1^0=1,1^1=0である。
【0036】
イメージは開始位置及び終了位置を有するように考えられても良く、実施形態において、グループ毎に実行される動作は、グループ毎に未だ実行されていない、開始位置に最も近いグループに対して先ず実行される。すなわち、本技術はイメージを通して連続的に処理し、1度に1つのグループのビットを取り扱い、イメージの終了に達するまで、次のグループのビットに対して同じことする前に処理する。
【0037】
実施形態において、ハッシュはCBC(暗号ブロック連鎖)ハッシュを含む。
【0038】
オプション動作210は第1のキーのビットの各DWORDサイズに基づいてDWORD第1のキーを設定し、第2のキーのビットの各DWORDサイズに基づいてDWORD第2のキーを設定することを示している。
【0039】
第1のキー及び第2のキーの各々はプロセッサのビット幅より少ないビットを備える場合に、部分的なキーが計算される。イメージの全てが処理されているとき、それらの部分的なキーは完全な第1のキー及び第2のキーを決定するために用いられる。第1のキー及び第2のキーの各々が32ビットを有し、そのビット幅が128ビットである場合の実施形態を取るとする。この実施形態において、128ビットのイメージは同期して処理され、4つの32ビットの部分的な第1のキー及び4つの32ビットの部分的な第2のキーを生成する。イメージ全体が処理されたときに、それらの4つの部分的なキーの各々はフルキー、すなわちDWORD第1のキー及びDWORD第2のキーを決定するために用いられる。
【0040】
実施形態において、その4つの部分的な第1のキーはそれら一緒に排他的論理和(XOR)をとることによりDWORD第1のキーを決定するために用いられる。4つの部分的な第1のキーはKey1[0],Key1[1],Key1[2],Key1[3]のように表現される場合に、この動作はKey1[0]^Key1[1]^Key1[2]^Key1[3]のように論理的に表現されることができる。
【0041】
実施形態において、4つの部分的な第1のキーはシリアルCBCハッシュアルゴリズムを用いてそれらを結合することによりDWORD第1のキーを決定するために用いられる。実施形態において、Key1[0]はKey1[1]とCBCハッシュ処理され、その結果はKey1[2]とCBCハッシュ処理され、その結果はKey1[3]とCBCハッシュ処理される。
【0042】
オプション動作212は、ビット幅によって分割されたイメージサイズがゼロ以外の残りのビット数を有するとき、シリアルアルゴリズムによってその残りのビット数をハッシュ処理してポスト第1のキー及びポスト第2のキーを生成し、そのポスト第1のキーに基づいて第1のキーを決定し、そのポスト第2のキーに基づいて第2のキーを決定することを示している。イメージがビット幅によって均等に分けることができるビット数を有する場合に、上記した動作説明のように一連のパラレル動作がイメージのビット毎に行われても良い。しかしながら、イメージがビット幅によって均等に分けることができないビット数を有する場合には、上記のパラレルハッシングとは対照的に、それらの最終ビットの従来のシリアルハッシングが行われても良い。結果として生じるポスト第1のキー及びポスト第2のキーは、第1のキー及びポスト第1のキーについてシリアルCBCハッシュ処理の実行結果に第1のキーを設定すること、また、第2のキー及びポスト第2のキーについてシリアルCBCハッシュ処理の実行結果に第2のキーを設定すること等によって、第1のキー及び第2のキーと結合されても良い。
【0043】
実施形態において、イメージは終了位置を有し、イメージの一部は残りのビット数よりその終了位置に近くない。すなわち、残りのビットはイメージの最終ビットであると考えられ、それらは、全ての処理ビットが一度にビットのビット幅数をパラレル方式で処理された後、シリアル方式で処理される。
【0044】
実施形態において、このシリアル処理から計算される第1のキー及び第2のキーは、各第1のキーのシリアルCBCハッシュ及び各第2のキーのシリアルCBCハッシュ、各第1のキー及び各第2のキーのXOR動作を介する等の上記したパラレル処理から計算された第1のキー及び第2のキーと結合される。
【0045】
動作214は、第1のキー及び第2のキーからなるビッグキーをビッグキーストアに保存することを示している。ハッシュ処理されると、イメージをメモリアドレスに、ツリー等のデータ構造で保存することができ、データはそのメモリアドレスの位置でそのイメージをアクセスするために用いられる。例えば、アレイメモリ構造が用いられる場合に、データはそのアレイに対するインデックスとして役目を果たし、イメージはアレイのデータインデックスで保存される。
【0046】
各キーが32ビットからなる場合に、ビッグキーは64ビットからなり、それによりビッグキーに対して2^64の可能な値が存在する。実施形態において、コリジョンの可能性(2つの異なるイメージタイルが同一のビッグキーに対応する)の一方、それが起きることの可能性は非常に小さいので、コリジョンを検出するために要求される処理リソースは1を検出し、コリジョンが無視されて正しくないイメージが使用されるかもしれない正しいタイルイメージを識別する利益を大きく上回る(いずれか2つのビッグキー間として2^64のうちで約1)。
【0047】
動作216はイメージを符号化することを示している。実施形態において、これはRLE(ランレングス符号化)を介してイメージを符号化することを含む。実施形態において、これは異なるコードを有するイメージの異なる部分を符号化することを含む。例えば、医師によって用いられる医療のX線のようにイメージの一部が無損失品質で表示されなければならない場合に、無損失コーデックで符号化されても良い。イメージの他の部分は白い背景に黒のテキストでもよく、RLEアルゴリズムでそれを符号化することは最大量(及び無損失)によってその空間を減少させる。この場合に、それらの2つのコーデックをイメージの適当な部分について用いても良い。実施形態において、イメージのカラーチャネルが分けられ、RGBAイメージがその個々の赤(R)、緑(G)、青(B)、アルファ(A)カラーチャネルに分けられ、それらのチャネルの各々が個別に符号化される。
【0048】
動作218はイメージを通信ネットワークを介してクライアントコンピュータに送信することを示している。これは、イメージがクライアントに既に送信されている場合には必要なく、クライアントは受け取ったイメージをキャッシュ格納する。この場合に、クライアントにはビッグキーを送信しても良い。クライアントは本動作を実行する装置によって維持されたハッシュテーブルと同様の受信したイメージのハッシュテーブルを維持しても良い。この状態において、ビッグキーを受信する場合に、クライアントはそのハッシュ構造に対するインデックスとしてビッグキーを使用し、対応するイメージを受信し、データではなくイメージを受信したようにイメージを処理することができる。
【0049】
図3は上記したアクセラレーションを施したタイル差分技術を利用するRDP(リモートデスクトッププロトコル)を介して通信するクライアント及びサーバを示している。サーバ302はRDPサーバ304、キーデータベース306、及び少なくとも1つのピットマップイメージ308を備えている。イメージ308は少なくとも1つのタイル310に分割され、各タイルはビットマップを含む。サーバ302は通信ネットワーク312を介してクライアント314と通信する。クライアント314はRDPクライアント316、及びタイルデータベース318を備え、表示装置320に接続されている。
【0050】
クライアント314とサーバ302との間のRDPセッションにおいては、サーバ302が実行している処理に対応してサーバ302はネットワーク312を介してクライアントにイメージ情報を送信する。例えば、クライアント314はサーバでテキストエディターを実行している場合にRDPセッションを有しても良い。クライアント314は現在の編集位置でテキストエディターに一連の文字を入力する、又は新しいファイルを開くようにサーバ302に命令を送信する。それらの命令はサーバ302で処理され、その結果の表示出力は表示装置320における表示のためにクライアント314に送り戻される。そのような実施形態において、イメージ308は所定の時点でテキストエディターのアプリケーションウインドウを含んでも良い。ユーザがアプリケーションウインドウのボトム近くに新しいテキストを加えるならば、アプリケーションウインドウのトップ位置が近い将来には変更しなくて良い。それで、イメージ308は複数のタイル310に分割されても良く、複数のイメージ308が時間を掛けてクライアント314に送信されるとき、各イメージは複数のタイル310として送信され、先行のタイル310全てとは異なるタイル310だけが送信される必要がある。クライアント314はタイルキャッシュ318で前に受信したタイル310をキャッシュ格納しても良く、タイル310が繰り返される場合に、サーバ302はタイル308自身ではなくそのタイルの指示(インディケーション)をクライアント314に送信しても良い。タイルキャッシュ318で現在キャッシュ格納されている第1のタイルは繰り返しのタイルとして同じ位置にある必要はない。例えば、テキスト編集セッションにおける新しい文書で大部分のタイルは何もなくホワイトスペースであり、そのため1つのピュアなホワイトタイルはそれらの複数のピュアなホワイトタイルの全てのために何回使用されても良い。
【0051】
サーバ302がイメージ308についての要求を受信する第1の時間は第1のタイル310を取り扱い、ビッグキーを決定するためにそれをハッシュ処理する。サーバ302は図2に示された技術に応じてタイル310をハッシュ処理する場合に、そのキーは第1のキー及び第2のキーを含む。サーバ302はそのタイルを、タイル310が属するイメージのタイルの表示と共にRDPクライアント316に送信するためにRDPサーバ304を使用し、キーデータベース306にそのタイルに対するビッグキーを保存する。キーデータベースはツリー等の、整数を保存するための様々なデータ構造を備えても良い。
【0052】
連続的なタイル310毎に、サーバ302はそのためのビッグキーを決定し、キーデータベース306に対してこれを照合する。キーデータベース306で一致がない場合に、同一のイメージを表すタイルがクライアント314に以前に送信されていないことを示し、サーバ302はクライアント314にそのタイルを送信し、以前通りにキーデータベース306にそれに対するビッグキーを保存する。クライアントはRDPクライアント316でタイルを受信し、ビッグキーと共にタイルキャッシュ318にそれをキャッシュ格納する。ビッグキーは、ハッシュテーブルのインデックスとして役目を果たすように、タイルキャッシュ318にイメージを格納するためにキーとして用いられても良い。
【0053】
キーデータベース306においてこのタイルに対する一致がある場合にそれはサーバ302がこのタイルと同じイメージを表すタイルを以前送信したことを意味する。従って、クライアント314にタイル310を送信するのではなく、ネットワークリソースを節約するために、サーバ302は、より少ない量のデータを含む、対応するビッグキーをクライアント314に送信する。第1のキー及び第2のキー各々が32ビットのデータからなる場合に、ビッグキーは64ビットからなる。クライアント314はRDPクライアント316でそのキー及びデータを受信し、RDPクライアント316はタイルキャッシュ320において対応するタイルを格納するためにビッグキーを使用する。
【0054】
RDPクライアント316はタイル自身を受信するか又は対応するビッグキーを受信してタイルキャッシュ318にそのタイルを捜し出すかのいずれかでタイルを所有する。タイル又はビッグキーと共に、RDPクライアント316はタイル310が含むイメージ308の一部の指示を受信する。RDPクライアント316はクライアント表示装置320でイメージの適当な部分にそのタイル310を表示する。
サンプル命令
【0055】
次はベクトルプロセッサで実行されたとき図2の詳細な説明と同様に本開示の実施形態のようにイメージについて動作する、高レベルプログラミング言語Cタイプ構文におけるサンプル疑似コードを含む。
【0056】
【数1】
【0057】
【数2】
【0058】
【数3】
【0059】
むすび
本開示は様々な図に示されたように好ましい態様について説明されたが、他の同様の態様が用いられても良く、又は変更及び追加が本開示から離れることなく本開示の同一の機能を実行するための説明した態様に施されても良いことは理解される。よって、本開示はいずれか1つの態様に限定されるべきではなく、むしろ特許請求の範囲に応じて広さ及び範囲において構成される。例えば、本明細書で説明した様々な処理についてはハードウエア又はソフトウエア、又は両方の組み合わせで実施することができる。よって、開示した実施形態の方法及び装置、又はそれの所定の態様又は所定の部分は、フロッピーディスク、CD−ROM、ハードドライブ、又は他のマシーン読み取り可能な記憶媒体等の有形的表現媒体に具体化されたプログラムコード(すなわち、命令)の形をとっても良い。プログラムコードが、コンピュータ等のマシーンによって読み込まれて実行されるとき、そのマシーンは開示した実施形態を実行するために構成された装置となる。本明細書で明白に説明した特定の実施例に加えて、他の態様及び実施はこの技術分野の当業者には本明細書で開示された記載の事項から明らかである。明細書及び図示した実施例は単なる例として考慮されることを意図したものである。
図1
図2
図3