【手続補正書】
【提出日】平成24年12月6日(2012.12.6)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
マルチプロセッシングシステムにおけるマルチスレッドアプリケーションの決定論的実行を提供するために、前記マルチスレッドアプリケーションを増補するコンピューティングシステムにおける方法であって、
２つ以上のスレッドの実行を指定するマルチスレッドアプリケーションコードにアクセスするステップと、
前記マルチスレッドアプリケーションコードが実行されるとき、前記２つ以上のスレッドのうちの少なくとも１つの別のスレッドによってアクセス可能な状態に影響を与えることができる操作を決定論的順序でそれぞれ前記２つ以上のスレッドに実行させることができる前記マルチスレッドアプリケーションコードに同期コードを自動的に挿入するステップと
を含む方法。
【請求項２】
前記決定論的順序が、前記２つ以上のスレッドが作成された順序である請求項１に記載の方法。
【請求項３】
前記決定論的順序がトークンの値に従って決定されており、
前記２つ以上のスレッドの各スレッドについて、前記２つ以上のスレッドのうちの少なくとも１つによってアクセス可能な状態に影響を与えることができる操作を実行する前に、
前記トークンの前記値を決定するために、前記同期コードを呼び出すステップと、
前記トークンの前記決定された値が前記スレッドのスレッド識別子に一致するとき、前記操作の実行を可能にするステップと、
前記トークンの前記決定された値が前記スレッドのスレッド識別子に一致しないとき、前記スレッドの実行を一時停止するステップと
をさらに含む請求項１に記載の方法。
【請求項４】
コンパイラによって実行される請求項１に記載の方法。
【請求項５】
トランザクショナルメモリシステムを増補するためのコンピューティングシステムにおける方法において、
トランザクショナルメモリシステムのためのコードにアクセスするステップであって、前記コードがマルチスレッドアプリケーションのソースコードからコンパイルされたコードによって呼び出されるインターフェイスの１つまたは複数の実装を含み、前記マルチスレッドアプリケーションソースコードが１つまたは複数のコードブロックをアトミックブロックと宣言し、前記マルチスレッドアプリケーションソースコードが２つ以上のスレッドを指定する、ステップと、
同期コードを含むために前記アクセスされたコードを増補するステップであって、当該同期コードが、特定の入力により前記マルチスレッドアプリケーションコードが実行される度に毎回、トランザクションがコッミットするような特定の順序を指定するものであるもの、と、
を含む方法。
【請求項６】
方法がメモリ操作の順序を制御するためのマルチプロセッシングシステムであり、前記方法が
マルチプロセッシングシステムにおいてマルチスレッドアプリケーションコードを実行するステップであって、前記マルチスレッドアプリケーションコードが複数のスレッドを指定する、ステップと、
前記マルチスレッドアプリケーションコードの前記実行を２つ以上の量子に分割するステップであって、各量子がメモリ操作を含む決定論的数の操作を指定する、ステップと、
前記複数のスレッドが前記２つ以上の量子を実行する決定論的順序を指定するステップと
を含み、前記マルチスレッドアプリケーションコードが実行されるとき、メモリ操作を指定するスレッド間通信が決定論的である。
【請求項７】
前記複数のスレッドのうちの少なくとも１つのスレッドが前記複数のスレッドの別のスレッドによってプライベートに保持されるデータをロードするとき、前記スレッド間通信が行われる請求項６に記載の方法。
【請求項８】
スレッドが別のスレッドによってプライベートに保持されるデータをロードしようと試行するとき、前記複数のスレッドのそれぞれがその実行における決定論的ポイントに到達し、前記スレッドが実行を始めることを前記決定論的順序が指定するまで、前記スレッドの実行を一時停止するステップをさらに含む請求項７に記載の方法。
【請求項９】
前記複数のスレッドのうちの１つのスレッドが前記１つのスレッドによってプライベートに保持されないデータを格納するとき、前記スレッド間通信が行われる請求項６に記載の方法。
【請求項１０】
スレッドが前記スレッドによってプライベートに保持されないデータを格納しようと試行するとき、前記複数のスレッドのそれぞれがその実行における決定論的ポイントに到達し、前記スレッドが実行を始めることを前記決定論的順序が指定するまで、前記スレッドの実行を一時停止するステップをさらに含む請求項９に記載の方法。
【請求項１１】
決定論的順序を指定するステップが、
マルチスレッドアプリケーションコードの中に同期コードを挿入するステップを含み、
前記挿入された同期コードが、１つ又はそれより多いロック又は共有テーブルを実行して、スレッド間通信をモニタする、
請求項６に記載の方法。
【請求項１２】
前記マルチプロセッシングシステムが、トランザクショナルメモリシステムを含み、
決定論的順序を指定するステップが、マルチスレッドアプリケーションコードの中に同期コードを挿入するステップを含み、
同期コードを挿入するステップが、各量子をトランザクション内に封入する（encapsulating）ステップを含み、
前記トランザクショナルメモリシステムが、各トランザクションを、指定された決定論的順序でコミットする、
請求項６に記載の方法。
【請求項１３】
前記決定論的順序がトークンの値に従って指定されており、
前記複数のスレッドごとに、メモリ操作を実行する前に、
前記トークンの前記値を決定するステップと、
前記トークンの前記決定された値が前記スレッドのスレッド識別子に一致するとき、前記複数のスレッドの１つおきのスレッドがその実行における決定論的ポイントに到達すると、前記メモリ操作の実行を可能にするステップと、
前記トークンの前記決定された値が前記スレッドの識別されたスレッドに一致しないとき、前記スレッドの実行を一時停止するステップと
をさらに含む請求項６に記載の方法。
【請求項１４】
マルチスレッドアプリケーションのスレッドのインターリービングを制御するためのマルチプロセッシングシステムであって、
複数のスレッドを指定するマルチスレッドアプリケーションコードと、
前記マルチスレッドアプリケーションコードを、決定論的数の操作をそれぞれ指定する２つ以上の量子に分割するための量子ビルダコンポーネントと、
前記マルチスレッドアプリケーションのスレッドが前記２つ以上の量子を実行する決定論的順序を指定するための決定論的コンポーネントと
を含み、前記マルチスレッドアプリケーションコードの複数の実行中に特定の入力が指定されたとき、各実行が前記特定の入力について同じ出力を生成する
マルチプロセッシングシステム。
【請求項１５】
前記指定された決定論的数の操作内に、制御された操作として指定された特定の操作のみを含めることによって、前記量子ビルダコンポーネントが前記マルチスレッドアプリケーションコードの実行を選択的にシリアル化する請求項１４に記載のシステム。
【請求項１６】
請求項２５に記載のシステムであって、制御された操作として指定された操作が、メモリ操作を含み、
前記複数のスレッドのうちの１つのスレッドが、前記複数のスレッドのうちの別のスレッドの前記状態に影響を与えることができるメモリ操作を実行するとき、前記メモリ操作が前記決定論的コンポーネントによって指定された前記決定論的順序を侵害するかどうかを前記量子化ビルダコンポーネントが決定し、
前記メモリ操作が前記決定論的順序を侵害するとき、前記複数のスレッドの各スレッドがその実行における決定論的ポイントに到達し、前記スレッドが続行することを前記決定論的コンポーネントが指定するまで、前記マルチプロセッシングシステムが前記メモリ操作の実行を一時停止し、
前記メモリ操作が前記決定論的順序を侵害しないとき、前記マルチプロセッシングシステムが前記メモリ操作の実行を許可する、
請求項１５に記載のシステム。
【請求項１７】
前記スレッドが別のスレッドによってプライベートに保持されると見なされるデータをロードまたは格納することを前記メモリ操作が指定するとき、
前記スレッドが前記複数のスレッドによって共有されると見なされるデータを格納することを前記メモリ操作が指定するとき、又は、
前記スレッドが前記複数のスレッドのうちの任意のものによってこれまでアクセスされていないデータをロードまたは格納することを前記メモリ操作が指定するとき、
前記メモリ操作が前記決定論的順序を侵害する請求項１６に記載のシステム。
【請求項１８】
前記マルチプロセッシングシステムが各スレッドの実行を一時停止したとき、又は、各スレッドが量子の実行を終了すると、
前記複数のスレッドの各スレッドがその実行における決定論的ポイントに到達する請求項１６に記載のシステム。
【請求項１９】
同期コードを前記マルチスレッドアプリケーションコード内に挿入することによって、前記量子ビルダコンポーネントが前記マルチスレッドアプリケーションコードを２つ以上の量子に分割する請求項１４に記載のシステム。
【請求項２０】
前記挿入された同期コードが１つまたは複数のロックを含む、又は、メモリ操作を追跡するための共有テーブルを含む、請求項１９に記載のシステム。
【請求項２１】
トランザクショナルメモリシステムをさらに含み、前記挿入された同期コードが各量子をトランザクション内に封入し、各トランザクションが前記決定論的コンポーネントによって指定された前記決定論的順序でコミットされる請求項１９に記載のシステム。
【請求項２２】
前記トランザクションが並行して実行され、２つ以上の並行して実行されるトランザクション間に競合が存在するとき、前記トランザクションのうちの少なくとも１つが、前記決定論的順序に従って中止され、再開される、請求項２１に記載のシステム。
【請求項２３】
前記含まれるトランザクショナルメモリシステムがハードウェアトランザクショナルメモリシステム、ソフトウェアトランザクショナルメモリシステム、ハイブリッドハードウェア−ソフトウェアトランザクショナルメモリシステム、およびトランザクショナルメモリシステムの組み合わせを含むグループから選択される請求項２１に記載のシステム。
【請求項２４】
前記決定論的順序が、前記複数のスレッドのそれぞれが作成された順序に基づいて指定される請求項１４に記載のシステム。
【請求項２５】
前記決定論的順序が、前記マルチスレッドアプリケーションコードのソフトウェア開発者によって前記決定論的コンポーネントに対して指定される請求項１４に記載のシステム。
【請求項２６】
マルチプロセッシングシステムに、マルチスレッドアプリケーションのスレッドによって実行されるメモリ操作の順序を制御させることができるコードを格納するコンピュータ可読記憶媒体において、前記コードが、
マルチスレッドアプリケーションコードを複数の量子に分割するためのコードであって、各量子が決定論的な有限数のメモリ操作を指定する、コードと、
各量子を、前記マルチスレッドアプリケーションによって指定された２つ以上のスレッドのうちの１つによって決定論的にコミットされるトランザクション内に封入するためのコードと
を含み、前記マルチプロセッシングシステムがトランザクショナルメモリシステムと共に動作する
コンピュータ可読記憶媒体。
【請求項２７】
トランザクション内に封入される各量子が、前記２つ以上のスレッドが作成される順序に従って前記２つ以上のスレッドのうちの一方によって決定論的にコミットされる請求項２６に記載のコンピュータ可読記憶媒体。
【請求項２８】
請求項２６に記載のコンピュータ可読記憶媒体であって、
２つ以上の多いスレッドによってトランザクションがコミットされる前に、更に、１つのスレッドの実行を一時停止するために、
前記２つ以上の多いスレッドの各々が、その実行中に、決定論的ポイントに到達し、そして、トークンが、前記スレッドが、前記トランザクションをコミットすべきことを指定するまで、コードを格納する、コンピュータ可読記憶媒体。
【請求項２９】
各スレッドがトランザクションの実行を完了すると、各スレッドがその実行における決定論的ポイントに到達する請求項２８に記載のコンピュータ可読記憶媒体。
【請求項３０】
前記マルチスレッドアプリケーションコードが、前記マルチスレッドアプリケーションコードのソフトウェア開発者によって指定された１つまたは複数のトランザクショナルメモリブロックを含み、前記コードが前記１つまたは複数のトランザクショナルメモリブロックを増補するためにさらに使用される請求項２６に記載のコンピュータ可読記憶媒体。