私は自分のプログラムをセルフタイムで作ろうとしています.2つの方法を知っています.
1) getrusage の使用
truct rusage startu; struct rusage endu;
getrusage(RUSAGE_SELF, &startu);
//Do computation here
getrusage(RUSAGE_SELF, &endu);
double start_sec = start.ru_utime.tv_sec + startu.ru_utime.tv_usec/1000000.0;
double end_sec = endu.ru_utime.tv_sec + endu.ru_utime.tv_usec/1000000.0;
double duration = end_sec - start_sec;
これは、プログラム セグメントのユーザー時間を取得します。
2) プロセッサの実行時間を取得する clock() の使用
double start_sec = (double)clock()/CLOCKS_PER_SEC;
//Do computation here
double end_sec = (double)clock()/CLOCKS_PER_SEC;
double duration = end_sec - start_sec;
これは、プログラム セグメントのリアルタイムをフェッチします。
ただし、両方の方法で非常に長いsys時間がかかります。ユーザー時間も、これらのタイミングがない場合よりも長くなります。システム時間は、ユーザー時間の 2 倍になることもあります。
たとえば、巡回セールスマン問題を行っています。通常、ユーザーとリアルタイムの両方で約 3 秒実行される入力に対して、これら 2 つのタイミングの両方で、ユーザー時間が 5 秒を超え、リアルタイムが 15 秒を超えます。つまり、sys時間は約10秒です。
可能であれば、システム時間とユーザー時間を短縮できる改善方法や他のライブラリがあるかどうかを知りたいです。他のライブラリを使用する必要がある場合は、ユーザー時間タイミングとリアルタイム タイミングの両方のライブラリが必要です。
アドバイスをありがとう!