プログラミングインタフェース

バッファー操作

次のルーチンにより、cpc_buf_t 構造体内のデータにアクセスできます。

int cpc_buf_get(cpc_t *cpc, cpc_buf_t *buf, int index, uint64_t *val);
int cpc_buf_set(cpc_t *cpc, cpc_buf_t *buf, int index, uint64_t *val);
hrtime_t cpc_buf_hrtime(cpc_t *cpc, cpc_buf_t *buf);
uint64_t cpc_buf_tick(cpc_t *cpc, cpc_buf_t *buf);
int cpc_buf_sub(cpc_t *cpc, cpc_buf_t *result, cpc_buf_t *left
      cpc_buf_t *right);
int cpc_buf_add(cpc_t *cpc, cpc_buf_t *result, cpc_buf_t *left,
      cpc_buf_t *right);
int cpc_buf_copy(cpc_t *cpc, cpc_buf_t *dest, cpc_buf_t *src);
void cpc_buf_zero(cpc_t *cpc, cpc_buf_t *buf);

cpc_buf_get() 関数は、index パラメータで特定したカウンタの値を取得します。index パラメータは、セットがバインドされる前に cpc_set_add_request() 関数で返された値です。cpc_buf_get() 関数は、val パラメータが示す位置のカウンタを格納します。

cpc_buf_set() 関数は、index パラメータで特定したカウンタの値を設定します。index パラメータは、セットがバインドされる前に cpc_set_add_request() 関数で返された値です。cpc_buf_set() 関数は、val パラメータが示す位置の値にカウンタの値を設定します。cpc_buf_get() 関数または cpc_buf_set() 関数のどちらも、対応する CPC 要求の事前設定を変更しません。

cpc_buf_hrtime() 関数は、いつハードウェアが抽出されたかを示す高精度な時刻表示を返します。cpc_buf_tick() 関数は、LWP の実行中に経過した CPU クロックサイクルの数を返します。

cpc_buf_sub() 関数は、leftright パラメータで指定されたカウンタとクロック刻み値の違いを計算します。cpc_buf_sub() 関数は、result に結果を格納します。cpc_buf_sub() 関数の呼び出しでは、cpc_buf_t 値がすべて同じ cpc_set_t 構造体から由来する必要があります。result インデックスは、バッファー内の要求インデックスごとの left - right の計算結果を含みます。また、結果のインデックスは tick の違いも含みます。cpc_buf_sub() 関数は、出力先バッファーについての高精度な時刻表示を、left または right バッファーの最新時刻に設定します。

cpc_buf_add() 関数は、leftright パラメータで指定されたカウンタとクロック刻み値の合計を計算します。cpc_buf_add() 関数は、result に結果を格納します。cpc_buf_add() 関数の呼び出しでは、cpc_buf_t 値がすべて同じ cpc_set_t 構造体から由来する必要があります。result インデックスは、バッファー内の要求インデックスごとの left + right の計算結果を含みます。また、結果のインデックスは tick の合計も含みます。cpc_buf_add() 関数は、の出力先バッファーについての高精度な時刻表示を、left または right バッファーの最新時刻に設定します。

cpc_buf_copy() 関数は、src と同じdest を作成します。

cpc_buf_zero() 関数は、buf 内のすべてを 0 に設定します。