Time Base Register というものを用いる。
Fixstars さんの Tutorial に ppe_prof.h として、ヘッダーファイルも用意されているので、
include することでとても簡単に用いることができる。
ただし、Play Station 3 で実行する場合は Cell Simulator のときと比べ、
timebase の値が異なるので注意が必要である。
timebase は、次のようにすると調べられる。
Play Station 3 で実行すると、79800000 clock であることがわかる。
ちなみに Cell Simulator では 2000000000 clock であった。
# cat /proc/cpuinfo
timebase : 79800000
これは、 79800000 Hz (79.800MHz) を意味しており、
79.800MHz 刻む毎に Time Base Register の値が 1 増えるため、次の式で実行時間を計測できる。
[Time Base Register の値の増加数] / [timebase] = 処理時間 [ sec]
[Time Base Register の値の増加数] / [timebase] * 1000.0f = 処理時間 [msec]
ppe_prof.h の実装は以下のように行う。
#include "ppe_prof.h"
#define SPU_DECREMENTER_INITIAL_VALUE 0x7FFFFFFFU
unsigned int profile;
spu_writech(SPU_WrDec, SPU_DECREMENTER_INITIAL_VALUE);
profile = spu_readch(SPU_RdDec);
/* 計測する処理をこのようにしてはさむ */
profile -= spu_readch(SPU_RdDec);
time = profile / 79800000 * 1000.0f;
Fixstars さんの Tutorial に ppe_prof.h として、ヘッダーファイルも用意されているので、
include することでとても簡単に用いることができる。
ただし、Play Station 3 で実行する場合は Cell Simulator のときと比べ、
timebase の値が異なるので注意が必要である。
timebase は、次のようにすると調べられる。
Play Station 3 で実行すると、79800000 clock であることがわかる。
ちなみに Cell Simulator では 2000000000 clock であった。
# cat /proc/cpuinfo
timebase : 79800000
これは、 79800000 Hz (79.800MHz) を意味しており、
79.800MHz 刻む毎に Time Base Register の値が 1 増えるため、次の式で実行時間を計測できる。
[Time Base Register の値の増加数] / [timebase] = 処理時間 [ sec]
[Time Base Register の値の増加数] / [timebase] * 1000.0f = 処理時間 [msec]
ppe_prof.h の実装は以下のように行う。
#include "ppe_prof.h"
#define SPU_DECREMENTER_INITIAL_VALUE 0x7FFFFFFFU
unsigned int profile;
spu_writech(SPU_WrDec, SPU_DECREMENTER_INITIAL_VALUE);
profile = spu_readch(SPU_RdDec);
/* 計測する処理をこのようにしてはさむ */
profile -= spu_readch(SPU_RdDec);
time = profile / 79800000 * 1000.0f;
※コメント投稿者のブログIDはブログ作成者のみに通知されます