他の操作を推定してプロファイリングするために clock_gettime() 関数の時間を計る必要があります。これは宿題のためなので、プロファイラーを使用できず、独自のコードを作成する必要があります。
私がやっている方法は以下のようなものです:
clock_gettime(CLOCK_PROCESS_CPUTIME_ID,&begin);
for(int i=0;i<=n;i++)
clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &end);
clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &end);
cout<<(end.tv_nsec-begin.tv_nsec)/n; //time per clock_gettime()
問題は、n=100 の場合、出力: 370.63 ns、n=100000 の場合、出力: 330 ns、n=1000000 の場合、出力: 260 ns、n=10000000、出力: 55 ns、....減少し続けることです。 .
これは命令キャッシュが原因であることは理解していますが、プロファイリングでこれを処理する方法がわかりません。たとえば、gettime を使用して関数呼び出しの時間を見積もる場合、gettime がそれ自体に費やした時間をどのように知るのでしょうか?
これらすべての値の加重平均を取ることは良い考えでしょうか? (必要な操作を同じ回数実行し、その加重平均を取り、gettime の加重平均を差し引いて、キャッシュに関係なく操作の適切な見積もりを取得できますか?)
どんな提案でも大歓迎です。
前もって感謝します。