(57)【要約】【課題】アプリケーションによって制御された早期書込み確認応答をサポートするメモリ・アクセス・ブローカ・システムを提供する。【解決手段】１つまたは複数の発行元アプリケーションによって検査するために、失敗した早期書込み確認応答（ＥＷＡＣＫ）書き込み要求がメモリ・アクセス・ブローカによって記録されるように、メモリ・アクセス・ブローカが選択的に有効化され、１つまたは複数の発行元アプリケーションへのＥＷＡＣＫ動作および失敗したＥＷＡＣＫ書き込み要求の通知を容易にしてよい。【選択図】図１
2020537227.tif 000002
【特許請求の範囲】
【請求項１】
プロセッサによって、早期書込み確認応答をサポートするメモリ・アクセス・ブローカを使用するための方法であって、
１つまたは複数の発行元アプリケーションによって検査するために、失敗した早期書込み確認応答（ＥＷＡＣＫ）書き込み要求がメモリ・アクセス・ブローカによって記録されるように、前記メモリ・アクセス・ブローカを選択的に有効化し、前記１つまたは複数の発行元アプリケーションへのＥＷＡＣＫ動作および前記失敗したＥＷＡＣＫ書き込み要求の通知を容易にすることを含んでいる、方法。
【請求項２】
書き込み要求の実行時に前記メモリ・アクセス・ブローカを選択的に有効化または無効化することをさらに含んでおり、前記メモリ・アクセス・ブローカが、メモリ・バス・マスタとメモリ・コントローラの間の中間ブローカとして機能する、請求項１に記載の方法。
【請求項３】
前記失敗した書き込み要求を、前記メモリ・アクセス・ブローカに関連付けられた１つまたは複数のＥＷＡＣＫレジスタに記録することをさらに含んでいる、請求項１に記載の方法。
【請求項４】
前記メモリ・アクセス・ブローカによって、メモリ・バス・マスタから書き込み要求を受信することと、
前記メモリ・アクセス・ブローカによって、前記メモリ・バス・マスタから受信された前記書き込み要求をメモリ・コントローラに発行することと
をさらに含んでいる、請求項１に記載の方法。
【請求項５】
前記メモリ・アクセス・ブローカによって、前記メモリ・コントローラからＷＡＣＫ応答を受信すること、または
前記メモリ・アクセス・ブローカによって、前記メモリ・コントローラから受信された前記ＷＡＣＫ応答を前記メモリ・バス・マスタに発行すること
をさらに含んでいる、請求項１に記載の方法。
【請求項６】
前記メモリ・アクセス・ブローカによって、ＥＷＡＣＫ書き込み要求ごとに書き込み要求識別子（ＩＤ）を生成することと、
前記生成された書き込み要求ＩＤをキューに配置することと
をさらに含んでいる、請求項１に記載の方法。
【請求項７】
前記メモリ・アクセス・ブローカによって、メモリ・コントローラから受信されたＷＡＣＫ応答を前記キューから取り出された前記生成済みの書き込み要求ＩＤと比較することをさらに含んでいる、請求項６に記載の方法。
【請求項８】
前記キューから取り出された前記生成済みの書き込み要求ＩＤが、前記メモリ・コントローラから受信された前記ＷＡＣＫ応答に一致しないということを決定したときに、前記メモリ・アクセス・ブローカによって、１つまたは複数のＥＷＡＣＫレジスタ内で失敗したＥＷＡＣＫ書き込み要求を示すことと、
前記１つまたは複数の発行元アプリケーションによって、前記１つまたは複数のＥＷＡＣＫレジスタに記録された前記失敗したＥＷＡＣＫ書き込み要求を識別することと
をさらに含んでいる、請求項７に記載の方法。
【請求項９】
前記１つまたは複数のＥＷＡＣＫレジスタ内で示された前記失敗したＥＷＡＣＫ書き込み要求を識別したときに、前記１つまたは複数の発行元アプリケーションに対して各書き込み要求を再発行することを要求することをさらに含んでいる、請求項８に記載の方法。
【請求項１０】
早期書込み確認応答をサポートするメモリ・アクセス・ブローカを使用するためのシステムであって、
実行可能な命令を含む１つまたは複数のコンピュータを備えており、前記命令が、実行された場合に、前記システムに、
１つまたは複数の発行元アプリケーションによって検査するために、失敗した早期書込み確認応答（ＥＷＡＣＫ）書き込み要求がメモリ・アクセス・ブローカによって記録されるように、前記メモリ・アクセス・ブローカを選択的に有効化し、前記１つまたは複数の発行元アプリケーションへのＥＷＡＣＫ動作および前記失敗したＥＷＡＣＫ書き込み要求の通知を容易にすることを実行させる、システム。
【請求項１１】
前記実行可能な命令が、書き込み要求の実行時に前記メモリ・アクセス・ブローカを選択的に有効化または無効化し、前記メモリ・アクセス・ブローカが、メモリ・バス・マスタとメモリ・コントローラの間の中間ブローカとして機能する、請求項１０に記載のシステム。
【請求項１２】
前記実行可能な命令が、前記失敗した書き込み要求を、前記メモリ・アクセス・ブローカに関連付けられた１つまたは複数のＥＷＡＣＫレジスタに記録する、請求項１０に記載のシステム。
【請求項１３】
前記実行可能な命令が、
前記メモリ・アクセス・ブローカによって、メモリ・バス・マスタから書き込み要求を受信し、
前記メモリ・アクセス・ブローカによって、前記メモリ・バス・マスタから受信された前記書き込み要求をメモリ・コントローラに発行する、請求項１０に記載のシステム。
【請求項１４】
前記実行可能な命令が、
前記メモリ・アクセス・ブローカによって、前記メモリ・コントローラからＷＡＣＫ応答を受信するか、または
前記メモリ・アクセス・ブローカによって、前記メモリ・コントローラから受信された前記ＷＡＣＫ応答を前記メモリ・バス・マスタに発行する、請求項１０に記載のシステム。
【請求項１５】
前記実行可能な命令が、
前記メモリ・アクセス・ブローカによって、ＥＷＡＣＫ書き込み要求ごとに書き込み要求識別子（ＩＤ）を生成し、
前記生成された書き込み要求ＩＤをキューに配置する、請求項１０に記載のシステム。
【請求項１６】
前記実行可能な命令が、前記メモリ・アクセス・ブローカによって、メモリ・コントローラから受信されたＷＡＣＫ応答を前記キューから取り出された前記生成済みの書き込み要求ＩＤと比較する、請求項１１に記載のシステム。
【請求項１７】
前記実行可能な命令が、
前記キューから取り出された前記生成済みの書き込み要求ＩＤが、前記メモリ・コントローラから受信された前記ＥＷＡＣＫ応答に一致しないということを決定したときに、前記メモリ・アクセス・ブローカによって、１つまたは複数のＥＷＡＣＫレジスタ内で失敗したＥＷＡＣＫ書き込み要求を示し、
前記１つまたは複数の発行元アプリケーションによって、前記１つまたは複数のＥＷＡＣＫレジスタに記録された前記失敗したＥＷＡＣＫ書き込み要求を識別し、
前記１つまたは複数のＥＷＡＣＫレジスタ内で示された前記失敗したＥＷＡＣＫ書き込み要求を識別したときに、前記１つまたは複数の発行元アプリケーションに対して各書き込み要求を再発行することを要求する、請求項１６に記載のシステム。
【請求項１８】
プロセッサによる、構造化されていないテキスト・データからの対人関係の発見および解析のためのコンピュータ・プログラム製品であって、前記コンピュータ・プログラム製品が、コンピュータ可読プログラム・コード部分が格納されている非一過性コンピュータ可読記憶媒体を備えており、前記コンピュータ可読プログラム・コード部分が、
１つまたは複数の発行元アプリケーションによって検査するために、失敗した早期書込み確認応答（ＥＷＡＣＫ）書き込み要求がメモリ・アクセス・ブローカによって記録されるように、前記メモリ・アクセス・ブローカを選択的に有効化し、前記１つまたは複数の発行元アプリケーションへのＥＷＡＣＫ動作および前記失敗したＥＷＡＣＫ書き込み要求の通知を容易にする実行可能な部分を含んでいる、コンピュータ・プログラム製品。
【請求項１９】
書き込み要求の実行時に前記メモリ・アクセス・ブローカを選択的に有効化または無効化する実行可能な部分をさらに含んでおり、前記メモリ・アクセス・ブローカが、メモリ・バス・マスタとメモリ・コントローラの間の中間ブローカとして機能する、請求項１８に記載のコンピュータ・プログラム製品。
【請求項２０】
前記失敗した書き込み要求を、前記メモリ・アクセス・ブローカに関連付けられた１つまたは複数のＥＷＡＣＫレジスタに記録する実行可能な部分をさらに含んでいる、請求項１８に記載のコンピュータ・プログラム製品。
【請求項２１】
前記メモリ・アクセス・ブローカによって、メモリ・バス・マスタから書き込み要求を受信するか、
前記メモリ・アクセス・ブローカによって、前記メモリ・バス・マスタから受信された前記書き込み要求をメモリ・コントローラに発行するか、
前記メモリ・アクセス・ブローカによって、前記メモリ・コントローラからＷＡＣＫ応答を受信するか、または
前記メモリ・アクセス・ブローカによって、前記メモリ・コントローラから受信された前記ＷＡＣＫ応答を前記メモリ・バス・マスタに発行する
実行可能な部分をさらに含んでいる、請求項１８に記載のコンピュータ・プログラム製品。
【請求項２２】
前記メモリ・アクセス・ブローカによって、ＥＷＡＣＫ書き込み要求ごとに書き込み要求識別子（ＩＤ）を生成し、
前記生成された書き込み要求ＩＤをキューに配置する
実行可能な部分をさらに含んでいる、請求項１８に記載のコンピュータ・プログラム製品。
【請求項２３】
前記メモリ・アクセス・ブローカによって、メモリ・コントローラから受信されたＷＡＣＫ応答を前記キューから取り出された前記生成済みの書き込み要求ＩＤと比較する実行可能な部分をさらに含んでいる、請求項２２に記載のコンピュータ・プログラム製品。
【請求項２４】
前記キューから取り出された前記生成済みの書き込み要求ＩＤが、前記メモリ・コントローラから受信された前記ＥＷＡＣＫ応答に一致しないということを決定したときに、前記メモリ・アクセス・ブローカによって、１つまたは複数のＥＷＡＣＫレジスタ内で失敗したＥＷＡＣＫ書き込み要求を示し、
前記１つまたは複数の発行元アプリケーションによって、前記１つまたは複数のＥＷＡＣＫレジスタに記録された前記失敗したＥＷＡＣＫ書き込み要求を識別する
実行可能な部分をさらに含んでいる、請求項２３に記載のコンピュータ・プログラム製品。
【請求項２５】
前記１つまたは複数のＥＷＡＣＫレジスタ内で示された前記失敗したＥＷＡＣＫ書き込み要求を識別したときに、前記１つまたは複数の発行元アプリケーションに対して各書き込み要求を再発行することを要求する実行可能な部分をさらに含んでいる、請求項２４に記載のコンピュータ・プログラム製品。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般に、コンピューティング・システムに関し、より詳細には、コンピューティング・プロセッサをメモリ技術にインターフェイスで接続するために、アプリケーションによって制御された早期書込み確認応答をサポートする、メモリ・アクセス・ブローカ・システムを使用するためのさまざまな実施形態に関する。
【背景技術】
【０００２】
現在の相互接続された複雑な社会では、コンピュータおよびコンピュータ駆動の機器が、より一般的になっている。集積回路の出現およびさらなる小型化に伴い、処理デバイスは、多種多様なデバイスへの統合を可能にした。多くのコンピューティング・システムは、メモリ・バス・プロトコルを使用してアクセスできるコンピュータ・メモリを含む。異なるプロセッサ・アーキテクチャ（例えば、ＱｕｉｃｋＰａｔｈ  Ｉｎｔｅｒｃｏｎｎｅｃｔ（Ｉｎｔｅｌ（Ｒ））、Ａｄｖａｎｃｅｄ  Ｍｉｃｒｏｃｏｎｔｒｏｌｌｅｒ  Ｂｕｓ  Ａｒｃｈｉｔｅｃｔｕｒｅ（ＡＲＭ（Ｒ））、Ｃｏｈｅｒｅｎｔ  Ａｃｃｅｌｅｒａｔｏｒ  Ｐｒｏｃｅｓｓｏｒ  Ｉｎｔｅｒｆａｃｅ（ＩＢＭ（Ｒ））、およびＨｙｐｅｒＴｒａｎｓｐｏｒｔ（Ｒ）（ＡＭＤ（Ｒ））など）をサポートするための複数のメモリ・バス規格が開発された。
【０００３】
どのメモリ・バス・アーキテクチャの場合でも、困難な要件は、メモリ・アクセス要求の配信を保証することである。これを実現するために、メモリ・バス・アーキテクチャは、正常に完了した要求ごとに確認応答が要求発行元（例えば、プロセッサ・コア）に返送される、明示的な確認応答方式を実装する。読み取りアクセス要求がデータをメモリから取り出すため、この場合、正しいデータ受信が確認応答の役割を果たす。一方、データ書き込み要求は、データをメモリに追加し、データが正常に書き込まれた後に確認応答が戻るのを、明示的に待つ必要がある。いずれかのコンピューティング・システムがプログラム実行の完全性を維持するには、同じ発行元によって発行された要求が、順序通りに提供される必要がある。したがって、多くの連続する書き込み要求を発行するアプリケーションは（例えば、大きいメモリのコピーが実行される場合）、書き込み要求の明示的な確認応答に直接関連する性能への影響を受ける。書込み確認応答がデータの転送を伴っていないため、例えば、集中的な書き込みのメモリ・アクセス・パターンを示すアプリケーションを改善するなど、実行性能を改善する必要がある。
【発明の概要】
【発明が解決しようとする課題】
【０００４】
アプリケーションによって制御された早期書込み確認応答をサポートするメモリ・アクセス・ブローカ・システムを実現する。
【課題を解決するための手段】
【０００５】
アプリケーションによって制御された早期書込み確認応答（ＥＷＡＣＫ：early write acknowledgment）をサポートするメモリ・アクセス・ブローカ・システム（memory access broker system）を使用するためのさまざまな実施形態が提供される。１つの実施形態では、例として、アプリケーションによって制御された早期書込み確認応答をサポートするメモリ・アクセス・ブローカ・システムをプロセッサによって選択的に有効化するための方法が提供される。１つまたは複数の発行元アプリケーションによって検査するために、失敗した早期書込み確認応答（ＥＷＡＣＫ）書き込み要求がメモリ・アクセス・ブローカによって記録されるように、メモリ・アクセス・ブローカが選択的に有効化され、１つまたは複数の発行元アプリケーションへの（通常の／現在の書込み確認応答（ＷＡＣＫ：write acknowledgement）動作とは対照的な）ＥＷＡＣＫ動作および失敗したＥＷＡＣＫ書き込み要求の通知を容易にすることができる。
【０００６】
１つの態様では、メモリ書き込みアクセスに関するアプリケーションの性能を大幅に改善しながら、データの完全性および決定論的プログラム実行を保証するためのさまざまな実施形態が提供される。１つの態様では、書き込みアクセス要求ブローカ・デバイスが、発行元アプリケーションへの高速なＥＷＡＣＫおよび失敗した書き込み要求の通知を容易にする。同時に動作している従来のアプリケーションの実行の完全性に影響を与えずに、メモリ書き込みアクセス要求ブローカ・デバイスを安全に利用するために必要なサポートを有するアプリケーションを提供するために、メモリ書き込みアクセス要求ブローカ・デバイスが、実行時に選択的に有効化され得る。アプリケーション・レベルの制御、書き込みアクセス要求の完全性チェック、サポートのため、および失敗した書き込みのアプリケーション・レベルの処理に関する障害を克服するために、１つまたは複数の解決策が、オペレーティング・システム（ＯＳ：operating system）およびアプリケーション・プログラミング・インターフェイス（ＡＰＩ：application programming interface）に提供される。
【０００７】
従来技術を上回る別の追加の特徴および利点として、メモリ・アクセス・ブローカが、書き込み要求の実行時に選択的に有効化または無効化されてよく、メモリ・アクセス・ブローカは、メモリ・バス・マスタとメモリ・コントローラ・スレーブの間の中間ブローカとして機能する。失敗した書き込み要求を、メモリ・アクセス・ブローカに関連付けられた１つまたは複数のＥＷＡＣＫレジスタに記録するための１つまたは複数の解決策が提供される。メモリ・アクセス・ブローカによってメモリ・バス・マスタから書き込み要求を受信するため、またはメモリ・アクセス・ブローカによって、メモリ・バス・マスタから受信された書き込み要求をメモリ・コントローラ・スレーブに発行するための、１つまたは複数の解決策が提供される。
【０００８】
追加の態様では、メモリ・アクセス・ブローカによってメモリ・コントローラからＷＡＣＫ応答を受信するため、またはメモリ・アクセス・ブローカによって、メモリ・コントローラから受信されたＷＡＣＫ応答をメモリ・バス・マスタに発行するための、１つまたは複数の解決策が提供される。メモリ・アクセス・ブローカは、ＥＷＡＣＫ書き込み要求ごとに書き込み要求識別子（ＩＤ：identifier）を生成し、生成された書き込み要求ＩＤをキューに配置してもよい。
【０００９】
言い換えると、メモリ・コントローラはＷＡＣＫ（書込み確認応答要求）を発行する。ＥＷＡＣＫは、メモリ・アクセス・ブローカのみによってコンピューティング・システム・マスタ（computing system master）に発行されてよい。ＥＷＡＣＫモードでは、メモリ・アクセス・ブローカが、メモリ・コントローラが通常のＷＡＣＫを返送するのを待たないため、「ＥＷＡＣＫ」が早期と呼ばれてよいということに、注意するべきである。
【００１０】
従来技術を上回る別の追加の特徴および利点として、メモリ・コントローラから受信されたＷＡＣＫ応答が、メモリ・アクセス・ブローカによって、キューから取り出された生成済みの書き込み要求ＩＤと比較される。キューから取り出された生成済みの書き込み要求ＩＤが、メモリ・コントローラから受信されたＷＡＣＫ応答に一致しないということを決定したときに、メモリ・アクセス・ブローカによって、１つまたは複数のＥＷＡＣＫレジスタ内で失敗したＥＷＡＣＫ書き込み要求を示し、１つまたは複数の発行元アプリケーションによって、１つまたは複数のＥＷＡＣＫレジスタに記録された失敗したＥＷＡＣＫ書き込み要求を識別するための、１つまたは複数の解決策が提供される。１つまたは複数のＥＷＡＣＫレジスタ内で示された失敗したＥＷＡＣＫ書き込み要求を識別したときに、１つまたは複数の発行元アプリケーションに対して各書き込み要求を再発行することを要求するための、１つまたは複数の解決策も提供される。
【００１１】
第１の態様から見ると、本発明は、プロセッサによって、早期書込み確認応答のサポートのためにメモリ・アクセス・ブローカを使用するための方法を提供し、この方法は、１つまたは複数の発行元アプリケーションによって検査するために、失敗したＥＷＡＣＫ書き込み要求がメモリ・アクセス・ブローカによって記録されるように、メモリ・アクセス・ブローカを選択的に有効化し、１つまたは複数の発行元アプリケーションへの早期書込み確認応答（ＥＷＡＣＫ）動作および失敗したＥＷＡＣＫ書き込み要求の通知を容易にすることを含む。
【００１２】
本発明は、書き込み要求の実行時にメモリ・アクセス・ブローカを選択的に有効化または無効化することをさらに含んでいる方法を提供し、メモリ・アクセス・ブローカが、メモリ・バス・マスタとメモリ・コントローラの間の中間ブローカとして機能するのが好ましい。
【００１３】
本発明は、失敗した書き込み要求を、メモリ・アクセス・ブローカに関連付けられた１つまたは複数のＥＷＡＣＫレジスタに記録することをさらに含んでいる方法を提供するのが好ましい。
【００１４】
本発明は、メモリ・アクセス・ブローカによってメモリ・バス・マスタから書き込み要求を受信することと、メモリ・アクセス・ブローカによって、メモリ・バス・マスタから受信された書き込み要求をメモリ・コントローラに発行することとをさらに含んでいる方法を提供するのが好ましい。
【００１５】
本発明は、メモリ・アクセス・ブローカによってメモリ・コントローラからＷＡＣＫ応答を受信すること、またはメモリ・アクセス・ブローカによって、メモリ・コントローラから受信されたＷＡＣＫ応答をメモリ・バス・マスタに発行することをさらに含んでいる方法を提供するのが好ましい。
【００１６】
本発明は、メモリ・アクセス・ブローカによって、ＥＷＡＣＫ書き込み要求ごとに書き込み要求識別子（ＩＤ）を生成することと、生成された書き込み要求ＩＤをキューに配置することとをさらに含んでいる方法を提供するのが好ましい。
【００１７】
本発明は、メモリ・アクセス・ブローカによって、メモリ・コントローラから受信されたＷＡＣＫ応答をキューから取り出された生成済みの書き込み要求ＩＤと比較することをさらに含んでいる方法を提供するのが好ましい。
【００１８】
本発明は、キューから取り出された生成済みの書き込み要求ＩＤが、メモリ・コントローラから受信されたＷＡＣＫ応答に一致しないということを決定したときに、メモリ・アクセス・ブローカによって、１つまたは複数のＥＷＡＣＫレジスタ内で失敗したＥＷＡＣＫ書き込み要求を示すことと、１つまたは複数の発行元アプリケーションによって、１つまたは複数のＥＷＡＣＫレジスタに記録された失敗したＥＷＡＣＫ書き込み要求を識別することとをさらに含んでいる方法を提供するのが好ましい。
【００１９】
本発明は、１つまたは複数のＥＷＡＣＫレジスタ内で示された失敗したＥＷＡＣＫ書き込み要求を識別したときに、１つまたは複数の発行元アプリケーションに対して各書き込み要求を再発行することを要求することをさらに含んでいる方法を提供するのが好ましい。
【００２０】
第２の視点から見ると、本発明は、早期書込み確認応答のサポートのためにメモリ・アクセス・ブローカを使用するためのシステムを提供し、このシステムは、実行可能な命令を含む１つまたは複数のコンピュータを備えており、これらの命令は、実行された場合に、システムに、１つまたは複数の発行元アプリケーションによって検査するために、失敗したＥＷＡＣＫ書き込み要求がメモリ・アクセス・ブローカによって記録されるように、メモリ・アクセス・ブローカを選択的に有効化し、１つまたは複数の発行元アプリケーションへの早期書込み確認応答（ＥＷＡＣＫ）動作および失敗したＥＷＡＣＫ書き込み要求の通知を容易にすることを実行させる。
【００２１】
本発明は、実行可能な命令が書き込み要求の実行時にメモリ・アクセス・ブローカを選択的に有効化または無効化し、メモリ・アクセス・ブローカが、メモリ・バス・マスタとメモリ・コントローラの間の中間ブローカとして機能する、システムを提供するのが好ましい。
【００２２】
本発明は、実行可能な命令が、失敗した書き込み要求を、メモリ・アクセス・ブローカに関連付けられた１つまたは複数のＥＷＡＣＫレジスタに記録する、システムを提供するのが好ましい。
【００２３】
本発明は、実行可能な命令が、メモリ・アクセス・ブローカによってメモリ・バス・マスタから書き込み要求を受信し、メモリ・アクセス・ブローカによって、メモリ・バス・マスタから受信された書き込み要求をメモリ・コントローラに発行する、システムを提供するのが好ましい。
【００２４】
本発明は、実行可能な命令が、メモリ・アクセス・ブローカによってメモリ・コントローラからＷＡＣＫ応答を受信するか、またはメモリ・アクセス・ブローカによって、メモリ・コントローラから受信されたＷＡＣＫ応答をメモリ・バス・マスタに発行する、システムを提供するのが好ましい。
【００２５】
本発明は、実行可能な命令が、メモリ・アクセス・ブローカによって、ＥＷＡＣＫ書き込み要求ごとに書き込み要求識別子（ＩＤ）を生成し、生成された書き込み要求ＩＤをキューに配置する、システムを提供するのが好ましい。
【００２６】
本発明は、実行可能な命令が、メモリ・アクセス・ブローカによって、メモリ・コントローラから受信されたＷＡＣＫ応答をキューから取り出された生成済みの書き込み要求ＩＤと比較する、システムを提供するのが好ましい。
【００２７】
本発明は、実行可能な命令が、キューから取り出された生成済みの書き込み要求ＩＤが、メモリ・コントローラから受信されたＥＷＡＣＫ応答に一致しないということを決定したときに、メモリ・アクセス・ブローカによって、１つまたは複数のＥＷＡＣＫレジスタ内で失敗したＥＷＡＣＫ書き込み要求を示し、１つまたは複数の発行元アプリケーションによって、１つまたは複数のＥＷＡＣＫレジスタに記録された失敗したＥＷＡＣＫ書き込み要求を識別し、１つまたは複数のＥＷＡＣＫレジスタ内で示された失敗したＥＷＡＣＫ書き込み要求を識別したときに、１つまたは複数の発行元アプリケーションに対して各書き込み要求を再発行することを要求する、システムを提供するのが好ましい。
【００２８】
本発明は、プロセッサによる、構造化されていないテキスト・データからの対人関係の発見および解析のためのコンピュータ・プログラム製品を提供し、このコンピュータ・プログラム製品が、コンピュータ可読プログラム・コード部分が格納されている非一過性コンピュータ可読記憶媒体を備えており、これらのコンピュータ可読プログラム・コード部分が、１つまたは複数の発行元アプリケーションによって検査するために、失敗したＥＷＡＣＫ書き込み要求がメモリ・アクセス・ブローカによって記録されるように、メモリ・アクセス・ブローカを選択的に有効化し、１つまたは複数の発行元アプリケーションへの早期書込み確認応答（ＥＷＡＣＫ）動作および失敗したＥＷＡＣＫ書き込み要求の通知を容易にする、実行可能な部分を含んでいるのが好ましい。
【００２９】
本発明は、書き込み要求の実行時にメモリ・アクセス・ブローカを選択的に有効化または無効化する実行可能な部分をさらに含んでいるコンピュータ・プログラム製品を提供し、メモリ・アクセス・ブローカが、メモリ・バス・マスタとメモリ・コントローラの間の中間ブローカとして機能するのが好ましい。
【００３０】
本発明は、失敗した書き込み要求を、メモリ・アクセス・ブローカに関連付けられた１つまたは複数のＥＷＡＣＫレジスタに記録する実行可能な部分をさらに含んでいる、コンピュータ・プログラム製品を提供するのが好ましい。
【００３１】
本発明は、メモリ・アクセス・ブローカによってメモリ・バス・マスタから書き込み要求を受信するか、メモリ・アクセス・ブローカによって、メモリ・バス・マスタから受信された書き込み要求をメモリ・コントローラに発行するか、メモリ・アクセス・ブローカによってメモリ・コントローラからＷＡＣＫ応答を受信するか、またはメモリ・アクセス・ブローカによって、メモリ・コントローラから受信されたＷＡＣＫ応答をメモリ・バス・マスタに発行する実行可能な部分をさらに含んでいる、コンピュータ・プログラム製品を提供するのが好ましい。
【００３２】
本発明は、メモリ・アクセス・ブローカによって、ＥＷＡＣＫ書き込み要求ごとに書き込み要求識別子（ＩＤ）を生成し、生成された書き込み要求ＩＤをキューに配置する実行可能な部分をさらに含んでいる、コンピュータ・プログラム製品を提供するのが好ましい。
【００３３】
本発明は、メモリ・アクセス・ブローカによって、メモリ・コントローラから受信されたＷＡＣＫ応答をキューから取り出された生成済みの書き込み要求ＩＤと比較する実行可能な部分をさらに含んでいる、コンピュータ・プログラム製品を提供するのが好ましい。
【００３４】
本発明は、キューから取り出された生成済みの書き込み要求ＩＤが、メモリ・コントローラから受信されたＥＷＡＣＫ応答に一致しないということを決定したときに、メモリ・アクセス・ブローカによって、１つまたは複数のＥＷＡＣＫレジスタ内で失敗したＥＷＡＣＫ書き込み要求を示し、１つまたは複数の発行元アプリケーションによって、１つまたは複数のＥＷＡＣＫレジスタに記録された失敗したＥＷＡＣＫ書き込み要求を識別する実行可能な部分をさらに含んでいる、コンピュータ・プログラム製品を提供するのが好ましい。
【００３５】
本発明は、１つまたは複数のＥＷＡＣＫレジスタ内で示された失敗したＥＷＡＣＫ書き込み要求を識別したときに、１つまたは複数の発行元アプリケーションに対して各書き込み要求を再発行することを要求する実行可能な部分をさらに含んでいる、コンピュータ・プログラム製品を提供するのが好ましい。
【００３６】
本発明の利点を容易に理解するために、上で簡単に説明された本発明のさらに詳細な説明が、添付の図面において示された特定の実施形態を参照することによって提供される。これら図面が本発明の典型的な実施形態のみを表しており、したがって、本発明の範囲の制限と見なされるべきではないということを理解して、添付の図面を使用することによって、追加の特殊性および詳細と共に本発明が表され、説明される。
【図面の簡単な説明】
【００３７】
【図１】本発明の実施形態に従って例示的なクラウド・コンピューティング・ノードを示すブロック図である。
【図２】本発明の実施形態に従って例示的なクラウド・コンピューティング環境を示す追加のブロック図である。
【図３】本発明の実施形態に従って抽象モデル・レイヤを示す追加のブロック図である。
【図４】本発明の態様に従って早期書込み確認応答（ＥＷＡＣＫ）動作および非早期書込み確認応答（ＷＡＣＫ）動作の性能の比較を示す図である。
【図５】本発明の態様に従って早期書込み確認応答（ＥＷＡＣＫ）動作および非早期書込み確認応答（ＷＡＣＫ）動作の性能の比較を示す図である。
【図６】本発明の態様に従ってメモリ・アクセス・ブローカ・システムの使用例を示す図である。
【図７】本発明の態様に従ってメモリ・アクセス・ブローカ・システムの使用例を示す図である。
【図８】本発明の態様に従ってメモリ・アクセス・ブローカ・システムの使用例を示す図である。
【図９】本発明の態様に従ってメモリ・アクセス・ブローカ・システムの使用例を示す図である。
【図１０】本発明の態様が実現されてよい、アプリケーションによって制御された早期書込み確認応答をサポートするメモリ・アクセス・ブローカ・システムを使用するための追加の例示的な方法を示すフローチャート図である。
【発明を実施するための形態】
【００３８】
メモリ書き込みアクセスは、中央処理装置（ＣＰＵ：central processor units）またはダイレクト・メモリ・アクセス（ＤＭＡ：direct memory access）エンジンによって、外部メモリ・デバイス・コントローラ（例えば、ダイナミック・ランダムアクセス・メモリ・コントローラ（「ＤＤＲ」）、ハイブリッド・メモリ・コントローラ（「ＨＭＣ」：hybrid memory controllers）、または非集約型メモリ・システムなど）に向けて発行されてよい。メモリへの書き込みアクセスが開始された場合、書き込みアクセス応答の確認応答が受信されるまで、ＣＰＵまたはダイレクト・メモリ・アクセスＤＭＡのデータ経路の実行が停止することがある。この確認応答は、プログラム実行の完全性を保証することができる。しかし、アプリケーションの実行性能は、特に書き込み要求に対する確認応答を待っている間、メモリ・アクセス待ち時間に非常に影響を受ける。メモリ・アクセス待ち時間は、高度に結合されたシステム（例えば、ダイナミック・ランダムアクセス・メモリ（「ＤＤＲ」）は１０ナノ秒（「ｎｓ」）の応答遅延を実現できる）と、ネットワークを経由して記憶媒体にアクセスする必要のあるコントローラ（例えば、非集約型メモリ・システムは、数百ｎｓを必要とすることがある）の間で、変化することがある。
【００３９】
さらに具体的には、コンピューティング・アプリケーションは、メモリ・アクセスの完全性に関して、コンピューティング・ハードウェアに完全に依存する。メモリ・アクセス要求が失敗した場合、コンピューティング・ハードウェアが、停止またはシステムの再起動のトリガーによって、メモリ・アクセス要求の失敗を直ちに検出する。そのため、プログラム実行の完全性を保証し、メモリ・アクセス待ち時間を減らしながら、書き込みアクセス性能に大きく依存するコンピューティング・アプリケーションの実行性能を向上させる必要がある。したがって、本発明は、メモリ書き込みアクセス性能に大きく依存するコンピューティング・アプリケーションの性能を向上させることを目指す。
【００４０】
１つの態様では、メモリ・コントローラ・サブシステムが、早期書込み確認応答（「ＥＷＡＣＫ」または「ＥＷＡＣＫ応答」）を使用して、ＣＰＵによるメモリ・アクセス書き込み要求の順序通りの配信を保証してよい。ＣＰＵは、メモリ・コントローラから確認応答を受信することを期待せず、書き込み要求データがＣＰＵを離れた後に、直ちに実行を続ける。プログラムによって発行される書き込み要求の数に応じて、ＥＷＡＣＫは実行性能を１桁向上させることができる。ＥＷＡＣＫ動作が使用される場合、書き込み要求が実際に配信されることを保証する責任が、メモリ・コントローラにオフロードされてよい。したがって、コントローラは、例えば、ｉ）要求のバッファリング、ｉｉ）フロー制御、ｉｉｉ）確認応答方式の実装、およびｉｖ）データの完全性チェックなどのタスクを実行するべきである。しかし、これらのタスクの各々は、大幅な遅延をクリティカル・パスに導入することがあり、性能向上をゼロに減少させる可能性がある。したがって、本発明は、ハードウェアとコンピューティング・アプリケーションのコンポーネントの間で責任を分担することができる動作の追加モードを提供する。これにより、ＥＷＡＣＫに関連する誤りを許容し、そのような誤りから回復して、大幅な性能向上を達成し、メモリ・アクセス待ち時間を大幅に削減できるコンピューティング・アプリケーションを可能にすることによって、従来技術を上回る追加の特徴および利点を実現する。
【００４１】
追加の態様では、示されている実施形態例のメカニズムは、アプリケーションによって制御されたＥＷＡＣＫ動作をサポートするメモリ・アクセス・ブローカ・システムを使用することを提供する。メモリ・アクセス・ブローカ・デバイスは、メモリ・バス・マスタとメモリ・コントローラ・スレーブの間でインターリーブされてよい。１つまたは複数の発行元アプリケーションによって検査するために、失敗したＥＷＡＣＫ書き込み要求がメモリ・アクセス・ブローカによって記録されるように、メモリ・アクセス・ブローカ・デバイスが選択的に有効化され、１つまたは複数の発行元アプリケーションへの早期書込み確認応答（ＥＷＡＣＫ）動作および失敗したＥＷＡＣＫ書き込み要求の通知を容易にしてよい。
【００４２】
メモリ・バス要求ブローカ・システム（memory bus request broker system）は、コンピューティング・ハードウェアとコンピュータ・アプリケーションの協調設計システムであってよい。システムのコンピューティング・ハードウェア部分は、メモリ・バス要求ブローカであってよく、各メモリ・バス・マスタと１つのメモリ・コントローラ・スレーブの間でインターリーブされてよい。メモリ・バス要求ブローカのＥＷＡＣＫ機能は、コンピュータ・アプリケーションによって制御されたハードウェア・スイッチを介して実行時に自動的に有効化または無効化することができ、メモリ・マップド・レジスタを介してオペレーティング・システム・カーネルによって制御される。
【００４３】
１つの態様では、メモリ書き込みアクセスに関するアプリケーションの性能を大幅に改善しながら、データの完全性および決定論的プログラム実行を保証するためのさまざまな実施形態が提供される。１つの態様では、書き込みアクセス要求ブローカ・デバイスが、発行元アプリケーションへの高速なＥＷＡＣＫおよび失敗した書き込み要求の通知を容易にする。同時に動作している従来のアプリケーションの実行の完全性に影響を与えずに、メモリ書き込みアクセス要求ブローカ・デバイスを安全に利用するために必要なサポートを有するアプリケーションを提供するために、メモリ書き込みアクセス要求ブローカ・デバイスが、実行時に選択的に有効化され得る。本発明は、アプリケーション・レベルの制御、書き込みアクセス要求の完全性チェック、および失敗した書き込みのアプリケーション・レベルの処理に関する障害のためのサポートを、オペレーティング・システム（ＯＳ）およびアプリケーション・プログラミング・インターフェイス（ＡＰＩ）に提供する。
【００４４】
さまざまなコンピューティング・アーキテクチャ（例えば、非集約型メモリ・システム）内でメモリ・アクセス・ブローカ・システムを使用することによって、従来技術を上回る追加の特徴および利点が提供される。例えば、非集約型メモリ・システムでは、記憶媒体は、異なる物理サーバ・トレイ内に存在し、待ち時間の少ない高速な相互接続（例えば、光回路およびスイッチ）を介してＣＰＵおよびＤＭＡに相互接続され、ローカル・メモリより著しく長いアクセス遅延を有する。相互接続は、理論的には無損失通信チャネルを提供するように構成され得るが、メモリ・アクセス経路に沿ったデバイスが、予想外に失敗または停止することがある。したがって、メモリ・アクセス・ブローカ・デバイスは、本明細書において説明されているように、非集約型メモリ・システムが、メモリ・アクセス経路に沿ったデバイスが予想外に失敗または停止するのを防ぐことができるようにする。
【００４５】
本開示にはクラウド・コンピューティングの詳細な説明が含まれているが、本明細書において示された内容の実装は、クラウド・コンピューティング環境に限定されないということが、あらかじめ理解される。むしろ、本発明の実施形態は、現在既知であるか、または今後開発される任意のその他の種類のコンピューティング環境と組み合わせて実装できる。
【００４６】
クラウド・コンピューティングは、構成可能な計算リソース（例えば、ネットワーク、ネットワーク帯域幅、サーバ、処理、メモリ、ストレージ、アプリケーション、仮想マシン、およびサービス）の共有プールへの便利なオンデマンドのネットワーク・アクセスを可能にするためのサービス配信モデルであり、管理上の手間またはサービス・プロバイダとのやりとりを最小限に抑えて、これらのリソースを迅速にプロビジョニングおよび解放することができる。このクラウド・モデルは、少なくとも５つの特徴、少なくとも３つのサービス・モデル、および少なくとも４つのデプロイメント・モデルを含むことができる。
【００４７】
特徴は、次のとおりである。
オンデマンドのセルフ・サービス：クラウドの利用者は、サーバの時間、ネットワーク・ストレージなどの計算能力を一方的に、サービス・プロバイダとの人間的なやりとりを必要とせず、必要に応じて自動的にプロビジョニングすることができる。
幅広いネットワーク・アクセス：クラウドの能力は、ネットワークを経由して利用可能であり、標準的なメカニズムを使用してアクセスされるため、異種のシン・クライアントまたはシック・クライアント・プラットフォーム（例えば、携帯電話、ラップトップ、およびＰＤＡ）による利用を促進する。
リソース・プール：プロバイダの計算リソースは、プールされ、マルチテナント・モデルを使用して複数の利用者に提供される。さまざまな物理的および仮想的リソースが、要求に従って動的に割り当ておよび再割り当てされる。場所に依存しないという感覚があり、利用者は通常、提供されるリソースの正確な場所に関して管理することも知ることもないが、さらに高い抽象レベルでは、場所（例えば、国、州、またはデータセンター）を指定できる場合がある。
迅速な順応性：クラウドの能力は、迅速かつ柔軟に、場合によっては自動的にプロビジョニングされ、素早くスケールアウトし、迅速に解放されて素早くスケールインすることができる。プロビジョニングに使用できる能力は、利用者には、多くの場合、任意の量をいつでも無制限に購入できるように見える。
測定されるサービス：クラウド・システムは、計測機能を活用することによって、サービスの種類（例えば、ストレージ、処理、帯域幅、およびアクティブなユーザのアカウント）に適した抽象レベルで、リソースの使用を自動的に制御および最適化する。リソースの使用量は監視、制御、および報告することができ、利用されるサービスのプロバイダと利用者の両方に透明性が提供される。
【００４８】
サービス・モデルは、次のとおりである。
ＳａａＳ（Software as a Service）：利用者に提供される能力は、クラウド・インフラストラクチャ上で稼働しているプロバイダのアプリケーションの利用である。それらのアプリケーションは、Ｗｅｂブラウザ（例えば、Ｗｅｂベースの電子メール）などのシン・クライアント・インターフェイスを介して、さまざまなクライアント・デバイスからアクセスできる。利用者は、ネットワーク、サーバ、オペレーティング・システム、ストレージ、またはさらには個々のアプリケーション機能を含む基盤になるクラウド・インフラストラクチャを、限定的なユーザ固有のアプリケーション構成設定を行う可能性を除き、管理することも制御することもない。
ＰａａＳ（Platform as a Service）：利用者に提供される能力は、プロバイダによってサポートされるプログラミング言語およびツールを使用して作成された、利用者が作成または取得したアプリケーションをクラウド・インフラストラクチャにデプロイすることである。利用者は、ネットワーク、サーバ、オペレーティング・システム、またはストレージを含む基盤になるクラウド・インフラストラクチャを管理することも制御することもないが、デプロイされたアプリケーション、および場合によってはアプリケーション・ホスティング環境の構成を制御することができる。
ＩａａＳ（Infrastructure as a Service）：利用者に提供される能力は、処理、ストレージ、ネットワーク、およびその他の基本的な計算リソースのプロビジョニングであり、利用者は、オペレーティング・システムおよびアプリケーションを含むことができる任意のソフトウェアをデプロイして実行できる。利用者は、基盤になるクラウド・インフラストラクチャを管理することも制御することもないが、オペレーティング・システム、ストレージ、デプロイされたアプリケーションを制御することができ、場合によっては、選択されたネットワーク・コンポーネント（例えば、ホスト・ファイアウォール）を限定的に制御できる。
【００４９】
デプロイメント・モデルは、次のとおりである。
プライベート・クラウド：このクラウド・インフラストラクチャは、ある組織のためにのみ運用される。この組織またはサード・パーティによって管理することができ、オンプレミスまたはオフプレミスに存在することができる。
コミュニティ・クラウド：このクラウド・インフラストラクチャは、複数の組織によって共有され、関心事（例えば、任務、セキュリティ要件、ポリシー、およびコンプライアンスに関する考慮事項）を共有している特定のコミュニティをサポートする。これらの組織またはサード・パーティによって管理することができ、オンプレミスまたはオフプレミスに存在することができる。
パブリック・クラウド：このクラウド・インフラストラクチャは、一般ユーザまたは大規模な業界団体が使用できるようになっており、クラウド・サービスを販売する組織によって所有される。
ハイブリッド・クラウド：このクラウド・インフラストラクチャは、データとアプリケーションの移植を可能にする標準化された技術または独自の技術（例えば、クラウド間の負荷バランスを調整するためのクラウド・バースト）によって固有の実体を残したまま互いに結合された２つ以上のクラウド（プライベート、コミュニティ、またはパブリック）の複合である。
【００５０】
クラウド・コンピューティング環境は、ステートレス、疎結合、モジュール性、および意味的相互運用性に重点を置いたサービス指向の環境である。クラウド・コンピューティングの中心になるのは、相互接続されたノードのネットワークを備えるインフラストラクチャである。
【００５１】
ここで図１を参照すると、クラウド・コンピューティング・ノードの例の概略図が示されている。クラウド・コンピューティング・ノード１０は、適切なクラウド・コンピューティング・ノードの一例に過ぎず、本明細書に記載された本発明の実施形態の使用または機能の範囲に関して、いかなる制限を示唆することも意図されていない。いずれにせよ、クラウド・コンピューティング・ノード１０は、前述した機能のいずれかを実装すること、または実行すること、あるいはその両方を行うことができる。
【００５２】
クラウド・コンピューティング・ノード１０内には、他の多数の汎用または専用のコンピューティング・システム環境または構成で運用できるコンピュータ・システム／サーバ１２が存在する。コンピュータ・システム／サーバ１２と共に使用するのに適した周知のコンピューティング・システム、環境、または構成、あるいはその組み合わせの例は、パーソナル・コンピュータ・システム、サーバ・コンピュータ・システム、シン・クライアント、シック・クライアント、ハンドヘルドまたはラップトップ・デバイス、マイクロプロセッサ・システム、マイクロプロセッサベース・システム、セット・トップ・ボックス、プログラマブル・コンシューマ・エレクトロニクス、ネットワークＰＣ、ミニコンピュータ・システム、メインフレーム・コンピュータ・システム、およびこれらの任意のシステムまたはデバイスを含む分散クラウド・コンピューティング環境などを含むが、これらに限定されない。
【００５３】
コンピュータ・システム／サーバ１２は、コンピュータ・システムによって実行されているプログラム・モジュールなどの、コンピュータ・システムによって実行可能な命令との一般的な関連において説明されてよい。通常、プログラム・モジュールは、特定のタスクを実行するか、または特定の抽象データ型を実装するルーチン、プログラム、オブジェクト、コンポーネント、論理、データ構造などを含んでよい。コンピュータ・システム／サーバ１２は、通信ネットワークを介してリンクされたリモート処理デバイスによってタスクが実行される、分散クラウド・コンピューティング環境で実行されてよい。分散クラウド・コンピューティング環境において、プログラム・モジュールは、メモリ・ストレージ・デバイスを含む、ローカルおよびリモートの両方のコンピュータ・システム・ストレージ媒体に配置されてよい。
【００５４】
図１に示すように、クラウド・コンピューティング・ノード１０内のコンピュータ・システム／サーバ１２は、汎用コンピューティング・デバイスの形態で示されている。コンピュータ・システム／サーバ１２のコンポーネントは、１つまたは複数のプロセッサまたはプロセッシング・ユニット１６、システム・メモリ２８、およびシステム・メモリ２８を含むさまざまなシステム・コンポーネントをプロセッサ１６に結合するバス１８を含むことができるが、これらに限定されない。
【００５５】
バス１８は、メモリ・バスまたはメモリ・コントローラ、ペリフェラル・バス、アクセラレーテッド・グラフィックス・ポート、および任意のさまざまなバス・アーキテクチャを使用するプロセッサまたはローカル・バスを含む、任意の複数の種類のバス構造のうちの１つまたは複数を表す。例として、そのようなアーキテクチャは、ＩＳＡ（Industry Standard Architecture）バス、ＭＣＡ（Micro Channel Architecture）バス、ＥＩＳＡ（Enhanced ISA）バス、ＶＥＳＡ（Video Electronics Standards Association）ローカル・バス、およびＰＣＩ（Peripheral Component Interconnects）バスを含むが、これらに限定されない。
【００５６】
コンピュータ・システム／サーバ１２は、通常、さまざまなコンピュータ・システム可読媒体を含む。そのような媒体は、コンピュータ・システム／サーバ１２によってアクセスできる任意の利用可能な媒体であってよく、揮発性および不揮発性媒体の両方、取り外し可能および取り外し不可の媒体の両方を含む。
【００５７】
システム・メモリ２８は、ランダム・アクセス・メモリ（ＲＡＭ：random access memory）３０またはキャッシュ・メモリ３２あるいはその両方などの、揮発性メモリの形態でのコンピュータ・システム可読媒体を含むことができる。コンピュータ・システム／サーバ１２は、その他の取り外し可能／取り外し不可、揮発性／不揮発性のコンピュータ・システム・ストレージ媒体をさらに含んでよい。単に例として、取り外し不可、不揮発性の磁気媒体（図示されておらず、通常は「ハード・ドライブ」と呼ばれる）に対する読み取りと書き込みを行うために、ストレージ・システム３４を提供することができる。図示されていないが、取り外し可能、不揮発性の磁気ディスク（例えば、「フロッピー（Ｒ）・ディスク」）に対する読み取りと書き込みを行うための磁気ディスク・ドライブ、およびＣＤ−ＲＯＭ、ＤＶＤ−ＲＯＭ、またはその他の光媒体などの取り外し可能、不揮発性の光ディスクに対する読み取りと書き込みを行うための光ディスク・ドライブを提供することができる。そのような例では、それぞれを、１つまたは複数のデータ媒体インターフェイスによってバス１８に接続することができる。下で詳細に示され、説明されているように、システム・メモリ２８は、本発明の実施形態の機能を実行するように構成された一連の（例えば、少なくとも１つの）プログラム・モジュールを備える少なくとも１つのプログラム製品を含んでよい。
【００５８】
例えば、一連の（少なくとも１つの）プログラム・モジュール４２を備えるプログラム／ユーティリティ４０がシステム・メモリ２８に格納されてよいが、これに限定されず、オペレーティング・システム、１つまたは複数のアプリケーション・プログラム、その他のプログラム・モジュール、およびプログラム・データも格納されてよい。オペレーティング・システム、１つまたは複数のアプリケーション・プログラム、その他のプログラム・モジュール、およびプログラム・データまたはこれらの或る組み合わせは、それぞれネットワーク環境の実装を含んでよい。プログラム・モジュール４２は、通常、本明細書に記載された本発明の実施形態の機能または方法あるいはその両方を実行する。
【００５９】
また、コンピュータ・システム／サーバ１２は、キーボード、ポインティング・デバイス、ディスプレイ２４などの１つまたは複数の外部デバイス１４、ユーザがコンピュータ・システム／サーバ１２とやりとりできるようにする１つまたは複数のデバイス、またはコンピュータ・システム／サーバ１２が１つまたは複数の他のコンピューティング・デバイスと通信できるようにする任意のデバイス（例えば、ネットワーク・カード、モデムなど）、あるいはその組み合わせと通信することもできる。そのような通信は、入出力（Ｉ／Ｏ：Input/Output）インターフェイス２２を介して行うことができる。さらに、コンピュータ・システム／サーバ１２は、ローカル・エリア・ネットワーク（ＬＡＮ：local area network）、一般的な広域ネットワーク（ＷＡＮ：wide area network）、またはパブリック・ネットワーク（例えば、インターネット）、あるいはその組み合わせなどの１つまたは複数のネットワークと、ネットワーク・アダプタ２０を介して通信することができる。図示されているように、ネットワーク・アダプタ２０は、バス１８を介してコンピュータ・システム／サーバ１２の他のコンポーネントと通信する。図示されていないが、その他のハードウェア・コンポーネントまたはソフトウェア・コンポーネントあるいはその両方を、コンピュータ・システム／サーバ１２と併用できるということが理解されるべきである。その例として、マイクロコード、デバイス・ドライバ、冗長プロセッシング・ユニット、外部ディスク・ドライブ・アレイ、ＲＡＩＤシステム、テープ・ドライブ、およびデータ・アーカイブ・ストレージ・システムなどが挙げられるが、これらに限定されない。
【００６０】
本発明との関連において、当業者が理解するであろうように、図１に示されたさまざまなコンポーネントが移動車両内に配置されてよい。例えば、実施形態例のメカニズムに関連付けられた処理能力およびデータ格納能力の一部が、ローカル処理コンポーネントを介してローカルに行われてよく、一方、同じコンポーネントが、遠隔地にある分散されたデータ計算処理コンポーネントおよびストレージ・コンポーネントに、ネットワークを介して接続され、本発明のさまざまな目的を実現する。やはり当業者によって理解されるであろうように、本明細書の例は、発明のさまざまな態様を集合的に実現する分散された計算コンポーネントの接続されたネットワーク全体であってよいもののサブセットのみを伝達するよう意図されている。
【００６１】
ここで図２を参照すると、例示的なクラウド・コンピューティング環境５０が示されている。図示されているように、クラウド・コンピューティング環境５０は、クラウドの利用者によって使用されるローカル・コンピューティング・デバイス（例えば、ＰＤＡ（Personal Digital Assistant）または携帯電話５４Ａ、デスクトップ・コンピュータ５４Ｂ、ラップトップ・コンピュータ５４Ｃ、または自動車コンピュータ・システム５４Ｎ、あるいはその組み合わせなど）が通信できる１つまたは複数のクラウド・コンピューティング・ノード１０を備える。ノード１０は、互いに通信してよい。ノード１０は、１つまたは複数のネットワーク内で、本明細書において前述されたプライベート・クラウド、コミュニティ・クラウド、パブリック・クラウド、またはハイブリッド・クラウド、あるいはこれらの組み合わせなどに、物理的または仮想的にグループ化されてよい（図示されていない）。これによって、クラウド・コンピューティング環境５０は、クラウドの利用者がローカル・コンピューティング・デバイス上でリソースを維持する必要のないインフラストラクチャ、プラットフォーム、またはＳａａＳ、あるいはその組み合わせを提供できる。図２に示されたコンピューティング・デバイス５４Ａ〜Ｎの種類は、例示のみが意図されており、コンピューティング・ノード１０およびクラウド・コンピューティング環境５０は、任意の種類のネットワークまたはネットワーク・アドレス可能な接続（例えば、Ｗｅｂブラウザを使用した接続）あるいはその両方を経由して任意の種類のコンピュータ制御デバイスと通信することができると理解される。
【００６２】
ここで図３を参照すると、クラウド・コンピューティング環境５０（図２）によって提供される機能的抽象レイヤのセットが示されている。図３に示されたコンポーネント、レイヤ、および機能は、例示のみが意図されており、本発明の実施形態がこれらに限定されないということが、あらかじめ理解されるべきである。図示されているように、次のレイヤおよび対応する機能が提供される。
【００６３】
デバイス・レイヤ５５は、クラウド・コンピューティング環境５０内のさまざまなタスクを実行するために、電子機器、センサ、アクチュエータ、およびその他の物体に埋め込まれているか、またはスタンドアロンであるか、あるいはその両方である、物理デバイスまたは仮想デバイスあるいはその両方を含む。デバイス・レイヤ５５内のデバイスの各々は、デバイスから取得された情報が他の機能的抽象レイヤに提供されてよいように、または他の抽象レイヤからの情報がデバイスに提供されてよいように、あるいはその両方が行われるように、他の機能的抽象レイヤへのネットワーク能力を組み込んでいる。１つの実施形態では、デバイス・レイヤ５５を含めて、さまざまなデバイスが、「モノのインターネット」（ＩｏＴ：internet of things）と総称される実体のネットワークを組み込んでよい。そのような実体のネットワークは、当業者が理解するであろうように、データの相互通信、収集、および配布を可能にし、多種多様な目的を実現する。
【００６４】
図に示されているデバイス・レイヤ５５は、図に示されているセンサ５２、アクチュエータ５３、処理、センサ、およびネットワーク電子機器が内蔵された「学習」サーモスタット５６、カメラ５７、制御可能な家庭用コンセント５８、ならびに制御可能な電気スイッチ５９を含んでいる。その他の可能性のあるデバイスとしては、さまざまな追加のセンサ・デバイス、ネットワーク・デバイス、電子デバイス（遠隔制御デバイスなど）、追加のアクチュエータ・デバイス、いわゆる「スマート」電化製品（冷蔵庫または洗濯機／乾燥機など）、および多種多様なその他の可能性のある相互接続された物体が挙げられるが、これらに限定されない。
【００６５】
ハードウェアおよびソフトウェア・レイヤ６０は、ハードウェア・コンポーネントおよびソフトウェア・コンポーネントを含む。ハードウェア・コンポーネントの例としては、メインフレーム６１、ＲＩＳＣ（Reduced Instruction Set Computer）アーキテクチャベースのサーバ６２、サーバ６３、ブレード・サーバ６４、ストレージ・デバイス６５、ならびにネットワークおよびネットワーク・コンポーネント６６が挙げられる。一部の実施形態では、ソフトウェア・コンポーネントは、ネットワーク・アプリケーション・サーバ・ソフトウェア６７およびデータベース・ソフトウェア６８を含む。
【００６６】
仮想化レイヤ７０は、仮想サーバ７１、仮想ストレージ７２、仮想プライベート・ネットワークを含む仮想ネットワーク７３、仮想アプリケーションおよびオペレーティング・システム７４、ならびに仮想クライアント７５などの仮想的実体を提供できる抽象レイヤを備える。
【００６７】
一例を挙げると、管理レイヤ８０は、以下で説明される機能を提供することができる。リソース・プロビジョニング８１は、クラウド・コンピューティング環境内でタスクを実行するために利用される計算リソースおよびその他のリソースの動的調達を行う。計測および価格設定８２は、クラウド・コンピューティング環境内でリソースが利用される際のコスト追跡、およびそれらのリソースの利用に対する請求書の作成または送付を行う。一例を挙げると、それらのリソースは、アプリケーション・ソフトウェア・ライセンスを含んでよい。セキュリティは、クラウドの利用者およびタスクのＩＤ検証を行うとともに、データおよびその他のリソースの保護を行う。ユーザ・ポータル８３は、クラウド・コンピューティング環境へのアクセスを利用者およびシステム管理者に提供する。サービス・レベル管理８４は、必要なサービス・レベルを満たすように、クラウドの計算リソースの割り振りと管理を行う。サービス・レベル合意（ＳＬＡ：Service Level Agreement）計画および実行８５は、今後の要求が予想されるクラウドの計算リソースの事前準備および調達を、ＳＬＡに従って行う。
【００６８】
ワークロード・レイヤ９０は、クラウド・コンピューティング環境で利用できる機能の例を示している。このレイヤから提供できるワークロードおよび機能の例は、マッピングおよびナビゲーション９１、ソフトウェア開発およびライフサイクル管理９２、仮想クラスルーム教育の配信９３、データ分析処理９４、トランザクション処理９５、ならびに本発明の実施形態例との関連において、アプリケーションによって制御された早期書込み確認応答のワークロードおよび機能を含むさまざまなメモリ・アクセス・ブローカ・システム９６を含む。加えて、アプリケーションによって制御された早期書込み確認応答のワークロードおよび機能を含むメモリ・アクセス・ブローカ・システム９６は、データ解析（さまざまな環境センサからのデータの収集および処理を含む）および予測データ分析機能などの動作を含んでよい。当業者は、アプリケーションによって制御された早期書込み確認応答のワークロードおよび機能を含むメモリ・アクセス・ブローカ・システム９６が、さまざまな抽象レイヤの他の部分（ハードウェアおよびソフトウェア６０、仮想化７０、管理８０、およびその他のワークロード９０（例えば、データ分析処理９４など）内の部分など）と連動して動作し、本発明の実施形態例のさまざまな目的を実現してもよいということを理解するであろう。
【００６９】
前述したように、実施形態例のメカニズムは、メモリ書き込みアクセスに関するアプリケーションの性能を大幅に改善しながら、データの完全性および決定論的プログラム実行を保証するための新しい方法を提供する。１つの態様では、書き込みアクセス要求ブローカ・デバイスが、発行元アプリケーションへの高速な早期書込み確認応答および失敗した書き込み要求の通知を容易にする。同時に動作している従来のアプリケーションの実行の完全性に影響を与えずに、メモリ書き込みアクセス要求ブローカ・デバイスを安全に利用するために必要なサポートを有するアプリケーションを提供するために、メモリ書き込みアクセス要求ブローカ・デバイスが、実行時に選択的に有効化され得る。アプリケーション・レベルの制御、書き込みアクセス要求の完全性チェック、および失敗した書き込みのアプリケーション・レベルの処理の障害に関する１つまたは複数の解決策が、オペレーティング・システム（ＯＳ）およびアプリケーション・プログラミング・インターフェイス（ＡＰＩ）のサポートために提供される。
【００７０】
これらのメカニズムは、やはりプロセッサによって、アプリケーションによって制御された早期書込み確認応答をサポートするメモリ・アクセス・ブローカ・システムを選択的に有効化する機能を含む。１つまたは複数の発行元アプリケーションによって検査するために、失敗した早期書込み確認応答（ＥＷＡＣＫ）書き込み要求がメモリ・アクセス・ブローカによって記録されるように、メモリ・アクセス・ブローカが選択的に有効化され、１つまたは複数の発行元アプリケーションへのＥＷＡＣＫ動作および失敗したＥＷＡＣＫ書き込み要求の通知を容易にしてよい。
【００７１】
ここで図４〜５を参照すると、図４００、４２５が、早期書込み確認応答（ＥＷＡＣＫ）および非早期書込み確認応答（ＷＡＣＫ）の性能比較を示している。ＥＷＡＣＫとＷＡＣＫの性能を比較するために、以下の２つの例について検討する。
【００７２】
図４００、４２５に対して、ＣＰＵとメモリ（「ｍｅｍ」）の間の対称的な２０サイクル、６４ビットのパイプライン（例えば、１０段の要求／１０段の応答）を仮定する。言い換えると、１０段の書き込み要求が第１の１０サイクルであり、１０段の書き込み応答が第２の１０サイクルであり、合計で２０サイクルになる。要求シーケンスのために順次発行される４つの１９２ビットのデータ書き込み要求（例えば、要求０、１、２、および３）が存在するということも仮定する。ＷＡＣＫは６４ビットであってよい。要求パイプラインは、データ書き込みおよび応答パイプラインのＷＡＣＫを転送してよい。送信中のすべてのデータをパイプラインに入れるために、各書き込み要求（「要求」）が３サイクル（例えば、１９２ビット／６４ビット）を必要とするということも仮定する。
【００７３】
ここで図４００を参照すると、メモリへの第１の書き込み要求（例えば、要求０）の第１の６４ビットの到着に関して、ＥＷＡＣＫとＷＡＣＫの間の違いが示されている。さらに具体的には、図４００は、ＷＡＣＫの場合、メモリへの第１の書き込み要求の到着に関して、要求０（例えば、第１の６４ビットの要求）のみが送信中であるということを示している。要求０に対してメモリから書き込み応答が戻ったときにのみ、次の書き込み要求（例えば、要求１など）が、送信中にパイプライン上でメモリに発行され得る。その後の書き込み要求（例えば、要求２および３）ごとに、この同じプロセスが続行する。これに対して、ＥＷＡＣＫの動作は、そのようなメモリ・アクセス待ち時間を取り除き、書き込み要求（例えば、要求０〜３など）の各々を、送信中にパイプライン内で同時に、順次発行できるようにする。
【００７４】
ここで図５の図４２５を参照すると、第１の要求（例えば、要求０）の応答がメモリから発行されて、ＣＰＵに到着するときの、ＥＷＡＣＫとＷＡＣＫの間の性能差が示されている。ＥＷＡＣＫの場合、（要求０〜３の）すべての６４ビットのＥＷＡＣＫが、応答パイプライン上を送信中である。これに対して、ＷＡＣＫの同じサイクルでは、要求パイプラインと応答パイプラインの両方は、ほぼ完了している（例えば、２０サイクル完了している）第１の要求（例えば、要求０）のみを除いて空である。
【００７５】
さらに具体的には、ＥＷＡＣＫの合計応答時間を反映している表４５０は、書き込みアクセス要求０の場合、開始サイクルが０で開始し、終了サイクルが２０で完了することを示している。書き込みアクセス要求１の場合、開始サイクルが３で開始し、終了サイクルが２３で完了する。書き込みアクセス要求２の場合、開始サイクルが６で開始し、終了サイクルが２６で完了する。書き込みアクセス要求３の場合、開始サイクルが９で開始し、終了サイクルが２９で完了する。すなわち、書き込みバーストがサイクル２９で終了する。
【００７６】
ＷＡＣＫに関する表４７５は、書き込みアクセス要求０の場合、開始サイクルが０で開始し、終了サイクルが２０で完了することを示している。書き込みアクセス要求１の場合、開始サイクルが２１で開始し、終了サイクルが４１で完了する。書き込みアクセス要求２の場合、開始サイクルが４２で開始し、終了サイクルが６２で完了する。書き込みアクセス要求３の場合、開始サイクルが６３で開始し、終了サイクルが８３で完了する。すなわち、書き込みバーストがサイクル８３で終了する。示されているように、ＷＡＣＫと比較して、図５のすべての書き込み要求の合計で５４サイクル少ないＥＷＡＣＫの動作を実現することができる。
【００７７】
本発明は、性能を最大化するように配信を保証するために、メモリ・コントローラ・サブシステムを必要とせずに、ＥＷＡＣＫの動作を使用してＥＷＡＣＫのサポートを可能にする。これをサポートするために、実施形態例のメカニズムは、重要なメモリ・アクセス経路からの書込み確認応答の失敗を監視して記録し、記録された書込み確認応答失敗情報をアプリケーションが利用できるようにする。書き込み要求の誤りを定期的にチェックして訂正動作を実行する責任は、アプリケーション・レベルに転嫁される。さらに、従来技術を上回る別の追加の特徴および利点として、書き込み要求アクセスの障害を処理できるアプリケーションの実行に関連する要求の場合にのみ、ＥＷＡＣＫ機能を選択的に有効化することができる、それによって、従来のアプリケーションを、変更を必要とせずに同時に、かつ安全に実行できるようにする。
【００７８】
以上を考慮して、ここで、図６〜９に示されている以下の例について検討する。図６に（および図７〜８にも）示されているように、メモリ・バス要求ブローカ・システム５００は、さまざまなコンピューティング・アーキテクチャのフレームワークにおいて使用できるメモリ・バス要求ブローカ５１０（「要求ブローカ」または「ＥＷＡＣＫブローカ」）を含んでよい。メモリ・バス要求ブローカ・システム５００は、コンピューティング・ハードウェアとコンピュータ・アプリケーションの協調設計システムであってよい。１つの態様では、コンピューティング・システムは、メモリ・バス要求ブローカ５１０と、オペレーティング・ソフトウェア（「ＯＳ」：operating software）５０２に関連付けられたプログラム５０１と、ＣＰＵ５０４と、ＤＭＡ５０６と、例えばメモリ・バス・マスタ５０８などのバスと、メモリ・コントローラ５１４と、メモリ・バス要求ブローカ５１０に結合されてよい１つまたは複数のＥＷＡＣＫレジスタ５１２とを含んでよい。
【００７９】
１つの態様では、メモリ・バス要求ブローカ５１０は、メモリ・バス・マスタ５０８とメモリ・コントローラ５１４の間で結合されるか、またはインターリーブされてよく、書き込み要求の失敗をメモリ・マップド・レジスタ（例えば、ＥＷＡＣＫレジスタ５１２など）のセットに記録してよい。ＥＷＡＣＫレジスタ５１２は、ＯＳ５０２によって独立して安全に検査されてよい。
【００８０】
以上を考慮して、メモリ・バス要求ブローカ・システム５００の以下の動作例について検討する。前置きとして、さまざまな実施形態例を説明するために、メモリ・バス要求ブローカ５１０は、書き込み要求をメモリ・バス・マスタ５０８から受信してよい。メモリ・バス要求ブローカ５１０は、書き込み要求をメモリ・コントローラ５１４に発行してよい。メモリ・バス要求ブローカ５１０はＷＡＣＫ応答をメモリ・コントローラ５１４から受信してよい。メモリ・バス要求ブローカ５１０は、メモリ・コントローラ５１４から受信されたＷＡＣＫ応答をメモリ・バス・マスタ５０８に発行してよい。しかし、メモリ・バス要求ブローカ５１０のＥＷＡＣＫ機能は、ＣＰＵ５０４（例えば、コンピュータ・アプリケーションによって制御されたハードウェア・スイッチ）を介して実行時に自動的に有効化または無効化されてよく、ＥＷＡＣＫレジスタ５１２を介してＯＳ５０２のカーネルによって制御されてよい。
【００８１】
ここで図７を参照すると、メモリ・バス要求ブローカ５１０は、書き込み要求をメモリ・バス・マスタ５０８から受信してよい。書き込み要求の到着時に、メモリ・バス要求ブローカ５１０は、書き込み要求がＥＷＡＣＫ書き込み要求または非ＥＷＡＣＫ書き込み要求のいずれであるべきかをチェックし、判定してよい。書き込み要求がＥＷＡＣＫ要求である場合、メモリ・バス・マスタ５０８のプロトコルによって提供されるデフォルトの要求識別子（「ＩＤ」）が、置き換えられてよい。この置換ＩＤは、１）書き込み要求を発行したＣＰＵまたはＤＭＡ  ＩＤ、２）書き込み要求ＩＤ、および３）要求ブローカ５１０によって内部で管理されているカウンタをエンコードする、複合識別子であってよい。最初の２つのフィールド（すなわち、ＣＰＵ／ＤＭＡ  ＩＤおよび書き込み要求ＩＤ）は、メモリ・バス・マスタ５０８のプロトコルによって提供される。すなわち、ＣＰＵ／ＤＭＡ  ＩＤおよび書き込み要求ＩＤは、両方ともメモリ・バスのプロトコルによって（すなわち、メモリ要求のヘッダー内で）提供されてよい。ＣＰＵ／ＤＭＡ  ＩＤおよび書き込み要求ＩＤは、ＥＷＡＣＫブローカ（例えば、メモリ・バス要求ブローカ５１０）のタスクを実行する目的で、トランザクションを識別する１つのＩＤに結合されてよい。
【００８２】
複合ＩＤは、応答パイプラインに向けてキュー５２０（例えば、先入れ先出し（「ＦＩＦＯ」：first-in-first out）キュー５２０など）に追加されてよく、送信書き込み要求の割り当てられたＩＤとして使用されてよい。書き込み要求が早期に確認応答されない（例えば、非ＥＷＡＣＫ書き込み要求である）ということが決定された場合、書き込み要求は変更されずに転送され、メモリ・バス・マスタ５０８のプロトコルから提供されたデフォルトのＩＤが使用されてよい。
【００８３】
さらに、書き込み要求発行コンポーネント（例えば、ＯＳ５０２など）に対して、メモリ・バス要求ブローカ５１０のＥＷＡＣＫモードが有効化されているか、または無効化されているかに応じて、メモリ・バス要求ブローカ５１０は、１）ＥＷＡＣＫを発行元アプリケーション（例えば、ＣＰＵ５０４に関連付けられたプログラム５０１）に直ちに返送するか（ＥＷＡＣＫモード）、または２）待機し、実際の書き込みプロセスが完了した後に、メモリ・コントローラ５１４によって生成されたＷＡＣＫを中継してよい。すなわち、ＥＷＡＣＫモードでは、１）メモリ・バス要求ブローカ５１０は、コントローラ（例えば、メモリ・コントローラ５１４）が確認応答するのを待たずに発行元に直ちに応答してよく（ＥＷＡＣＫ確認応答）、または２）メモリ・バス要求ブローカ５１０は、ＥＷＡＣＫを生成せず、コントローラ（例えば、メモリ・コントローラ５１４）が通常のＷＡＣＫ（例えば、非ＥＷＡＣＫ）に応答するのを許可してよく、あるいはその両方が行われてよい。
【００８４】
メモリ・コントローラ５１４は、特に、メモリ・コントローラ５１４がメモリ・バス要求ブローカ５１０によって実行された動作を認識しないか、または気付かないため、メモリ・コントローラ５１４が受信したすべての書き込み要求に対して書込み確認応答を送信してよい。
【００８５】
図６〜７に示された例を引き続き使用し、ここで図８を参照すると、メモリ・バス要求ブローカ５１０が書込み確認応答（例えば、ＷＡＣＫ応答）をメモリ・コントローラ５１４から受信してよい。メモリ・バス要求ブローカ５１０が書込み確認応答５３０をメモリ・コントローラ５１４から受信した場合、メモリ・バス要求ブローカ５１０は、次の複合ＩＤ（「ＩＤ」）（例えば、ＦＩＦＯ動作に従って、次の複合ＩＤ）をＦＩＦＯキュー５２０から取り出してよい。メモリ・バス要求ブローカ５１０は、ＦＩＦＯキュー５２０から取り出された複合ＩＤを、メモリ・コントローラ５１４から受信された書込み確認応答５３０（例えば、ＷＡＣＫ応答）と比較してよい。例えば、メモリ・バス要求ブローカ５１０が、ＩＤ「Ｘ」を含む要求をメモリ・コントローラ５１４に発行した場合、その要求に対するメモリ・コントローラ５１４の応答は、ＩＤ  Ｘを含む。これによって、メモリ・バス要求ブローカ５１０が、要求ＩＤをメモリ・コントローラの応答ＩＤと照合できるようにする。要求がこのレベルで直列化されるため、応答が戻らない場合、失敗した要求を識別するように、ＦＩＦＯの動作中に各要求ＩＤが一致しなくなる。
【００８６】
ＥＷＡＣＫモードで発行された要求で、ＦＩＦＯキュー５２０から取り出された複合ＩＤと、メモリ・コントローラ５１４から受信された書込み確認応答の応答５３０の書込み確認応答ＩＤが一致する場合、（ＥＷＡＣＫがすでに配信されているため）メモリ・バス要求ブローカ５１０が応答を破棄する。非ＥＷＡＣＫモードでは、書込み確認応答５３０がメモリ・バス・マスタ５０８に転送される。
【００８７】
一方、ＥＷＡＣＫモードでは、比較動作に従って、複合ＩＤと、メモリ・コントローラ５１４から受信された書込み確認応答の応答５３０の書込み確認応答ＩＤが一致しない場合、メモリ・バス要求ブローカ５１０が、指定されたビットを１つまたは複数の現在アクティブなＥＷＡＣＫレジスタ５１２に記録または「設定」してよい。単一のメモリ・コントローラ５１４に起因して、すべての書き込み要求が順序通りに返信されるため、取り出された各複合ＩＤは、前の受信書込み確認応答５３０が失われていない限り、メモリ・コントローラ５１４から受信された受信書込み確認応答５３０に一致するはずである。指定されたビットを１つまたは複数の現在アクティブなＥＷＡＣＫレジスタ５１２に設定することによって、このビットは、失敗したＥＷＡＣＫ書き込み要求の指示として機能する。
【００８８】
ここで図９を参照すると、メモリ・バス要求ブローカ５１０は、失敗したＥＷＡＣＫ書き込み要求が示されている場合、指定されたビットを１つまたは複数の現在アクティブなＥＷＡＣＫレジスタ５１２に設定していてよい。したがって、図９は、実行フローに対して適切かつ安全である（すなわち、書き込み要求の失敗が検出された場合に安全に繰り返すことができる）場合に、例えばプログラム５０１などのコンピューティング・アプリケーションおよび関連するＯＳ５０２が、ＥＷＡＣＫモードを有効化／無効化し、ＥＷＡＣＫレジスタ５１２をチェックする必要があるということを示している。これは、失敗した書き込みがメモリ・バス要求ブローカ５１０によって検出される前に、コンピューティング・アプリケーションが実行を開始するためである。そのため、コンピュータ・アプリケーションは、失敗したＥＷＡＣＫ書き込み要求をチェックする必要がある。すなわち、可能性のある書き込み障害を処理し、対処するために、失敗した書き込み要求に関して、アプリケーション・レベルのサポート（例えば、失敗した書き込み要求を検出し、識別し、応答するために、コンピュータ・アプリケーションがメモリ・バス要求ブローカ５１０を支援する）が、メモリ・マップドＥＷＡＣＫレジスタ５１２を適切に検査する必要がある。さらに、コンピュータ・アプリケーション（例えば、アプリケーション・レベルのサポート）は、書き込み障害を処理できないコード・ブロックの場合に、メモリ・バス要求ブローカ５１０でのＥＷＡＣＫ動作モードを無効化する必要がある。ＥＷＡＣＫレジスタ５１２（例えば、メモリ・マップド・レジスタ）へのアクセス待ち時間が極めて小さいため、無視できる程度のオーバーヘッドを伴って、コンピューティング・アプリケーションによってＥＷＡＣＫレジスタ５１２を（頻繁に、または定期的に）検査することができる。オペレーティング・システムのサポートは、アプリケーションがＥＷＡＣＫ動作の無効化を要求する場合、およびＥＷＡＣＫのＤＭＡ転送を書き込み障害から保護するためにも、メモリ・バス要求ブローカ５１０でのＥＷＡＣＫ動作モードを安全に有効化／無効化することが必要になることもある。したがって、発行元アプリケーションが失敗した書き込み要求をＥＷＡＣＫレジスタ５１２で検出した場合、発行元アプリケーションは、１つまたは複数のＥＷＡＣＫレジスタ５１２内で示された失敗したＥＷＡＣＫ書き込み要求を識別したときに、各書き込み要求を再発行することが必要になることがある。
【００８９】
１つの態様では、アプリケーション・レベルのサポートは、ＥＷＡＣＫ  ＯＳサービス登録動作、サービス有効化／無効化動作、およびメモリ書き込み完全性障害動作（memory write integrity barrier operation）から成ってよい。コンピューティング・アプリケーションが、書き込みアクセス失敗の場合に繰り返すことができる処理ブロックに入った場合、アプリケーション・レベルのサポートのサービスが有効化されるべきであり、メモリ完全性障害チェック（memory integrity barrier checks）がコード内に配置されてよい。障害チェックが失敗した場合、コンピューティング・アプリケーションが１つまたは複数の動作を実行してよい。
【００９０】
追加の態様では、オペレーティング・システム・レベルのサポートが、ＯＳのプロセスごとにＥＷＡＣＫサービスを利用可能にする。例えば、プロセス・スケジューラが、ＣＰＵに対して新しいアプリケーションを許可することを決定するたびに、ＯＳは、実際のコンテキスト切り替えの前に、次のチェックを実行してよい。ＯＳは、不均等メモリ・アクセス（「ＮＵＭＡ」：non-uniform memory access）領域をチェックし、コンピュータ・アプリケーションが、ＥＷＡＣＫアクセス対応のメモリを使用しており、アプリケーションが実行されようとしている特定のＣＰＵに対してどのＥＷＡＣＫブローカを有効化または無効化するべきかを決定している（２つ以上のＥＷＡＣＫブローカがコンピュータ・システム内に存在することがあるため）ことを確認してよい。ＥＷＡＣＫ動作を有効化するための有効化コマンドは、アトミック（現在のＣＰＵのブローカ制御レジスタへの１バイトのメモリマップされた書き込み）であってよい。ＥＷＡＣＫ動作のための有効化コマンドの受信時に、ＥＷＡＣＫブローカは、書き込み要求に応答する前に、すべての要求トラフィックを遮断し、送信中のすべての要求が完了するのを待ってよい。受信された送信中のすべての要求の完了後に、要求トラフィックの遮断が解除されてよい。ＥＷＡＣＫ動作を無効化するための無効化コマンドは、どの書き込み要求トラフィックも停止せずに、直ちに適用される。
【００９１】
従来技術を上回る別の追加の特徴および利点として、ＥＷＡＣＫ動作の機能の使用を有効化するために、ユーザ空間ライブラリがアプリケーションに提供されてよい。ユーザ空間ライブラリは、ＯＳレベルのＥＷＡＣＫのサポートによって支援されてよい。下の疑似コード例において示されているように、１つまたは複数の可能性のある「ewackmode_enable」ＡＰＩおよび「ewackmode_disable」ＡＰＩはそれぞれ、現在のプロセスに対して、ＥＷＡＣＫ動作の機能を有効化および無効化する。「ewackmode_enable」動作がユーザ・ライブラリの動作の機能であってよく、前述したハードウェア／ソフトウェアの切り替えの有効化を直接駆動しなくてよいということに、注意するべきである。「ewackmode_check」動作は、書き込み誤りが発生したかどうかをチェックしてよく、プロセスのＥＷＡＣＫレジスタをリセットしてよい。ＥＷＡＣＫモードをいつ使用するべきかの決定、およびチェックの粒度の決定は、アプリケーションに任されている。また、アプリケーションは、実行するべき回復動作（この例では、計算の再開）を決定してよい。
【００９２】
１つまたは複数の可能性のある「ewackmode_enable」ＡＰＩおよび「ewackmode_disable」ＡＰＩの疑似コードはそれぞれ、ＥＷＡＣＫ動作の機能を有効化および無効化する。
#include <libewack.h>
void main(void) {
／／ＥＷＡＣＫはオフである
／／入力を準備するか、または何かを実行する。
／／ＣＰＵは、通常モードの動作である。
／／ＣＰＵの実行に対してＥＷＡＣＫモードを有効化する
／／アプリケーション
ewackmode_enable();
／／誤りが発生した場合（まれな条件）、繰り返す
do {
／／ＥＷＡＣＫモードのおかげで、これが高速になる
some_memory_intensive_computation();
} while (ewackmode_check()); 
ewackmode_disable();
／／場合によっては、さらに何かを実行する
return;
｝
【００９３】
従来技術を上回る別の追加の特徴および利点として、ＯＳのサポートを伴って、ＥＷＡＣＫモードで、ＤＭＡ転送がそれぞれ次のように実行されてよい。オペレーティング・システム・ライブラリを使用して、デバイス・ドライバによって、ＤＭＡエンジンがプログラムされてよい。ＤＭＡ転送を開始する前に、ＯＳが送り先のＮＵＭＡ領域をチェックし、そのＤＭＡ  ＩＤに対して、各ＥＷＡＣＫブローカでＥＷＡＣＫを有効化することを決定してよい。ＤＭＡ転送が完了し、完了割り込みが発行された場合、完了割り込みハンドラとの関連において、制御をアプリケーションに返す前に、ＯＳが、このＤＭＡ転送に割り当てられた各ＥＷＡＣＫブローカのＥＷＡＣＫレジスタをチェックまたは検査してよい。誤り（例えば、書き込み要求の失敗）が報告された場合、ＤＭＡ転送を発行したアプリケーションに制御を渡す代わりに、プログラムされた転送が繰り返されてよい。誤りが報告されていない場合、コンピューティング・システムにおいて実行が通常通り進んでよい。各ＯＳのプロセスおよび（ＤＭＡ用の）デバイス・ドライバは、登録時に固有のＥＷＡＣＫレジスタが割り当てられてよく、プロセスが実行されるときに、更新に対してアクティブであってよい。
【００９４】
ここで図１０を参照すると、実施形態例のさまざまな態様が実装されてよい、アプリケーションによって制御された早期書込み確認応答をサポートするメモリ・アクセス・ブローカ・システムを使用するための方法６００が示されている。すなわち、図１０は、本発明の例に従って、コンピューティング環境内でアプリケーションによって制御された早期書込み確認応答をサポートするメモリ・アクセス・ブローカ・システムを使用するための、追加の例示的な方法６００のフローチャートである。機能６００は、マシン上で命令として実行される方法として実装されてよく、それらの命令は、少なくとも１つのコンピュータ可読記憶媒体または非一過性機械可読記憶媒体に含まれる。機能６００は、ブロック６０２で開始してよい。ブロック６０４で、１つまたは複数の発行元アプリケーションによって検査するために、失敗したＥＷＡＣＫ書き込み要求がメモリ・アクセス・ブローカによって記録されるように、メモリ・アクセス・ブローカが選択的に有効化され、１つまたは複数の発行元アプリケーションへの早期書込み確認応答（ＥＷＡＣＫ）動作および失敗したＥＷＡＣＫ書き込み要求の通知を容易にしてよい。機能６００は、ブロック６０６で終了してよい。
【００９５】
１つの態様では、図１０の少なくとも１つのブロックと連動して、または図１０の少なくとも１つのブロックの一部として、あるいはその両方として、６００の動作が次の各々のうちの１つまたは複数を含んでよい。６００の動作は、書き込み要求の実行時に、メモリ・アクセス・ブローカを選択的に有効化または無効化してよい。メモリ・アクセス・ブローカは、メモリ・バス・マスタとメモリ・コントローラの間の中間ブローカとして機能してよい。６００の動作は、失敗した書き込み要求を、メモリ・アクセス・ブローカに関連付けられた１つまたは複数のＥＷＡＣＫレジスタに記録してよい（例えば、失敗した書き込み要求を示すレジスタ内の１ビットを設定する）。６００の動作は、メモリ・アクセス・ブローカによってメモリ・バス・マスタから書き込み要求を受信するか、またはメモリ・アクセス・ブローカによって、メモリ・バス・マスタから受信された書き込み要求をメモリ・コントローラに発行してよい。
【００９６】
追加の態様では、６００の動作は、メモリ・アクセス・ブローカによってメモリ・コントローラからＷＡＣＫ応答を受信するか、またはメモリ・アクセス・ブローカによって、メモリ・コントローラから受信されたＷＡＣＫ応答をメモリ・バス・マスタに発行してよい。メモリ・アクセス・ブローカは、ＥＷＡＣＫ書き込み要求ごとに書き込み要求識別子（ＩＤ）を生成し、生成された書き込み要求ＩＤをキューに配置してもよい。
【００９７】
６００の動作は、メモリ・アクセス・ブローカによって、メモリ・コントローラから受信されたＷＡＣＫ応答をキューから取り出された生成済みの書き込み要求ＩＤと比較してよい。６００の動作は、キューから取り出された生成済みの書き込み要求ＩＤが、メモリ・コントローラから受信されたＷＡＣＫ応答に一致しないということを決定したときに、メモリ・アクセス・ブローカによって、１つまたは複数のＥＷＡＣＫレジスタ内で失敗したＥＷＡＣＫ書き込み要求を示し、１つまたは複数の発行元アプリケーションによって、１つまたは複数のＥＷＡＣＫレジスタに記録された失敗したＥＷＡＣＫ書き込み要求を識別してよい。さらに、６００の動作は、１つまたは複数のＥＷＡＣＫレジスタ内で示された失敗したＥＷＡＣＫ書き込み要求を識別したときに、１つまたは複数の発行元アプリケーションに対して各書き込み要求を再発行することを要求してよい。
【００９８】
したがって、本明細書において説明されているように、本発明は、メモリ書き込みアクセスに関するアプリケーションの性能を大幅に改善しながら、データの完全性および決定論的プログラム実行を保証するメモリ・アクセス・ブローカ・システムを提供する。メモリ・アクセス・ブローカ・システムは、発行元アプリケーションへの高速なＥＷＡＣＫおよび失敗した書き込み要求の通知を容易にする、ハードウェアのメモリ書き込みアクセス要求ブローカを含んでよい。同時に動作している従来のアプリケーションの実行の完全性に影響を与えずに、メモリ・アクセス・ブローカ・システムを安全に利用するために必要なサポートを有するアプリケーションを提供するために、メモリ・アクセス・ブローカ・システムが、実行時に選択的に有効化され得る。メモリ・アクセス・ブローカ・システムは、アプリケーション・レベルの制御、書き込みの完全性チェック、および失敗した書き込みのアプリケーション・レベルの処理の障害に関する、オペレーティング・システムおよびアプリケーション・プログラミング・インターフェイスのサポートを含む。
【００９９】
このようにして、例えばクラウドおよびデータ中心のシステムなどの、さまざまなコンピューティング・システムおよびアーキテクチャにおけるリモート・メモリの使用を、性能の視点から効果的に可能にすることによって、本発明は、従来技術を上回る追加の特徴および利点を提供する。さらに具体的には、アプリケーションによって制御された早期書込み確認応答をサポートするメモリ・アクセス・ブローカは、非集約型メモリ（例えば、「拡張メモリ」）において実装され、非集約型メモリと共に使用されてよい。したがって、メモリ・アクセス・ブローカ・システムがなければ、メモリ書き込みの待ち時間が非常に大きいままであり続け、リモート・メモリおよび拡張メモリの利益および価値を損なうであろう。
【０１００】
本発明は、システム、方法、またはコンピュータ・プログラム製品、あるいはその組み合わせであってよい。コンピュータ・プログラム製品は、プロセッサに本発明の態様を実行させるためのコンピュータ可読プログラム命令を含んでいるコンピュータ可読記憶媒体を含んでよい。
【０１０１】
コンピュータ可読記憶媒体は、命令実行デバイスによって使用するための命令を保持および格納できる有形のデバイスであることができる。コンピュータ可読記憶媒体は、例えば、電子ストレージ・デバイス、磁気ストレージ・デバイス、光ストレージ・デバイス、電磁ストレージ・デバイス、半導体ストレージ・デバイス、またはこれらの任意の適切な組み合わせであってよいが、これらに限定されない。コンピュータ可読記憶媒体のさらに具体的な例の非網羅的リストは、ポータブル・フロッピー（Ｒ）・ディスク、ハード・ディスク、ランダム・アクセス・メモリ（ＲＡＭ：random access memory）、読み取り専用メモリ（ＲＯＭ：read-only memory）、消去可能プログラマブル読み取り専用メモリ（ＥＰＲＯＭ：erasable programmable read-only memoryまたはフラッシュ・メモリ）、スタティック・ランダム・アクセス・メモリ（ＳＲＡＭ：static random access memory）、ポータブル・コンパクト・ディスク読み取り専用メモリ（ＣＤ−ＲＯＭ：compact disc read-only memory）、デジタル多用途ディスク（ＤＶＤ：digital versatile disk）、メモリ・スティック、フロッピー（Ｒ）・ディスク、パンチカードまたは命令が記録されている溝の中の隆起構造などの機械的にエンコードされるデバイス、およびこれらの任意の適切な組み合わせを含む。本明細書において使用されるとき、コンピュータ可読記憶媒体は、それ自体が、電波またはその他の自由に伝搬する電磁波、導波管またはその他の送信媒体を伝搬する電磁波（例えば、光ファイバ・ケーブルを通過する光パルス）、あるいはワイヤを介して送信される電気信号などの一過性の信号であると解釈されるべきではない。
【０１０２】
本明細書に記載されたコンピュータ可読プログラム命令は、コンピュータ可読記憶媒体から各コンピューティング・デバイス／処理デバイスへ、またはネットワーク（例えば、インターネット、ローカル・エリア・ネットワーク、広域ネットワーク、または無線ネットワーク、あるいはその組み合わせ）を介して外部コンピュータまたは外部ストレージ・デバイスへダウンロードされ得る。このネットワークは、銅伝送ケーブル、光伝送ファイバ、無線送信、ルータ、ファイアウォール、スイッチ、ゲートウェイ・コンピュータ、またはエッジ・サーバ、あるいはその組み合わせを備えてよい。各コンピューティング・デバイス／処理デバイス内のネットワーク・アダプタ・カードまたはネットワーク・インターフェイスは、コンピュータ可読プログラム命令をネットワークから受信し、それらのコンピュータ可読プログラム命令を各コンピューティング・デバイス／処理デバイス内のコンピュータ可読記憶媒体に格納するために転送する。
【０１０３】
本発明の動作を実行するためのコンピュータ可読プログラム命令は、アセンブラ命令、命令セット・アーキテクチャ（ＩＳＡ：instruction-set-architecture）命令、マシン命令、マシン依存命令、マイクロコード、ファームウェア命令、状態設定データ、あるいは、Ｓｍａｌｌｔａｌｋ（Ｒ）、Ｃ＋＋などのオブジェクト指向プログラミング言語、および「Ｃ」プログラミング言語または同様のプログラミング言語などの従来の手続き型プログラミング言語を含む１つまたは複数のプログラミング言語の任意の組み合わせで記述されたソース・コードまたはオブジェクト・コードであってよい。コンピュータ可読プログラム命令は、ユーザのコンピュータ上で全体的に実行すること、ユーザのコンピュータ上でスタンドアロン・ソフトウェア・パッケージとして部分的に実行すること、ユーザのコンピュータ上およびリモート・コンピュータ上でそれぞれ部分的に実行すること、あるいはリモート・コンピュータ上またはサーバ上で全体的に実行することができる。後者のシナリオでは、リモート・コンピュータは、ローカル・エリア・ネットワーク（ＬＡＮ：local area network）または広域ネットワーク（ＷＡＮ：wide area network）を含む任意の種類のネットワークを介してユーザのコンピュータに接続されてよく、または接続は、（例えば、インターネット・サービス・プロバイダを使用してインターネットを介して）外部コンピュータに対して行われてよい。一部の実施形態では、本発明の態様を実行するために、例えばプログラマブル論理回路、フィールドプログラマブル・ゲート・アレイ（ＦＰＧＡ：field-programmable gate arrays）、またはプログラマブル・ロジック・アレイ（ＰＬＡ：programmable logic arrays）を含む電子回路は、コンピュータ可読プログラム命令の状態情報を利用することによって、電子回路をカスタマイズするためのコンピュータ可読プログラム命令を実行してよい。
【０１０４】
本発明の態様は、本明細書において、本発明の実施形態に従って、方法、装置（システム）、およびコンピュータ・プログラム製品のフローチャート図またはブロック図あるいはその両方を参照して説明される。フローチャート図またはブロック図あるいはその両方の各ブロック、ならびにフローチャート図またはブロック図あるいはその両方に含まれるブロックの組み合わせが、コンピュータ可読プログラム命令によって実装され得るということが理解されるであろう。
【０１０５】
これらのコンピュータ可読プログラム命令は、コンピュータまたはその他のプログラム可能なデータ処理装置のプロセッサを介して実行される命令が、フローチャートまたはブロック図あるいはその両方のブロックに指定される機能／動作を実施する手段を作り出すべく、汎用コンピュータ、専用コンピュータ、または他のプログラム可能なデータ処理装置のプロセッサに提供されてマシンを作り出すものであってよい。これらのコンピュータ可読プログラム命令は、命令が格納されたコンピュータ可読記憶媒体がフローチャートまたはブロック図あるいはその両方のブロックに指定される機能／動作の態様を実装する命令を含んでいる製品を備えるように、コンピュータ可読記憶媒体に格納され、コンピュータ、プログラム可能なデータ処理装置、または他のデバイス、あるいはその組み合わせに特定の方式で機能するように指示できるものであってもよい。
【０１０６】
コンピュータ可読プログラム命令は、コンピュータ上、その他のプログラム可能な装置上、またはその他のデバイス上で実行される命令が、フローチャートまたはブロック図あるいはその両方のブロックに指定される機能／動作を実装するように、コンピュータ実装プロセスを生成すべく、コンピュータ、その他のプログラム可能なデータ処理装置、またはその他のデバイスに読み込まれ、コンピュータ上、その他のプログラム可能な装置上、またはその他のデバイス上で一連の動作可能なステップを実行させるものであってもよい。
【０１０７】
図内のフローチャートおよびブロック図は、本発明のさまざまな実施形態に従って、システム、方法、およびコンピュータ・プログラム製品の可能な実装のアーキテクチャ、機能、および動作を示す。これに関連して、フローチャートまたはブロック図内の各ブロックは、規定された論理機能を実装するための１つまたは複数の実行可能な命令を備える、命令のモジュール、セグメント、または部分を表してよい。一部の代替の実装では、ブロックに示された機能は、図に示された順序とは異なる順序で発生してよい。例えば、連続して示された２つのブロックは、実際には、含まれている機能に応じて、実質的に同時に実行されるか、または場合によっては逆の順序で実行されてよい。ブロック図またはフローチャート図あるいはその両方の各ブロック、ならびにブロック図またはフローチャート図あるいはその両方に含まれるブロックの組み合わせは、規定された機能または動作を実行するか、または専用ハードウェアとコンピュータ命令の組み合わせを実行する専用ハードウェアベースのシステムによって実装され得るということにも注意する。
【図１】
2020537227.tif 000003
【図２】
2020537227.tif 000004
【図３】
2020537227.tif 000005
【図４】
2020537227.tif 000006
【図５】
2020537227.tif 000007
【図６】
2020537227.tif 000008
【図７】
2020537227.tif 000009
【図８】
2020537227.tif 000010
【図９】
2020537227.tif 000011
【図１０】
2020537227.tif 000012
【国際調査報告】
2020537227.tif 000013
2020537227.tif 000014