Linux(および一般的にPOSIX)での高解像度時間に現在推奨されているインターフェースはclock_gettimeです。マニュアルページを参照してください。
clock_gettime(CLOCK_REALTIME, struct timespec *tp) // for wall-clock time
clock_gettime(CLOCK_PROCESS_CPUTIME_ID, struct timespec *tp) // for CPU time
しかし、manページを読んでください。POSIXがそう言っているので、-lrtとリンクする必要があることに注意してください。おそらく、独自のclock_gettimeを定義した古いプログラムの場合、-lcでのシンボルの競合を回避するためですか?しかし、動的ライブラリは弱いシンボルを使用します...
最高の睡眠機能はナノスリープです。信号やusleepのようながらくたをいじることはありません。それはただ眠ることと定義されており、他の副作用はありません。また、(信号などから)早く目が覚めたかどうかがわかるので、必ずしも別の時間関数を呼び出す必要はありません。
とにかく、システムコールを伴う短いものの1人の担当者をテストするのに苦労するでしょう。バリエーションの機会はたくさんあります。たとえば、スケジューラーは、他の作業が必要であると判断する場合があります(プロセスが開始されたばかりの場合は、タイムスライスをまだ使い切っていない可能性があります)。CPUキャッシュ(L2およびTLB)は簡単に可能です。
マルチコアマシンと、最適化するコードのシングルスレッドベンチマークがある場合は、コアの1つに固定されたリアルタイムの優先順位を与えることができます。割り込みを処理していないコアを選択するようにしてください。そうしないと、キーボード(およびその他すべて)が完了するまでロックアウトされます。タスクセット(1つのCPUに固定するため)とchrt(リアルタイムprioを設定するため)を使用します。このトリックでgmp-develに送信したこのメールを参照してください:http:
//gmplib.org/list-archives/gmp-devel/2008-March/000789.html
そうそう、最も正確なタイミングのために、自分でrdtscを使用できます(x86 / amd64上)。ベンチングしているものに他のシステムコールがない場合、それは悪い考えではありません。関数を組み込むためのベンチマークフレームワークを入手してください。GMPにはかなりまともなものがあります。ただし、GMPに含まれておらず、mpn_whateverと呼ばれるベンチマーク関数には適切に設定されていない可能性があります。覚えていませんが、一見の価値があります。