ロックラインリザベーションによりキャッシュラインをロック可能なアトミックキャッシュを含むプロセッサと、前記プロセッサがデータを書き出す、複数のセグメントに分けられたリングバッファと、前記リングバッファのセグメントからデータを読み出して処理する外部デバイスと、前記リングバッファの各セグメントに対応づけられたクエリデータを有するクエリバッファとを含み、前記プロセッサは、前記リングバッファのセグメントにデータを書き込むと、そのセグメントに対応するクエリデータに規定値を書き込み、前記外部デバイスは、前記リングバッファのセグメントからデータを読み出すと、そのセグメントに対応するクエリデータに前記規定値とは異なる値を書き込み、前記プロセッサは、前記アトミックキャッシュを用いて前記クエリバッファのクエリデータに対してロックラインリザベーションを行い、前記アトミックキャッシュを参照することにより、前記クエリバッファのクエリデータにアクセスし、前記外部デバイスによりクエリデータの値の書き換えがなされた場合に、ロックラインリザベーションロストイベントの通知を受けることを特徴とするプロセッサシステム。前記プロセッサは、ロックラインリザベーションロストイベントの通知を受けたセグメントに新たなデータを書き込むことを特徴とする請求項1に記載のプロセッサシステム。前記外部デバイスは、前記プロセッサと入出力インタフェースを介して接続されたグラフィックスプロセッサであり、前記プロセッサは、テクスチャデータを生成して前記リングバッファのセグメントに書き込み、前記グラフィックスプロセッサは、前記リングバッファのセグメントからテクスチャデータを読み出して実行することを特徴とする請求項1または2に記載のプロセッサシステム。ロックラインリザベーションによりキャッシュラインをロック可能なアトミックキャッシュを含むプロセッサと、前記プロセッサがデータを書き出す、複数のセグメントに分けられたリングバッファと、前記リングバッファのセグメントからデータを読み出して処理する外部デバイスと、前記リングバッファの各セグメントに対応づけられたクエリデータを有するクエリバッファとを含むプロセッサシステムにおけるバッファ管理方法であって、前記プロセッサは、前記リングバッファのセグメントにデータを書き込むと、そのセグメントに対応するクエリデータに規定値を書き込み、前記外部デバイスは、前記リングバッファのセグメントからデータを読み出すと、そのセグメントに対応するクエリデータに前記規定値とは異なる値を書き込み、前記プロセッサは、前記アトミックキャッシュを用いて前記クエリバッファのクエリデータに対してロックラインリザベーションを行い、前記アトミックキャッシュを参照することにより、前記クエリバッファのクエリデータにアクセスし、前記外部デバイスによりクエリデータの値の書き換えがなされた場合に、ロックラインリザベーションロストイベントの通知を受けることを特徴とするバッファ管理方法。ロックラインリザベーションによりキャッシュラインをロック可能なアトミックキャッシュを含むプロセッサと、前記プロセッサがデータを書き出す、複数のセグメントに分けられたリングバッファと、前記リングバッファのセグメントからデータを読み出して処理する外部デバイスと、前記リングバッファの各セグメントに対応づけられたクエリデータを有するクエリバッファとを含むプロセッサシステムにおいて前記プロセッサに実行させるバッファ管理のためのプログラムであって、前記リングバッファのセグメントにデータを書き込む際、そのセグメントに対応するクエリデータに規定値を書き込むステップと、前記アトミックキャッシュを用いて前記クエリバッファのクエリデータに対してロックラインリザベーションを行い、前記アトミックキャッシュを参照することにより、前記クエリバッファのクエリデータにアクセスするステップと、前記外部デバイスが前記リングバッファのセグメントからデータを読み出し、そのセグメントに対応するクエリデータに前記規定値とは異なる値を書き込むことにより、クエリデータの値の書き換えがなされた場合に、ロックラインリザベーションロストイベントの通知を受けるステップとを前記プロセッサに実行させることを特徴とするプログラム。外部装置のステータスを確認するために外部装置のレジスタを参照する方法では、レジスタアクセスが非常に低速であり、値を読み込むまで主計算装置が停止してしまうという問題がある。また、主記憶およびレジスタへの頻繁な読み込み命令は、データバスの負荷となる。特に、複数のプロセッサがデータバスを共有している環境においては、この負荷は他のプロセッサのメモリアクセス性能の低下につながる。さらに、レジスタの読み込みを行っているCPUによって、消費電力が増大する。外部装置のステータスを確認するために割り込みinterruptを利用する方法もあるが、割り込みの場合、実際にプロセッサがその割り込みを処理するまでに大きな時間がかかるため、外部装置が処理すべきデータを割り当てるまでに時間が空いてしまいリアルタイムシステムにおいてはリアルタイム性に問題が生じる。本発明はこうした課題に鑑みてなされたものであり、その目的は、プロセッサと外部デバイスがアクセスするバッファを効率的良く管理することのできる技術を提供することにある。上記課題を解決するために、本発明のある態様のプロセッサシステムは、ロックラインリザベーションによりキャッシュラインをロック可能なアトミックキャッシュを含むプロセッサと、前記プロセッサがデータを書き出す、複数のセグメントに分けられたリングバッファと、前記リングバッファのセグメントからデータを読み出して処理する外部デバイスと、前記リングバッファの各セグメントに対応づけられたクエリデータを有するクエリバッファとを含む。前記プロセッサは、前記リングバッファのセグメントにデータを書き込むと、そのセグメントに対応するクエリデータに規定値を書き込み、前記外部デバイスは、前記リングバッファのセグメントからデータを読み出すと、そのセグメントに対応するクエリデータに前記規定値とは異なる値を書き込み、前記プロセッサは、前記アトミックキャッシュを用いて前記クエリバッファのクエリデータに対してロックラインリザベーションを行い、前記アトミックキャッシュを参照することにより、前記クエリバッファのクエリデータにアクセスし、前記外部デバイスによりクエリデータの値の書き換えがなされた場合に、ロックラインリザベーションロストイベントの通知を受ける。本発明の別の態様は、バッファ管理方法である。この方法は、ロックラインリザベーションによりキャッシュラインをロック可能なアトミックキャッシュを含むプロセッサと、前記プロセッサがデータを書き出す、複数のセグメントに分けられたリングバッファと、前記リングバッファのセグメントからデータを読み出して処理する外部デバイスと、前記リングバッファの各セグメントに対応づけられたクエリデータを有するクエリバッファとを含むプロセッサシステムにおけるバッファ管理方法であって、前記プロセッサは、前記リングバッファのセグメントにデータを書き込むと、そのセグメントに対応するクエリデータに規定値を書き込み、前記外部デバイスは、前記リングバッファのセグメントからデータを読み出すと、そのセグメントに対応するクエリデータに前記規定値とは異なる値を書き込み、前記プロセッサは、前記アトミックキャッシュを用いて前記クエリバッファのクエリデータに対してロックラインリザベーションを行い、前記アトミックキャッシュを参照することにより、前記クエリバッファのクエリデータにアクセスし、前記外部デバイスによりクエリデータの値の書き換えがなされた場合に、ロックラインリザベーションロストイベントの通知を受ける。なお、以上の構成要素の任意の組合せ、本発明の表現を方法、装置、システム、コンピュータプログラム、データ構造、記録媒体などの間で変換したものもまた、本発明の態様として有効である。本発明によれば、プロセッサと外部デバイスがアクセスするバッファを効率的良く管理することができる。図1は、実施の形態に係るグラフィックス処理システムの構成図である。このグラフィックス処理システムは、メインプロセッシングユニット100と、グラフィックスプロセッシングユニット140と、システムメモリ180と、ローカルメモリ160とを含む。メインプロセッシングユニット100は、単一のメインプロセッサであってもよく、複数のプロセッサを含むマルチプロセッサシステムであってもよく、あるいは、複数のプロセッサコアを1個のパッケージに集積したマルチコアプロセッサであってもよい。ここでは、一例として、メインプロセッシングユニット100は、メインプロセッサ101と複数のサブプロセッサ110とを含むヘテロジニアスHeterogeneous異種混合マルチコアプロセッサである。メインプロセッサ101と複数のサブプロセッサ110はバス120に接続されており、バス120にはメモリインタフェース170を介してシステムメモリ180が接続されている。メインプロセッサ101と複数のサブプロセッサ110はバス120を介してシステムメモリ180に対してデータを読み書きすることができる。バス120には入出力インタフェース以下、IOIFと呼ぶ130を介して外部デバイス190が接続されている。ここでは、一例であり、これに限定するものではないが、外部デバイス190は、グラフィックスプロセッシングユニット140とローカルメモリ160を含む。グラフィックスプロセッシングユニット以下、単にGPUという140は、グラフィックプロセッサコアを搭載したグラフィックチップであり、ローカルバス150を介してローカルメモリ160に対してデータを読み書きすることができる。メインプロセッシングユニット100とGPU140は、IOIF130で接続されており、メインプロセッシングユニット100とGPU140は互いにIOIF130を介してデータをやりとりすることができる。メインプロセッシングユニット100は、オブジェクトを描画するための描画コマンドを生成し、システムメモリ180内に設けられたコマンドバッファにキューイングする。GPU140は、コマンドバッファに蓄積された描画コマンドを順次読み出して処理する。メインプロセッシングユニット100は、オブジェクトの3次元モデルにもとづいて、ポリゴンの頂点座標値、頂点カラー、法線ベクトル、UV値などのジオメトリデータを生成し、システムメモリ180に格納する。また、メインプロセッシングユニット100は、ポリゴン表面にマッピングするためのテクスチャをシステムメモリ180に格納する。さらに、メインプロセッシングユニット100は、ハードディスクなどの記録媒体からシェーダプログラムを読み込み、システムメモリ180に格納する。システムメモリ180のメモリ領域はI/Oアドレス空間にメモリマッピングされており、GPU140は、I/Oアドレス空間にメモリマップされたシステムメモリ180のメモリ領域をIOIF130経由で読み取ることができる。ジオメトリデータ、テクスチャおよびシェーダプログラムが格納されたシステムメモリ180内のメモリ領域は、IOIF130のコントローラに設けられたメモリ内のI/Oアドレス空間にメモリマッピングされる。GPU140は、IOIF130を介して、I/Oアドレス空間にメモリマッピングされたジオメトリデータ、テクスチャおよびシェーダプログラムを読み出す。GPU140は、システムメモリ180から読み出したジオメトリデータ、テクスチャなどグラフィックス演算に必要なデータをローカルメモリ160に格納することができる。GPU140は、シェーダプログラムにしたがって、ジオメトリデータを用いてポリゴンのラスタライズデータを生成し、ピクセルデータをローカルメモリ160内のフレームバッファに書き込む。さらに、GPU140は、ポリゴン表面にテクスチャをマッピングし、テクスチャマッピング後のピクセルデータをフレームバッファに書き込む。図2は、図1のグラフィックス処理システムにおけるバッファ管理方法を説明する図である。サブプロセッサ110は、テクスチャデータをローカルメモリ210内に設けられたレンダリングリソースバッファ250に書き出す。GPU140は、レンダリングリソースバッファ250からテクスチャデータを読み出して実行する。サブプロセッサ110は、ローカルストレージ220を有しており、ローカルストレージ220内のテクスチャバッファ252は、ローカルメモリ210内のレンダリングリソースバッファ250にメモリマップされている。図2において、点線の矢印は、テクスチャデータをDMAputコマンドにより、ローカルメモリ210のレンダリングリソースバッファ250に書き出すことを示している。レンダリングリソースバッファ250は、リングバッファである。サブプロセッサ110がレンダリングリソースバッファ250にテクスチャデータを書き込み、GPU140がレンダリングリソースバッファ250からテクスチャデータを読み出すことから、リングバッファのどのセグメントまでサブプロセッサ110が書き込めるか、つまり、GPU140がリングバッファのどのセグメントまでテクスチャデータを読み出し、使用済みとなったかをサブプロセッサ110に通知する必要がある。レンダリングリソースバッファ250のセグメントがGPU140により未使用であるか使用済みであるかをサブプロセッサ110に通知するために、クエリバッファ240がメインメモリ200に設けられる。クエリバッファ240は、レンダリングリソースバッファ250の各セグメントに対応づけられたクエリデータを含む。サブプロセッサ110のローカルストレージ220内のクエリバッファ242は、メインメモリ200内のクエリバッファ240にメモリマップされている。サブプロセッサ110は、レンダリングリソースバッファ250のセグメントにテクスチャデータを書き込んだとき、テクスチャデータを書き込んだレンダリングリソースバッファ250のセグメントに対応づけられたクエリバッファ240のクエリデータに後述するピクセル数がとりえない値例えば、0xffffffffを事前に決定して書き込む。一方、GPU140は、レンダリングリソースバッファ250のセグメントからテクスチャデータ読み出しを終了したとき、テクスチャデータを読み出したレンダリングリソースバッファ250のセグメントに対応づけられたクエリバッファ240のクエリデータに生成したピクセル数を書き込み、使用済みであることをサブプロセッサ110に知らせる。図2において、一点鎖線の矢印は、GPU140がクエリバッファ240のクエリデータを書き換えることを示している。クエリバッファ240は、サブプロセッサ110とGPU140の両方によってアクセスされるため、同期を取る必要がある。クエリバッファ240の同期を取るために、サブプロセッサ110にはアトミックキャッシュ230が設けられる。アトミックキャッシュ230は、クエリバッファ240のクエリデータに対するロックラインリザベーションを管理する。図2において、実線の矢印は、アトミック操作を示す。図3aは、クエリバッファ240のデータ構造を示し、図3bは、レンダリングリソースバッファ250のデータ構造を示す。図3aに示すように、クエリバッファ240は、サイズが32バイトであり、4バイト単位に8つのクエリデータに分割されており、8つのクエリデータにはインデックス0~7が付けられている。インデックス0~7のいずれかを指定することでクエリバッファ240の指定されたクエリデータにアクセスすることができる。クエリバッファ240は、アトミックキャッシュによってロックラインリザベーションをかけることができるように、メインメモリ200上で128バイトでアライメントされている。図3bに示すように、レンダリングリソースバッファ250は、一例として2~4メガバイトのサイズであり、8つのセグメントに分割されており、1セグメントは256~512キロバイトである。8つのセグメントは、クエリバッファ240と同様にインデックス0~7が付けられている。レンダリングリソースバッファ250の8つのセグメントのインデックス0~7は、クエリバッファ240の8つのクエリデータのインデックス0~7にそれぞれ対応している。クエリバッファ240のインデックスii=0~7のクエリデータは、レンダリングリソースバッファ250の対応するインデックスiのセグメントに保持されたデータが未使用であるか使用済みであるかを示すために用いられる。図4は、クエリバッファ240のクエリデータのデータ構造を示す図である。ここでは、クエリデータは生成したピクセル数を表す4バイトデータを含むものとする。ピクセル数は、サブプロセッサ110により、レンダリングリソースバッファ250のセグメントにテクスチャが書き込まれたとき、ピクセル数がとりえない値例えば、0xffffffffを書き込まれ、GPU140により、レンダリングリソースバッファ250のセグメントからテクスチャが読み出されたとき、生成したピクセル数に書き換えられる。図2に戻り、サブプロセッサ110は、テクスチャデータを随時生成し、レンダリングリソースバッファ250に蓄積する。サブプロセッサ110は、レンダリングリソースバッファ250のセグメント境界を越えてテクスチャデータを蓄積する度に、使用するセグメントのインデックスと同一のインデックスをもつクエリバッファ240のクエリデータを規定値0xffffffffに書き換え、GPU140がそのセグメント内のテクスチャを利用し終わったときに、そのクエリデータを規定値以外の値生成したピクセル数に書き換えるコマンドを生成されたテクスチャデータを利用する描画コマンドの後に積む。その後、後述するアトミックキャッシュ230を用いたロックラインリザベーションにより同期制御を行う。一方、GPU140は、サブプロセッサ110が生成したテクスチャデータをレンダリングリソースバッファ250上で随時走査し、実行する。サブプロセッサ110は、レンダリングリソースバッファ250のセグメントを超える際、クエリバッファ240を読み込み、レンダリングリソースバッファ250の次のセグメントのインデックスと同一のインデックスのクエリバッファ240のクエリデータが規定値であるかどうかをチェックする。次のセグメントに対応するクエリデータがGPU140によって規定値0xffffffff以外の値に書き換えられていれば、次のセグメントのバッファは使用済みであり、新しいデータで書き換えることが可能であるが、次のセグメントに対応するクエリデータが規定値のままであれば、そのセグメントのバッファはまだGPU140が使用を完了していないことを意味するため、規定値0xffffffff以外に書き換えられるまで待つ必要がある。本実施の形態では、データバスおよびメインメモリにアトミックキャッシュ機能を有する。アトミックキャッシュ機能を用いれば、サブプロセッサ110は、下記のロックラインリザベーションを用いた同期制御によってGPU140のような外部デバイスからの書き込みを待つことが可能である。図5~図7を参照して、まずアトミックキャッシュの一般的な機能について説明した上で、図8を参照して、本実施の形態のアトミックキャッシュを利用した同期制御機構を説明する。アトミックキャッシュは、複数のプロセッサが、プロセッサ間で共有する変数を不可分アトミックに更新するために実装された機能であり、リードReadをブロックすることなく、共有変数を不可分に更新できる非ブロッキング同期NonBlockingSynchronizationを提供する。図5は、共有変数をアトミックに更新するマルチプロセッサシステムを説明する図である。複数のサブプロセッサ110ここではサブプロセッサA~Cはバス120に接続されており、システムメモリ180はメモリインタフェース170を介してバス120に接続されている。複数のサブプロセッサ110のそれぞれにアトミックキャッシュ230が設けられる。複数のサブプロセッサ110が共有する変数はシステムメモリ180に保持されており、各サブプロセッサ110は、メモリインタフェース170を介してシステムメモリ180上の共有変数にアクセスする。キャッシュラインは、システムメモリ180の128バイト境界にアラインされた128バイトの領域である。aロックラインリザベーションLockLineReservationサブプロセッサ110からアトミックキャッシュユニットへのコマンドにより、指定されたキャッシュライン上のデータをサブプロセッサ110のローカルストレージ220に転送し、ロックラインとして予約することをバスに通知する。これをロックラインリザベーションという。ロックラインリザベーションの実行により、リザベーション予約を示すフラグが設定される。サブプロセッサ110から同一のキャッシュラインへ更新コマンドを発行した場合、リザベーションが保持されている状態であれば、更新は完了し、リザベーションを失っていればデータの更新は失敗する。bロックラインリザベーションロストイベントLockLineReservationLostEvent他のサブプロセッサ110やデバイスによって、キャッシュラインが1ビットでも変更されると、バスは、ロックラインリザベーションを破棄し、ロックラインリザベーションをかけたサブプロセッサ110にイベント通知を行う。このイベントをロックラインリザベーションロストイベントという。サブプロセッサ110は、ロックラインリザベーションの喪失をこのイベント通知によって知ることができる。図6は、サブプロセッサ110から見た共有変数のアトミック更新の手順を示すフローチャートである。サブプロセッサ110は、GetLockLineandReserveコマンドをバスに通知し、ロックラインリザベーションとそのキャッシュラインの値を取得するS10。サブプロセッサ110は、取得したキャッシュラインの値、すなわち共有変数をサブプロセッサ110のローカルストレージ220上で更新するS12。サブプロセッサ110は、更新した値をメインメモリへ書き込むために、PutLockLineConditionalコマンドをバスへ送るS14。ステップS10でロックラインリザベーションをかけてから、ステップS12でサブプロセッサ110が共有変数を更新し、ステップS14で更新した値をメインメモリに書き込むコマンドをバスへ送るまでの間に、他のサブプロセッサやデバイスからの書きこみでロックラインが1ビットでも更新されるとロックラインリザベーションは失われ、更新は失敗する。PutLockLineConditionalコマンドが成功した場合S16のY、ロックラインリザベーションは残っていることを意味し、メインメモリの共有変数は新しい値で更新されてたことがわかる。PutLockLineConditionalコマンドが失敗した場合S16のN、ロックラインリザベーションは失われていることを意味し、メインメモリの共有変数は更新されなかったことがわかる。この場合、ステップS10に戻り、ロックラインリザベーションをやり直す。図7aは、バス120から見たGetLockLineandReserveコマンドの処理手順を示すフローチャートである。バス120は、サブプロセッサ110からのGetLockLineandReserveコマンドを受けつけるS20。バス120は、サブプロセッサ110へロックラインの値を返し、ロックラインリザベーションを確保するS22。他のサブプロセッサ110またはデバイスからこのロックラインへの更新が発生した場合S24のY、バス120は、ロックラインリザベーションを破棄し、ロックラインリザベーションを取得したサブプロセッサ110へロックラインリザベーションロストイベントを送信するS26。他のサブプロセッサ110からもデバイスからもこのロックラインへの更新が行われない場合S24のN、ロックラインリザベーションロストイベントは発生しない。図7bは、バス120から見たPutLockLineConditionalコマンドの処理手順を示すフローチャートである。バス120は、サブプロセッサ110からのPutLockLineConditionalコマンドを受けつけるS30。バス120は、ロックラインリザベーションが保持されているかどうかを調べS32、ロックラインリザベーションが保持されている場合S32のY、バス120は、メモリの値を更新し、サブプロセッサ110へPutLockLineConditionalコマンドの成功を通知するS34。ロックラインリザベーションが失われている場合S32のN、バス120は、メモリの値を更新せず、サブプロセッサ110へPutLockLineConditionalコマンドの失敗を通知するS36。図6および図7a、図7bを参照して共有変数のアトミック更新の手順を説明したが、このアトミックキャッシュ機構は、本来は、複数のサブプロセッサ110間で共有されるデータに対する同期、およびメインプロセッサ101とサブプロセッサ110間で共有されるデータに対する同期のために用意されたものである。本実施の形態では、このアトミックキャッシュ機構を、メインプロセッサ101またはサブプロセッサ110がGPU140のような外部デバイス190と共有するデータに対する同期に応用している。従来は、外部デバイスとの同期は、割り込みやレジスタ参照によって管理されるが、アトミックキャッシュを用いると、従来の方法と比較して高い応答性を実現できる。そのため、小さなメモリでリングバッファを構成して効率良く処理を進めることができる。アトミックキャッシュ機構を用いると、ロックラインリザベーションでキャッシュラインをロックすることができ、ロックラインがロストしたことをロックラインリザベーションロストイベントの通知により知ることができる。なお、アトミックキャッシュは通常のキャッシュのようなキャッシュコヒーレンシを保つための複雑な機能を備えておらず、ロックラインがロストしたことをイベント通知するだけのシンプルな機能を備えている。クエリバッファ240はメインメモリ200に保持され、サブプロセッサ110はメインメモリ200上のクエリバッファ240にアトミックキャッシュ230を利用してアクセスするため、クエリバッファ240のクエリデータがGPU140による書き込みによって更新されたことをサブプロセッサ110はロックラインリザベーションロストイベントにより知ることができる。つまりサブプロセッサ110は、GPU140がクエリデータを書き込むまでメインメモリ200からデータを読み込むことなしに、GPU140からの通知を受け取ることができ、スリーピングロックを実現することができる。レンダリングリソースバッファ250を複数のセグメントに分け、クエリバッファ240内に各セグメントに対応するクエリデータを1つずつ設けることで、GPU140がどのセグメントの使用を終えたかをサブプロセッサ110に通知することができる。クエリデータのサイズが4バイトであり、128バイトのアトミックキャッシュラインに最大32個のクエリデータを収めることができるが、ここではセグメントの数は8個とする。セグメントの数は、レンダリングリソースバッファ250の大きさ、サブプロセッサ110およびGPU140の速度から適宜決定される。図8a~cは、本実施の形態に係るアトミックキャッシュを用いたバッファ管理の手順を説明するフローチャートである。図8aを参照して、サブプロセッサ110は、レンダリングリソースバッファ250の現在使用しているセグメントから必要量のバッファをとれるかどうかを調べるS40。現在のセグメントに空きが十分あり、必要量のバッファを取れる場合S40のY、現在のセグメントから必要なバッファを確保するS44。現在のセグメントに空きが不足しており、必要量のバッファを取れない場合S40のN、次のセグメントを利用するために、セグメント切り替え処理を実行するS42。図8bは、ステップS42のセグメント切り替え処理の詳細な手順を説明するフローチャートである。レンダリングリソースバッファ250の現在のセグメントに対してデータの作成が完了したことを示す規定値を現在のセグメントのインデックスに対応するクエリバッファ240のクエリデータに書き込むS50。GPU140がセグメント内のデータの使用を完了したことを示す非規定値を対応するクエリバッファに書き込むGPUコマンドを生成されたデータの最後に積むS52。これにより、GPU140がセグメント内のデータを全部読み終えると、対応するクエリバッファに非規定値を書き込むコマンドが実行され、クエリバッファの値が0xffffffffから生成したピクセル値に書き換えられる。アトミックキャッシュを利用したポーリングを実行しS54、ポーリングの後、セグメントを切り替え、次のセグメントに移るS56。図8cは、S54のアトミックキャッシュを利用したポーリング処理の詳細な手順を説明するフローチャートである。クエリバッファ240のクエリデータのロックラインリザベーションの確保とクエリデータの値の読み込みを行うS60。監視しているセグメント次に利用するセグメントに対応するクエリバッファ240のクエリデータが0xffffffffかどうかを判定するS62。監視セグメントのクエリデータが0xffffffffでない場合S62のN、監視セグメントは既にデータがGPU140により使用済みであることを意味するから、処理を終了する。この場合、図8bのステップS56に進み、セグメントの切り替えがなされ、次のセグメントを利用することができる。監視セグメントのクエリデータが0xffffffffである場合S62のY、監視セグメント内のデータはGPU140によってまだ使用されていないことを意味するから、ロックラインリザベーションロストイベントの発生を待つS64。ロックラインリザベーションロストイベントを待つ間、サブプロセッサ110はスリープする。ロックラインリザベーションロストイベントが発生すると、ステップS60に戻る。本実施の形態のバッファ管理機構は、GPU140によるクエリデータの書き込みを、サブプロセッサ110側からアトミックキャッシュ230経由でクエリデータを参照することにより、ロックラインリザベーションロストイベントの発生として検知するというものである。この方法はスピンロックによるポーリングと比較して、メインメモリ200へのリードリクエストが発生せず低負荷で実行可能である。また、サブプロセッサ110の反応速度が速い、つまりGPU140があるセグメントを使い終わると直ちにサブプロセッサ110がそのセグメントを獲得できるという利点がある。このバッファ管理機構は、GPU140が早期に処理を完了する見込みがあり、一刻も速くサブプロセッサ110のレンダリングスレッドの処理を終了させたい場合に特に有効である。一方、GPU140がセグメントを使い終えるまで待つ間、サブプロセッサ110を独占してしまうため、待ち時間を予測して、サブプロセッサ110が他のタスクやワークロードを実行することができるようにすることがより好ましい。以上述べたように、本実施の形態のバッファ管理機構によれば、従来技術の割り込みによる方法と比べ、外部装置からのメモリ書き込みに対して即時にCPUが反応することができ、外部装置をより効率的に利用することができる。また、本実施の形態のバッファ管理機構によれば、従来技術のメモリを直接ポーリングする方法に比べ、データバスに負荷をかけずに動作することができる。さらに、消費電力を削減することができ、モバイル環境では特に有益である。また、外部記憶装置との間に小さなメモリ量でリングバッファ構築することができる。さらに一般化するなら、本実施の形態のバッファ管理機構は、比較的レイテンシーの短いリアルタイム処理を担当する外部デバイスとの同期に利用することで、小さなリソースで外部デバイスの性能を引き出すことが可能である。たとえば、コーデックチップによる符号化/復号の完了を待つ場合などでも利用可能である。なお、1つの実施形態として図3aで表されるクエリバッファ、図4で表される1セグメントのクエリデータを示したが、本発明はこれらの構成に限られない。例えば、1セグメントに対応するクエリデータを1ビットのフラグ情報として形成することも可能である。具体的には、1024個のセグメントに対応する1024bit128Byteのフラグ領域を用意しサブプロセッサ110がセグメントにデータを生成し終えた時、対応するフラグ領域のビットを1とする。外部デバイスがデータを処理し終えて、セグメントを越える際に、対応するフラグ領域のビットを0に変更することで実現される。以上、本発明を実施の形態をもとに説明した。実施の形態は例示であり、それらの各構成要素や各処理プロセスの組合せにいろいろな変形例が可能なこと、またそうした変形例も本発明の範囲にあることは当業者に理解されるところである。上記の説明では、外部デバイス190の一例として、GPU140を説明したが、外部デバイス190は、コーデックエンジンやネットワーク機器であってもよい。外部デバイス190の種類に関係なく、本実施の形態のアトミックキャッシュを用いたリングバッファ管理機構を適用することができる。