cpc_set_t *cpc_set_create(cpc_t *cpc); int cpc_set_destroy(cpc_t *cpc, cpc_set_t *set); int cpc_set_add_request(cpc_t *cpc, cpc_set_t *set, const char *event, uint64_t preset, uint_t flags, uint_t nattrs, const cpc_attr_t *attrs); int cpc_set_request_preset(cpc_t *cpc, cpc_set_t *set, int index, uint64_t preset);
不透明なデータ型 cpc_set_t は要求のコレクションを表します。これらのコレクションはセットと呼ばれます。cpc_set_create() 関数は空のセットを作成します。cpc_set_destroy() 関数はセットを削除して、セットが使用していたメモリーをすべて解放します。セットを削除すると、そのセットが使用していたハードウェア資源が解放されます。
cpc_set_add_request() 関数は要求をセットに追加します。要求のパラメータは次のとおりです。
カウントのイベント名を指定する文字列。
カウンタの初期値に使用される 64 ビットの符号なし整数。
要求フラグのグループに適用される論理和操作の結果。
attrs が指す配列内の属性の数。
cpc_attr_t 構造体の配列へのポインタ。
有効な要求フラグは次のとおりです。
このフラグを使用すると、CPU がユーザーモードで実行している間に発生するイベントをカウントできます。
このフラグを使用すると、CPU が特権モードで実行している間に発生するイベントをカウントできます。
このフラグは、ハードウェアのカウンタオーバーフローの通知を要求します。
CPC インタフェースは、cpc_attr_t 構造体の配列として属性を渡します。
cpc_set_add_request() 関数が正常終了して戻った場合、この関数はインデックスを返します。インデックスは、cpc_set_add_request() 関数の呼び出しにより追加された要求が生成したデータを参照します。
cpc_set_request_preset() 関数は、事前に設定された要求の値を変更します。これによって、オーバーフローしたセットを新しい事前設定で再構築できます。
cpc_walk_requests() 関数は、ユーザーが提供した action() ルーチンを cpc_set_t 内の要求ごとに呼び出します。arg パラメータの値は、非解釈でユーザーのルーチンに渡されます。cpc_walk_requests() 関数を使用すると、アプリケーションはセット内の要求ごとに構成を出力できます。cpc_walk_requests() 関数の構文は、次のとおりです。
void cpc_walk_requests(cpc_t *cpc, cpc_set_t *set, void *arg, void (*action)(void *arg, int index, const char *event, uint64_t preset, uint_t flags, int nattrs, const cpc_attr_t *attrs));